web-dev-qa-db-ja.com

dd:バックアップをまったく同じディスクに復元するときに「空き容量がありません」

少し前に、を使用してディスク全体のバックアップを作成しました

dd if=/dev/nvme0n1 conv=sync,noerror bs=64K | gzip -c > backup.img.gz

今日、私はこのバックアップを使用して同じディスクに復元しました

gunzip -c backup.img.gz | dd of=/dev/nvme0n1

ddは、次のエラーメッセージで終了しました。

dd: writing to '/dev/nvme0n1': No space left on device
1000215217+0 records in
1000215216+0 records out
512110190592 bytes (512 GB, 477 GiB) copied, 5769.06 s, 88.8 MB/s

復元プロセスが失敗したと想定する必要がありますか?もしそうなら、私は私のディスクを復元するために何ができますか?

fdisk -l /dev/nvme0n1のバックアップもあり、復元操作後のfdisk -lの出力は以前と同じですが、それが成功を保証するものかどうかはわかりません。

1
pato

dd conv=sync,noerror(またはdd conv=noerror,sync場合によってはデータを破損するため

ただし、あなたの場合は、おそらくファイルの終わりにある余剰ゼロです。デバイスが64Kの正確な倍数でない場合、ddコマンドは画像ファイルの最後の64Kブロックをゼロで埋めていたでしょう。そして、それらの追加のゼロは復元できません。これは無害です。

その理論を検証するために、いくつかのコマンドを実行できます。

# blockdev --getsize64 /dev/nvme0n1
expected result: 512110190592
# gunzip < backup.img.gz | wc --bytes
expected result: 512110231552 (next multiple of 64K)

それが正しければ、おそらくここで大丈夫です。

5
frostschutz

圧縮されたストリームをddに書き込むと、データが失われる可能性がある場合があります。これを試して

zcat backup.img.gz >/dev/nvme0n1

または、ddを使用する必要がある場合は、代わりにこのパイプラインを使用してください

gunzip -c backup.img.gz | dd iflag=fullblock bs=64K of=/dev/nvme0n1

これらの両方が失敗した場合、交換用ディスクは元のディスクよりも小さいと言えます。

0
roaima