ステキシフトby石川ジン平

真面目系クズ、ブラック企業、読書記事、考え方について書いています。

SDカードイメージのコピー(ラズパイのイメージコピー for Mac)

ラズパイが便利で、しかし操作を間違えると起動に失敗したりするので、SDカードの丸ごとコピーを作りたいと思いました。 これがびっくりするほど大変だったので、やり方をまとめました。

そもそも、ラズペリーパイ(Raspberry Pi)に使われてるmicroSDカードのデータは、MacやWindowsから単純にデータコピーするだけだと動きません。 正直よくわかってないんですが、OSイメージ(Linuxの何か)とか書いてあるので、そもそもWindowsのエクスプローラやMacのFinderからでは表示することすらできません。 どうしたかというと、microSDカードのイメージを丸々保存して、それを書き込むことにしました。 作業は自己責任で、参考にしてください。

といって以下に書いたのですが、この後ツールが見つかりました。 ApplePi Bakerです。 英語のソフトですが、SDカードのバックアップも復元も簡単にできます。 しかも、Shrink(バックアップ時のサイズを小さくする)まで対応! (なお自分の環境ではshrink時の復元はうまくいきませんでしたが......) ApplePi Bakerは機能のオンオフが少しわかりにくく、英語読まないといけないので、後で説明しようかなと思います。 他にもラズパイ3の電源少ない問題も個人的な解決を見たので後で解説したいなあ......

microSDカードイメージの保存

ツールを使いたかったのですが、Macで良いものが見つからなかったので、ターミナルを使います。 windowsは「Win32DiskImager」というのを使うと良いらしいです。検索してください。

microSDカードのドライブの確認

MacでまずはmicroSDカードを認識させます。 データの入ってる方のmicroSDを(アダプタとか使って)刺してください。 Finder上で認識を確認したら、ターミナルを起動してください。 そうしたら以下を入力。

diskutil list

を入れると、以下のようなディスクリストが現れるので、容量やディスク名を確認して、どの項目にmicroSDカードが認識されているのか確かめます。

/dev/disk4 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *62.1 GB    disk4
   1:             Windows_FAT_32 BOOT                    67.1 MB    disk4s1
   2:                      Linux                         2.1 GB     disk4s2
   3:                      Linux                         29.5 GB    disk4s3

/dev/disk〇 というように普通はなっていると思います。

で、これをunmountします。

diskutil unmountDisk /dev/disk○

と入力します。こんな感じになります。

$ diskutil unmountDisk /dev/disk4
Unmount of all volumes on disk4 was successful

microSDカードイメージの吸い出し保存

で、ddコマンドでバックアップします。カレントディレクトリ($の前に書いてあるフォルダ)に保存されます。

sudo dd if=/dev/disk○ of=任意ファイル名.img bs=1m

この時、以下の書き方をした方が早い(10倍以上早い)

sudo dd if=/dev/rdisk○ of=任意ファイル名.img bs=1m

「r」が増えてます。

$ sudo dd if=/dev/rdisk4 of=backup1.img bs=1m 
Password:

パスワードを要求されるのでパスワードを入れてください。

Passwordの下に、カレントディレクトリの名前が表示されてない場合は、まだ作業が終わってません。 終わったら、またmicroSDがマウントされるので、Finder上からで良いので、またアンマウントしてください。

microSDイメージからの復元

空のmicroSDを刺してください。 元のデータの入ったmicroSDは、書き間違いを起こさないために、物理的に抜いた方が良いと思います。 本来は balenaEtcher - Flash OS images to SD cards & USB drives を使うと簡単みたいなんだけど、うまくいかなかったので以下ではターミナルを使います。 OSとかの書き込みはできるけど、普通のイメージはできないのかもしれない。

ドライブの確認

上記と同じなので省略 ドライブの確認→アンマウント

バックアップイメージからの書き込み

ddコマンドでバックアップファイルを書き込みます。 これも「r」をつけたほうが良いみたいです。書き込みはマジで時間がかかります。普通に数時間かかります。

sudo dd if=./backup1.img of=/dev/rdisk4 bs=1m

$sudo dd if=./backup1.img of=/dev/rdisk4 bs=1m
Password:

バックアップと同様に、終わったらまたmicroSDがマウントされるので、またアンマウント。

うまくいくと良いなあ

参考

simple-was-best.com

-- ディスクのクローンを作成 - Qiita

BSD (Mac) では,同一デバイスに /dev/diskX と /dev/rdiskX の 2 つの名前でアクセスできます.

disk も rdisk も同じデバイスを参照しますが,ランダムアクセス可能かどうか,という点で異なります.disk はランダムアクセスが可能です.それに対して,rdisk はデバイスにシーケンシャルアクセスします. ランダムアクセスは,インデックスを指定することで参照したいブロックに直接アクセスすることができます.それに対して,シーケンシャルアクセスは,先頭から順にブロックをたどって参照したいブロックにアクセスします. ランダムアクセスは配列のようなもの,シーケンシャルアクセスはリストのようなもの,というイメージを持っておくといいでしょう.

disk はランダムアクセスを可能にするために 4 KB のバッファを介してデバイスにアクセスします.それに対して,rdisk はバッファを介さずにデバイスにアクセスすることができます.そのため,dd コマンドのようなランダムアクセスの発生しない読み書きの場合は,rdisk でデバイスを参照すると高速に読み書きできます.

mac のdd / ddrescue が遅すぎる大問題に対処する。 - それマグで! /dev/disk は 1.7MB/s で /dev/rdisk へは 38MB/s である。桁違いとはこのことだ。

ラズパイ4モデルB

圧倒的に性能が上がって楽しそうですが、まだ有名なラズパイ用のOSイメージがラズパイ4に対応してなかったりするので、今から買う人もラズパイ3モデルBの方が良いかもしれません ラズパイ$モデルBのamazonリンク

コピペ用まとめ

リストアップ

diskutil list

アンマウント

diskutil unmountDisk /dev/disk4

吸い出し

sudo dd if=/dev/rdisk4 of=raspberry-backup.img bs=1m

ディスク入れ替えてリストアップ

diskutil list

アンマウント

diskutil unmountDisk /dev/disk4

書き込み

sudo dd if=./raspberry-backup.img of=/dev/rdisk4 bs=1m