dd:将备份恢复到完全相同的磁盘时“没有剩余空间”

pat*_*ato 1 backup dd restore

不久前,我使用了整个磁盘的备份

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
Run Code Online (Sandbox Code Playgroud)

我是否必须假设恢复过程失败?如果是这样,我该怎么做才能恢复我的磁盘?

我也有备份fdisk -l /dev/nvme0n1,现在恢复操作后,输出fdisk -l和之前一样,不知道能不能保证成功。

fro*_*utz 5

在某些情况下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)
Run Code Online (Sandbox Code Playgroud)

如果那是正确的,那么你在这里可能没问题。

  • `conv=sync` 会将一个短读填充到一个完整的块中。从压缩流中读取时不要这样做。 (2认同)