dd:同じディスクにバックアップを復元するときに「残りのスペースがありません」

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

可能です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)

これが正しいなら、おそらく大丈夫でしょう。

答え2

dd圧縮ストリームに書き込むと、データが失われる可能性があることがわかりました。この試み

zcat backup.img.gz >/dev/nvme0n1

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

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

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

関連情報