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

如果这两个都失败,那么我会说您的替换磁盘比原始磁盘小。

相关内容