MicroSDカードからイメージファイルを作成する anchor.png

Raspberry PiにOSをインストール後,いろいろな設定,各種ソフトウェアをインストールして一段落したら,MicroSDカードをバックアップしておくのは重要。
Raspberry PiのMicroSDカードにはOSやデータなどすべてのファイルが保存されているが,突然ファイルシステムが壊れてしまうことがある。
ファイルシステムが修復できれば良いが,修復出来なくなってしまうこともよくある。

そこで,MicroSDカードをバックアップしておく。

Page Top

ネットワークで接続されているファイルサーバーへイメージファイルを作成する anchor.png

例えば,ネットワークで接続されているMS Networkのファイルサーバーにイメージファイルを作成してみる。

まず,イメージファイルを保存するディレクトリを,Raspberry Piでマウントする。

  • マウントポイントの作成
    # mkdir /mnt/backup
    のようにして,マウントポイントを作成する。
  • /etc/fstabにマウントする場所を追加する
    /etc/fstabファイルの例:
    //192.168.XX.YYY/ZZZ /mnt/backup cifs vers=2.1,username=xxxx,password=yyyy,rw,uid=xxxx,gid=yyyy,defaults 0 0
    vers=2.1は,MS Networkのプロトコルバージョン。保存先のファイルサーバーに合わせる。
  • 保存先をマウントする
    # mount /mnt/backup

これで保存先が,/mnt/backupにマウントされるので,必要であればバックアップするディレクトリを作成する。

# mkdir /mnt/backup/rpi_image

あとはddコマンドでMicroSDカードを丸ごとイメージファイルに書き出す。

# dd if=/dev/mmcblk0 of=/mnt/backup/rpi_image/raspbian_bk.img bs=1M

しばらくすると(すごく時間がかかる),ネットワークに接続されているファイルサーバーに,raspbian_bk.imgファイルが作成される。

Page Top

MicroSDカードを抜いてPCでバックアップする anchor.png

Raspberry PiをシャットダウンしてMicroSDカードを抜いて,PCでイメージファイルにバックアップすることも出来ます。

DD for Windowsが便利です。

Win32diskimagerでもイメージファイルに書き出しが出来ます。しかし,Win32diskimagerでは,バックアップしたイメージを再度exFATな64GBのMicroSDカードに書き込んだ場合ブート出来なくなってしまうので,注意が必要です。

Page Top

バックアップしたイメージファイルの再使用時の注意 anchor.png

MicroSDカードのバックアップとしてイメージファイルを作成したが,それを再度MicroSDカードに書き込むときに注意することがある。上記のWin32diskimagerを使っての64GBなMicroSDカードに書き込む以外に注意することです。

MicroSDカードは,同じ容量でも多くのメーカーからリリースされている。Raspberry Piには相性問題があってそれにも注意する必要があるが,この同じ容量なのにうまくバックアップしたイメージファイルがMicroSDカードに書き込めないということがある。困ったことにメーカーが同じでもこの問題が発生する時がある。
msd1.pngmsd2.png

これは,同じ16GBのMicroSDカードでも,メーカーやMicroSDカードの内部に実装されているコントローラーにより,16GBの容量が微妙に異なっているのが原因。16GBのMicroSDカードをバックアップしたイメージファイルを,別の16GBのMicroSDカード(実際は少し容量が少ない16GBのMicroSDカード)に書き込む時,容量不足で書き込めないということが起こる。

Page Top

縮小したイメージファイルか縮小しながらパーテーションをコピーする anchor.png

この問題を解決するには,2通りの方法がある。

1つ目の方法は,バックアップする前にRaspberry PiのMicroSDカードのパーテーションを,少し小さくしておくことで回避出来るようになる。
小さくするパーテーションは,/boot(FAT/FAT32)以外のext4ファイルシステムの第2パーテーション。gparted等のパーテーション管理ツールを使って縮小することが出来る。

2つ目の方法は,ドライブを丸ごとコピーするようなツールを使用して,MicroSDカードをより小さなMicroSDカードへ丸ごとコピーする方法。コピーにターゲットが容量が小さい場合は自動的にパーテーションサイズを縮小してコピーされます。

Page Top

あらかじめパーテーションサイズを縮小しておく方法 anchor.png

gpartedは以下のようにしてインストールします。

# apt-get install gparted

後は,gpartedを起動して,該当のパーテーションを数GB小さくなるように編集しておけばまあ安心。

Page Top

MicroSDカードを丸ごとコピーするツールを使用する方法 anchor.png

Windows PCで動作する,ハードディスク/パーティションをイメージファイルとして丸ごとバックアップできるようなソフトを使います。
こんなツールの一つに,EaseUS Todo BackupやMiniTool Partition Wizardがある。

これらのツールを使って,より小さい容量のMicroSDカードに丸ごとコピーすることが出来る。32GBのMicroSDカード → 16GBのMicroSDカードといったこともOK。

Page Top

ディスクイメージのサイズを縮小する実際の方法 anchor.png

Raspberry PiのMicroSDカードに入れたOSを,バックアップするためにWin32DiskImagerを使って.imgファイルを作成した。
しかし,MicroSDカードが32GBのものだったので,イメージファイルも32GBになって,16GBとかのMicroSDカードだとWin32DiskImagerなんかで書き込めない。

このため,.imgファイルのサイズを縮小してみる。

Page Top

イメージファイルの作成 anchor.png

Raspberry PiからMicroSDカードを抜いて,Win32DiskImagerで読み込んで.imgファイルのイメージファイルを作成した。
MicroSDカードが32GBだったため,.imgファイルのサイズも32GBになっている。

Page Top

イメージファイルのパーティションサイズを縮小する anchor.png

Page Top

ループバックデバイスの確認 anchor.png

作業するlinuxマシンで,ループバックデバイスが使用出来るかどうか確認する。

# losetup -f
/dev/loop0

使用できない場合は,

# modprobe loop

で,デバイスドライバーをロードして,使用出来るようにする。

Page Top

ループバックデバイスにイメージファイルをマウントさせる anchor.png

イメージファイルをループバックデバイスに関連付ける。

# losetup /dev/loop0 xxxxxxx.img

ループバックデバイスのパーティションを認識させる。

# partprobe /dev/loop0
Page Top

gpartedでパーティションの容量を変更する anchor.png

ループバックデバイス/dev/loop0をパーティション編集ツールgpartedで開く。

# gparted /dev/loop0

gpartedでパーティションのサイズを32GBから希望のサイズに縮小する。

Page Top

ループバックデバイスからイメージを解除 anchor.png

ループバックデバイスからイメージファイルをマウント解除する。

# losetup -d /dev/loop0
Page Top

イメージファイルのサイズを変更する anchor.png

イメージファイルの中のパーティションサイズは縮小されているが,ファイルサイズは元のサイズになっている。

# fdisk -l xxxxxxxx.img
Disk myimage.img: 6144 MB, 6144000000 bytes, 12000000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ea37d

      Device Boot      Start         End      Blocks   Id  System
xxxxxxx.img             2048     9181183     4589568    b  W95 FAT32

これを使用していない部分を削除して,イメージファイルのサイズを縮小する。
9181183セクタまで使用しているので,そのサイズ9181183 x 512にイメージファイルを縮小する。

# truncate --size=$[(9181183+1)*512] xxxxxxxxxx.img
Page Top

イメージファイルを8GBのmicroSDに書き込む anchor.png

# dd if=xxxxxxxxx.img of=xxxxxxxxxx_new.img

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 128, today: 1, yesterday: 0
最終更新: 2023-04-23 (日) 07:17:11 (JST) (369d) by yuji