macOS で dd コマンドでディスククローンするときの注意

Mac,お役立ち情報,プログラムdd,クローン,ディスク管理

PC の調子が悪いので SSD の中身を別の SSD にクローンしようとして、UNIX ライクに dd コマンドを使おうとしたら、単純じゃなかったのでそのメモです。

手順の結論

以下の手順で操作します。

  1. df コマンドで /dev/disk* の情報を確認し、クローン元とクローン先のディスクのデバイスファイルの名前を確認
  2. umount コマンドでクローン先ディスクをアンマウント(Finder などで「取り出す」を使わない)
  3. 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" を取り出す」などとしてしまってはいけないのです。

macOS でディスクドライブを取り出す操作のスクリーンショット
macOS でディスクを取り出そうとする図

代わりにターミナルでコマンドを 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 が指定されています。

参考リンク