我想使用 Linux 命令备份我的 SSD dd
,但我不确定该方法的可靠性如何。我想我读到的地方dd
不检查或报告错误,所以显然如果是真的那么这将是一个交易破坏者。
这将是命令:
sudo dd status=progress bs=512K if=/dev/nvme0n1 of=/media/d/ssd.img
因此,请解释该dd
命令对于所述用例的可靠性。
并且,是否有更可靠和/或更简单的替代方案?
答案1
总而言之:使用ddrescue
它支持恢复/继续功能,具有自动日志和大量其他选项。更多内容请见ddrescue 主页。
语法示例:
ddrescue /dev/sde yourimagename.image sde.log
如果您想(考虑到您提到恢复的评论)将上述命令中的图像恢复到另一个大小相同的驱动器上:
ddrescue -f yourimagehere.image /dev/sde restore.logfile
此外,这是ddrescue
比 dd 更快——至少在比较和dd
+的速度时看起来确实如此pv
。
答案2
关于“不检查或报告错误”的原始评论可能是因为默认情况下“dd”不会填充坏读,因此对于面向块的设备,不仅坏块而且所有后续块都将是不正确的(因为它们是不再对齐)。正如其他人所说,可以使用 'conv=noerror,sync' 选项修复此问题,该选项告诉 dd 确保块保留在块边界上。它应该由与文件系统块大小匹配的块大小设置连接,通常为 4096 字节,但可以更低。
我同意 Johan Myréen 关于使用文件备份的评论,因为备份的粒度要小得多 - 备份一个文件时出现的错误并不一定会影响其他文件。您还可以使用对文件数据进行纠错的文件系统(例如 zfs、btrfs 和其他一些配置),因此至少您知道何时发生错误并希望能够修复它们。
检测不良备份的另一种方法是使用消息摘要哈希代码,例如原始设备(未安装!!)和 dd 备份文件上的“sha256”...它们当然应该相同。
最后,备份的最佳实践是永远不要只依赖一个备份……至少保留 2 个!
答案3
磁盘克隆实用程序 - 例如克隆齐拉将制作磁盘的压缩副本,包括分区表等,但忽略未分配的空间以及众所周知的文件系统(如 ext4 等)中未使用的空间。
显然,仅复制数据而不复制未使用的空间要快得多。
如果您怀疑您的 NVME 存储无法靠对于读取操作,那么您可能需要考虑使用软件来rsync
提取大部分/全部数据(除了克隆操作之外)。
答案4
dd
顾名思义,进行磁盘映像备份。如果您的 1 TB 驱动器已使用 100 GB,则磁盘映像仍为 1 TB。如果您知道存在零块并且具有命令,conv=sparse
则存在该选项。dd
ddrescue
--sparse
但是,出于备份目的,您可能不需要原始磁盘映像。对于大多数备份用例来说,使用tarball 复制文件rsync
或将所有内容放入(可能是压缩的)tarball 中就足够了,并且使用文件系统在文件级别上工作可能比直接使用已安装的映像更好。rsync
还有一个方便的增量传输算法,仅发送文件中的差异更新中备份(与增量备份不同,您需要额外的软件)。