はじめに
ddコマンドは間違って使った場合はデータの損失のリスクがあります。ディスクコピーの状況によってこの記事のコマンドが適用できない場合も考えられますので、リファレンスを確認したうえで実行は自己責任でお願いします。
TL;DR
- 3つのドライブを用いてデータのコピーをする。
- ドライブ1: 「コピー元」のドライブ
- ドライブ2: 「仲介役」
- ドライブ3: 「コピー先」のドライブ
-
if
とof
の指定を間違えた場合のリスクを軽減することができる。- 操作1では「コピー元」のディスクイメージを「仲介役」内に作成
- 操作3では「仲介役」のディスクイメージを「コピー先」に展開
- 操作を分ける、同時に接続しないことで「コピー先」から「コピー元」に書き込ませない
- 複数コアを利用する圧縮コマンドを用いることでコピーの高速化を行う。
参考にした記事
ディスクイメージの作り方(圧縮あり)
https://www.cyberciti.biz/faq/unix-linux-dd-create-make-disk-image-commands/
pigz, unpigzの使い方
https://www.baeldung.com/linux/gzip-and-gunzip
内容
pigz, unpigz
はgzip, gunzip
の複数コアに対応したバージョンである。
pigz=parallel implementation of gzip
1. ディスクイメージの作成
「コピー元」(/dev/sdX
)と「仲介役」のドライブをつける。
「コピー元」(/dev/sdX
)の内容をマウントした「仲介役」内のcompressed.gz
に圧縮する。status=progress
で進捗を確認することができる。
dd if=/dev/sdX conv=noerror,sync status=progress bs=512K | pigz -c >/path_to_compressed.gz
2. ドライブの入れ替え
「コピー元」(/dev/sdX
)のディスクを外して「コピー先」(/dev/sdY
)をつける。
3. ディスクイメージの展開
「仲介役」内のcompressed.gz
の内容を「コピー先」(/dev/sdY
)に展開する。status=progress
で進捗を確認することができる。
unpigz -c /path_to_compressed.gz | dd of=/dev/sdY conv=noerror,sync status=progress bs=16M