不久前,我使用以下命令对整个磁盘进行了备份
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
如果这两个都失败,那么我会说您的替换磁盘比原始磁盘小。