然而...

然而...

我必须备份我的硬盘。我想使用dd并将图像放在外部硬盘上。

  • 我可以使用硬盘本身上的操作系统来执行此操作dd,还是必须从其他设备(例如 LiveCD)启动?
  • 一般来说,如果设备已安装并正在工作,拍摄设备的图像是否安全?
  • dd如果设备已安装,但我确定在运行时没有其他 I/O 操作怎么办?

我确信这rsync是用于备份的最佳工具,特别是增量备份。

但我对 感兴趣dd,因为我还想备份其他存储设备,并且它还复制存储在未分区空间上的数据。例如,我的电子书阅读器使用未分区的空间来存储uboot、内核和其他数据。

答案1

一般来说,这是不安全的。 FS 假设操作是按一定顺序写入的,因此它可以写入文件的新数据,然后从其他数据中创建指向它的指针,具体细节取决于文件系统。想象一下如果发生以下情况:

  1. dd从包含垃圾或一些数据的位置 X 读取
  2. 文件系统写入位置 X
  3. 文件系统写入位置 X+1 指向位置 X 的指针
  4. dd从位置 X+1 链接读取到位置 X

从备份的角度来看,您得到的是垃圾数据。不过,有几种方法可以解决这个问题:

  • 通过文件系统特定命令冻结文件系统(我相信xfs_freeze是一个,我不知道任何其他命令 - 但这样的选项至少在理论上存在)
  • 创建一个lvm快照并从中复制。副本将就像您重新启动计算机一样(减去 HDD 重新排序),因此它将是一个脏文件系统,但副本将是原子的。请注意,一些文件系统(例如 XFS)需要首先冻结。
  • 按照其他人的建议使用 rsync。现在副本是安全的,您不需要 LVM,但副本不是原子的。因此,虽然它在文件系统级别上避免了上述问题,但它仍然可能会遇到文件问题(不太可能,但可以想象例如在后台执行 mv 时丢失文件)
  • 使用带快照的文件系统,例如BTFS,燕尾服3,兹夫斯,尼尔夫斯...然后您就可以避免这两个问题 - 您只需创建一个快照并通过具有完全原子性的 rsync 从中进行复制即可。但请注意,此类文件系统通常是实验性的。

最后一点 -dd可能不是最好的备份方式。它会复制整个磁盘,这通常会造成浪费,因为您还复制了“垃圾”。如果您需要类似的磁盘映像部分图像可能会更好。如果你没有更好的选择,那就是使用 rsync、tar 等差异/增量模式,或者使用完整备份系统,例如杆骨,塔斯纳普或许多其他之一。重复数据删除可能会在备份大小方面创造奇迹。

答案2

这取决于分区的具体用途以及副本的目的。不过,我要说的是,一般来说dd是不适合备份文件系统的工具。这也不是它的初衷。

  • 复制分区的空部分会浪费大量时间。

  • 如果当前安装了文件系统,则可能会导致不一致,部分原因是它是操作系统级别的实体,并且可能与底层块设备不同步。最初打电话sync对此没有多大帮助,因为该过程不是即时的。

使用cp -arsync代替。当然,您需要创建目标分区,因此它并不那么容易,但它更安全、更灵活。如果您需要创建文件系统图像, 见下文。

如果您打算复制根文件系统,绝对不要使用dd.您必须使用类似的东西rsync -ax(或cp -ax在各个顶级目录上),因为有很多东西不得出现在副本中。在 Linux 上,这包括:

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

其中一些实际上是内核接口,而不是磁盘上的真实目录。如果你复制它们,你就复制了一堆在副本中不适用的信息;如果你尝试用它运行一个系统,它只会浪费空间,因为真正的接口将安装在顶部。其他包含正在运行的进程使用的临时信息,这些是一个更大的问题,因为如果您复制它,系统将无法整理垃圾。

如果要创建根文件系统的映像文件(或任何文件系统),创建一个空图像文件 - 这是以下用途的适当用途dd

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

这是一个 1024 MB 的图像 (1000000 * 1024)。count如果您想要其他尺寸,请调整。创建例如ext文件系统在文件中:

mke2fs whatever.img

它会警告您这不是真正的块设备。继续。现在挂载镜像文件:

mount whatever.img /mnt/img

/mnt/img必须存在,但可以是任何东西。您现在可以rsync(或cp -a)进入/mnt/img.whatever.img当您卸载它时,内容将保留在里面。

然而...

需要明确的是,只有当您出于某种原因绝对需要图像文件时,才使用刚刚描述的文件系统图像方法。如果您的目标是将分区复制到另一个硬盘驱动器,你不需要图像:在该驱动器上创建一个带有空文件系统的新分区,安装它,然后复制到那里。您可以将文件系统内容放入一个空目录中并将其存档:

tar -czf myarchive.tar.gz [the directory path]

然后,您可以将其部署在现有(空或其他)分区中,方法是将其放置在顶层并使用:

tar -xzf myarchive.tar.gz

请注意,如果现有文件的路径与存档中的某些内容匹配,则会覆盖现有文件。否则,现有的目录层次结构将保持不变。

答案3

rsync 是备份文件系统的首选工具,它可以对当前运行的操作系统进行可引导备份。

一些注意事项:

  • 您必须添加适当的字母汤选项
  • 路径相当关键
  • 需要一个排除列表,并且对于每个操作系统和可能的每个配置都会有所不同

rsync 相对于 tar 等其他方法的一些优点:

  • 您可以随时停止和开始备份
  • 处理被取代文件的许多选项,例如按需删除、之前删除、移动......
  • 恢复(或重复)备份是很多比其他方法更快,因为会跳过先前复制的文件。 (20 倍速度提升很常见)
  • --link-dest 选项可以创建版本化备份,同时仅实际复制新文件

映像备份有其用武之地,但它们会按原样复制驱动器,包括您可能遇到的任何问题。文件备份会创建一个全新的目录,并会在此过程中对驱动器进行线性化(碎片整理)。如果您想为当前操作系统制作 10 个相同的副本,我将使用 rsync 作为副本主副本,然后使用 dd (或类似的)来完成其余副本。

答案4

使用克隆属, 严重地。它是最好的开源、基于 Linux 的类似 Norton Ghost 的实用程序。它将执行分区克隆和完整磁盘克隆,磁盘到磁盘或磁盘到文件系统(另存为文件)。它支持大多数 Linux 文件系统、NTFS、FAT32 等。它可以保存到内部磁盘、外部驱动器,甚至通过网络的 SMB 或 NFS 共享。

它非常易于使用,将为您节省大量时间。

编辑:要回答这个问题,不,大多数文件系统在安装时都不能,dd因为从块设备读取不是原子的,因此您可能会面临文件系统副本不一致的风险。例如,如果您要复制 100 个块,则系统可能在您进行到一半时就更新了第一个块和最后一个块,这意味着您的副本将包括修改的最后一个块,但不包括第一个块。

相关内容