是否可以 dd 您启动的当前磁盘?

是否可以 dd 您启动的当前磁盘?

我有一个在实时 USB 磁盘上运行的 FreeNAS 副本。我想对它进行备份。

在尝试避免破坏完美运行的系统时,我是否可以dd在操作系统运行时使用磁盘?

或者我必须关闭这台机器并运行dd另一台机器?

答案1

您可以dd在正在运行的磁盘上运行。应避免在磁盘结构发生重大变化时这样做。fschk完成后,您还应该到达目的地。备份期间系统越安静越好。

如果您想使用“dd”,运行冷备份(文件系统未挂载)是最佳选择。

还有更好的选项来备份正在运行的系统。

  • tar或者cpio会读取文件并合理地处理打开的文件。您可能会错过备份期间发生的一些更改。
  • rsync在打开文件和备份期间遗漏的更改方面表现类似tar。它可用于执行初始备份,并且增量备份效果非常好。运行增量备份时,它可以跳过复制文件的未更改部分。

如果您正在备份带有数据库数据文件的文件系统,请调查对热备份的支持。

答案2

这是技术上可行(就像“搬起石头砸自己的脚”),但这是极不明智的,特别是当磁盘的任何分区都是可写的时候。

想象一下这样的场景:

  • dd从开头开始读取磁盘,然后愉快地读取到结尾。
  • 当写入一半时,操作系统会将文件写入磁盘。不过文件有些碎片化 - 一部分物理位置在磁盘的开头,另一部分物理位置在磁盘的结尾。
  • 对于操作系统来说没有问题 - 它可以很好地写入文件,并将其从写入缓存中推出;现在它已正确写入磁盘。
  • 问题出在您的备份上:dd已经过去并复制了文件的第一部分,因此当到达第二部分时它将捕获不一致的状态 - 每个部分都来自不同的版本!

如果你有能力将 USB 磁盘上的所有分区重新安装为只读,则不会发生此问题(重点是“应该不是”);但这需要大量的前期安装/离线准备和/分区的启动时设置 - 我认为您通常无法/动态重新安装 r/o,因为会有多个需要 r/w 访问权限的事情悬而未决。

因此,运行副本可能不会破坏正在运行的系统,但是不会给你一个可行的备份,使任务变得毫无意义。我强烈建议离线复制 - 这需要关闭机器。

答案3

为此,我dump(8)在 FreeBSD 上使用。例如dump -auLf /mnt/some-other-disk/root.dmp /

-L选项允许通过拍摄快照来复制实时文件系统。

可以使用 恢复转储restore(8)

它可能只适用于 UFS;对此我不确定。

答案4

我已经在测试环境中成功完成此操作,最后使用 fsck 和 rsync 来提高良好设备复制的机会。

相关内容