データのコピーや変換をブロックデバイスを直接読み書きして行う 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 カードに戻った。