macOS で dd コマンドでディスククローンするときの注意
PC の調子が悪いので SSD の中身を別の SSD にクローンしようとして、UNIX ライクに dd コマンドを使おうとしたら、単純じゃなかったのでそのメモです。
手順の結論
以下の手順で操作します。
- df コマンドで /dev/disk* の情報を確認し、クローン元とクローン先のディスクのデバイスファイルの名前を確認
- umount コマンドでクローン先ディスクをアンマウント(Finder などで「取り出す」を使わない)
- dd コマンドでクローンする
具体的なコマンド例は以下のとおり。
sudo umount -fv /Volumes/ボリューム
sudo dd if=/dev/disk22 of=/dev/disk23
ここでは /dev/disk22 の中身を /dev/disk23 にクローンしようとしています。
このような手順を踏む理由は、端的に言うと「dd コマンドを使うためにはディスクをアンマウントしないといけないが、macOS の GUI における「取り出す(eject)」操作はいわゆる OS からのアンマウントだけではなく、デバイスファイルも外してしまうため、 dd コマンドの指定先もなくなってしまうから」です。
説明
まずはクローンに使いたいディスクを df コマンドを使って調べます。例えば、適当なディスクを繋いだ状態の私の環境で df -h
コマンドを実行すると、以下のように表示されます。
% df -h # -h は --human-readable オプションで、サイズを読みやすい単位で表示する
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk3s3s1 926Gi 10Gi 55Gi 16% 412k 579M 0% /
devfs 254Ki 254Ki 0Bi 100% 879 0 100% /dev
## 中略
/dev/disk23s1 1.8Ti 695Gi 1.1Ti 38% 1 0 100% /Volumes/USB DISK
/dev/disk24s1 1.8Ti 1.4Ti 423Gi 78% 1 0 100% /Volumes/Untitled
Size や Used の値からディスクを判断して、ここでは /dev/disk23s1 をクローン元、/dev/disk24s1/ をクローン先に使うとします。
Linux などであれば、/Volumes/USB\ DISK をアンマウントしてから dd コマンドで
dd if=/dev/disk23 of=/dev/disk24 bs=4096
とすればコピーできます。しかし、この「アンマウントする」という操作が macOS ではコマンドベースで操作しないとうまくいきません。すなわち以下の画像のように GUI 上で右クリックして「"USB DISK" を取り出す」などとしてしまってはいけないのです。
代わりにターミナルでコマンドを umount コマンドを実行し、取り出す必要があります。umount コマンドの実行には管理者権限が必要なので、sudo で実行します。
sudo umount -fv /Volumes/USB\ DISK # ドライブ名にスペースがあるのでバックスラッシュを入れている
これで無事に取り出せるので、dd コマンドを使ってクローンしてやります。この操作も umount と同様に sudo で実行します。
sudo dd if=/dev/disk22 of=/dev/disk23 bs=4096
ちなみに dd コマンドの bs は 1 回の読み書きにおけるデータサイズを指定するオプションです。デフォルトでは 512 bytes が指定されています。
ディスカッション
コメント一覧
まだ、コメントがありません