MacでのRaspberry Piのバックアップ&復元をちゃんと確認する

相変わらずRaspberry Piの無線LANの調子が悪くて、色々試しているうちに、起動時のSDカードの読み込みでエラーが発生するようになってしまいました。

「こんなときのためのバックアップ!」ということで、以前にMacのディスクユーティリティを使って作成しておいたdmgファイルで、再びディスクユーティリティを使ってSDカードに復元しようとしたら、何やらうまくいきません。半日ぐらいがんばってみましたが、うまいこといきません。ということで、イチからRAPIRO環境を立ち上げ直すことになりました。めんどくさいからって復元テストをサボっていたらこの様です。なんという片手落ち。

まだそんなに大したことはしていないし、幸いにしてやってきたことは全部このHPに載せてあるので、おそらく一日あれば復旧は可能だと思われますが、同じ思いをするのは二度とゴメンなので、面倒ですが今回はしっかりバックアップ&復元のテストをやってから環境構築を再開したいと思います。

1. Raspberry Piの起動確認

ここからNOOBSを落として来て、解凍。中身をSDカードにコピーして、Raspberry Piに挿してから電源ON。Raspbianを選択してインストール。起動できることを確認。

2. Macでバックアップ作成

前回はディスクユーティリティを使ってうまくいかなかったので、今度はコマンドラインで試してみる。参考はこちらこちら

まず、mountでSDカードのデバイス名を確認。

Mac-mini:~ xxxx$ mount
/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
/dev/disk1s2 on /Volumes/Time Machine バックアップ (hfs, local, nodev, nosuid, journaled)
/dev/disk2s1 on /Volumes/RECOVERY (msdos, local, nodev, nosuid, noowners)
/dev/disk2s5 on /Volumes/BOOT (msdos, local, nodev, nosuid, noowners)

この場合だと、disk2がSDカードのデバイス名。まず、これをアンマウントする。

Mac-mini:~ xxxx$ diskutil umountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

もう一回mountで、アンマウントされているかを確認。

Mac-mini:~ xxxx$ mount
/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
/dev/disk1s2 on /Volumes/Time Machine バックアップ (hfs, local, nodev, nosuid, journaled)

次に、dmgファイルを作成する。

Mac-mini:~ xxxx$ sudo dd bs=1m if=/dev/disk2 of=20140329_raspbackup.dmg
Password:
15193+1 records in
15193+1 records out
15931539456 bytes transferred in 2912.235535 secs (5470553 bytes/sec)

オプションの”bs=1m”は、「入出力のブロックサイズを1MBに指定」ということらしいですが、意味はよくわかっておりません。16GBのメモリーカードだと、処理が完了するまで結構時間がかかります。

バックアップファイルができたら、SDカードを取り出す。

Mac-mini:~ xxxx$ diskutil eject /dev/disk2
Disk /dev/disk2 ejected

3. バックアップデータの復元

バックアップデータをSDカードに写す前に、SDカードをフォーマットする。

SDカードを再び挿したら、ディスクユーティリティを開く。SDカードの下に「RECOVERY」と「BOOT」がマウントされているが、気にせずSDカード全体を選択し、MS-DOS(FAT)フォーマットを選択して消去。

disk_utility

パーティションが全部消えると確認されるが、気にせず消去。

消去が終わったら、mountでSDカードのマウント状態を確認。

Mac-mini:~ xxxx$ mount
/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
/dev/disk1s2 on /Volumes/Time Machine バックアップ (hfs, local, nodev, nosuid, journaled)
/dev/disk2s1 on /Volumes/RASPBERRYPI (msdos, local, nodev, nosuid, noowners)

disk2でマウントされているので、これをアンマウントする。

Mac-mini:~ xxxx$ diskutil umountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

この状態で、バックアップデータをSDカードに写す。

Mac-mini:~ xxxx$ sudo dd bs=1m if=20140329_raspbackup.dmg of=/dev/disk2
Password:
15193+1 records in
15193+1 records out
15931539456 bytes transferred in 2987.544501 secs (5332653 bytes/sec)

これまた結構時間がかかる。終わったら、mountでマウント状態を確認。

Mac-mini:~ xxxx$ mount
/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
/dev/disk1s2 on /Volumes/Time Machine バックアップ (hfs, local, nodev, nosuid, journaled)
/dev/disk2s1 on /Volumes/RECOVERY (msdos, local, nodev, nosuid, noowners)
/dev/disk2s5 on /Volumes/BOOT (msdos, local, nodev, nosuid, noowners)

SDカードのフォーマット前と同じマウント状態になっているので、大丈夫そう。あとはこれを取り出して、Raspberry Piで動作を確認する。

Mac-mini:~ xxxx$ diskutil eject /dev/disk2
Disk /dev/disk2 ejected

Raspberry PiにSDカードを挿して電源を入れると、無事に起動しました。

 

無意味にSDカードを消去したり復元したりするのは、時間がかかりますし、正直言って大変面倒です。が、それでも1回はやっておいて、作業記録をつけておくことをおススメします。できれば色々作り込んで行く前に。でないと、データが壊れた瞬間に、RAPIROで遊ぶモチベーションががくんと下がってしまいかねません。