データのコピーや変換をブロックデバイスを直接読み書きして行う dd コマンドがある。
Unix系 OS のターミナルで使えるコマンドなので、MacOS でも使える。
先日 32GB のSDカードの完全なバックアップをとりたい事情があったときに、dd コマンドを用いて、手近にあった 64GB のSDカードにバックアップをとったのだった。
以下は、そのときの手順メモ。
まず、
diskutil list
でデバイスを確認する。
/dev/disk3 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *32.1 GB disk3
1: Windows_FAT_32 SD32 32.1 GB disk3s1
という出力が得られた(内部のハードディスクに対応する他のエントリーも同時に表示されたがここでは割愛) ので、
/dev/disk3
が SD カードに対応するデバイスであることがわかる。
バックアップ元のSDカードがマウントされている状態では dd コマンドを使えないので、あらかじめマウントを外す必要がある。だが Finder から Eject してはいけない。
diskutil unmountDisk /dev/disk3
あるいは
diskutil unmountDisk /Volumes/SD32
などとする。
そして、バックアップ元SD (32GB) の内容をダンプする。
sudo dd if=/dev/disk3 of=/Users/somewhere/sd.dd
SDカードを入れ替える(バックアップ先のSDカードを挿入)。
sd.dd ファイルをバックアップ先SD (64GB) に書き込む。
sudo dd if=/Users/somewhere/sd.dd of=/dev/disk3
バックアップ完了。
その後、バックアップの用がなくなったので、バックアップ先としてつかった 64GB の SD カードを別の用途に使おうとしたら、32GB として認識されていることに気づいた。
Disk Utility を使ってフォーマットしても依然として 32GB のままである。
困った。折角 64GB なのに。
そこで、再度 dd コマンドで 64GB のファイルを 64GB の SD カードに書き込んでみることにした。
まず、64GB のダミーファイルを作成する。
dd if=/dev/zero of=zero.dat count=125000000
デフォルトでブロックサイズは 512バイトなので、512 x 125000000 = 64,000,000,000
つまり 64GB である。
この 64GB のダミーファイルを SDカード (64GB) に dd コマンドで書き込む。
sudo dd if=./zero.dat of=/dev/disk3
かなり時間がかかったが、無事終了。
コマンド実行終了後マウントして、Disk Utility で初期化することで無事 64GB として認識される SD カードに戻った。