跳转至内容

磁盘克隆

来自 ArchWiki

磁盘克隆是指创建分区或整个硬盘映像的过程。这对于将磁盘复制到其他计算机或用于 备份恢复 目的可能很有用。

注意 不建议在 具有不同逻辑扇区大小的驱动器 之间进行磁盘克隆。
  • 移动到具有较小逻辑扇区大小的驱动器(例如从 4096 字节到 512 字节)将需要重新创建分区表,因为分区边界是以扇区号指定的。
  • 移动到具有较大逻辑扇区大小的驱动器(例如从 512 字节到 4096 字节)可能根本不可能,如果文件系统的块大小小于目标驱动器的逻辑扇区大小或不能被其整除。
提示 随着时间的推移,文件系统 会出现新功能,而 mkfs 工具会更改其默认设置,但并非所有新功能都可以不重新格式化而启用。因此,在将数据迁移到新驱动器时,可以考虑创建一个新的文件系统,然后仅使用例如 rsync 复制文件(及其属性、ACL、扩展属性等),而不是克隆块设备或文件系统。

块级克隆

使用 dd

请参阅 dd#磁盘克隆和恢复Core utilities#dd 替代工具

使用 ddrescue

如果可能,应使用磁盘的本地接口进行数据恢复:SATA,或旧驱动器使用 IDE。使用 USB 适配器时结果可能有所不同。

GNU ddrescue 是一个能够忽略读取错误的数据恢复工具。ddrescue 与 dd 没有任何关系,除了两者都可以用于将数据从一个设备复制到另一个设备。关键区别在于 ddrescue 使用复杂的算法从故障驱动器复制数据,对它们造成的额外损坏尽可能少。有关详细信息,请参阅 ddrescue 手册

第一轮

要克隆有故障或即将报废的驱动器,请运行两次 ddrescue。第一轮,复制所有没有读取错误的块,并将错误映射到 rescue.map

# ddrescue --force --no-scrape /dev/sdX /dev/sdY rescue.map
--force
在直接写入设备(如磁盘或分区)时使用此选项。没有此标志,ddrescue 将拒绝覆盖现有设备以避免意外数据丢失。使用 --force 允许您绕过此安全检查,因此在使用时请小心。
--no-scrape
此选项告诉 ddrescue 跳过“重试”阶段,而是先专注于复制易于读取的数据(第一遍)。它避免重试失败的扇区,这在您想尽快恢复尽可能多的数据而不会卡在坏区域时很有用。
/dev/sdX
这代表您要从中恢复数据的源设备。将 /dev/sdX 替换为实际设备名称(例如 /dev/sda)。其中 X 是源分区的分区字母,Y 是目标 块设备 的分区字母。
/dev/sdY
这是将要写入恢复数据的目标设备或文件。在这种情况下,它是另一个设备(例如 /dev/sdb)。指定此项时要非常小心,因为命令会覆盖此设备。或者,您可以创建一个映像,只需输入 path/to/file/image.img
rescue.map
这是 ddrescue 用于跟踪恢复进度的日志文件。日志文件至关重要,因为它记录了哪些扇区已成功恢复,哪些需要进一步关注。如果恢复过程被中断,您可以使用此日志文件稍后恢复,而无需从头开始。

此命令将数据从一个设备 (/dev/sdX) 复制到另一个设备 (/dev/sdY),同时通过跳过重试尝试来优先考虑速度。

  • 需要 --force 选项,因为您正在直接写入设备 (/dev/sdY)。
  • rescue.map 文件会跟踪进度,允许您在恢复停止后继续进行。

第二轮

第二轮,只复制坏块,并在放弃前尝试从源读取 3 次。

# ddrescue --force --idirect --retry-passes=3 --no-scrape /dev/sdX /dev/sdY rescue.map
--idirect
直接磁盘访问,可以绕过一些问题。如果映射文件的位置和大小是扇区大小的倍数,内核可能会缓存磁盘访问。要绕过此问题并恢复更多数据,请考虑使用直接磁盘访问或从原始设备读取,并确保使用 --sector-size 设置了正确的扇区大小。直接磁盘访问可以通过读取整个扇区并仅写入必要部分来复制任意域。首先尝试 --idirect 选项,或者在无法进行直接访问时使用原始设备。根据您的操作系统和硬件,直接访问可能比正常缓存读取慢或快。
--retry-passes=3
重试坏扇区最多 3 次。

此命令尝试更积极地读取有问题的扇区。

如果您遇到此类问题

ddrescue: /dev/sdX: Unaligned read error. Is sector size correct?

检查设备的扇区大小

# blockdev --getss /dev/sdX

这将以字节为单位显示扇区大小。例如,大多数 CD/DVD 驱动器的正确扇区大小为 **2048 字节**。并手动指定扇区大小

# ddrescue --sector-size=2048 --force --idirect --retry-passes=3 --no-scrape /dev/sdX /dev/sdY rescue.map

第三轮 (可选)

# ddrescue --force --idirect --retry-passes=3 --reverse /dev/sdX /dev/sdY rescue.map

--reverse 反向读取驱动器,有时可以绕过阻止正向读取的问题。

第四轮

第四轮,使用“*刮擦*模式”进行“*精细恢复*”

# ddrescue --force --idirect --retry-passes=3 /dev/sdX /dev/sdY rescue.map

--retry-passes=3 将多次刮擦有问题的扇区。它尝试从损坏最严重的扇区恢复数据。

何时停止:如果驱动器的读取速度持续接近 0 B/s 且没有进一步改善,则恢复更多数据的可能性会降低。在这种情况下,专业的 \}数据恢复服务可能是最佳选择。最终,如果过程持续停滞而没有恢复更多数据,驱动器可能正在物理故障,进一步的尝试可能只会产生微小的结果。

在某些情况下,磁盘控制器或 USB 适配器在尝试读取特定扇区时可能会锁定。可以使用 --input-position 选项指示 ddrescue 从该位置之后开始读取。

现在您可以检查文件系统的损坏情况并挂载新驱动器。

# fsck -f /dev/sdY

第五轮 (可选)

复制完成后,以只读模式运行最终传递以验证恢复映像的完整性

# ddrescue --force --verify /dev/sdX /dev/sdY rescue.map

或者挂载映像,如果它是 CD/DVD/BD

# mount -o loop cd_rescue.iso /mnt/test

或者,如果您有参考文件,则运行校验和。

文件系统克隆

使用 e2image

e2imagee2fsprogs 中包含的用于调试的工具。它可用于高效地复制 ext2、ext3 和 ext4 分区,只需复制已使用的块。请注意,这仅适用于 ext2、ext3 和 ext4 文件系统,并且未复制未使用的块,因此如果有人希望恢复已删除的文件,此工具可能无用。

要使用 e2image 将物理磁盘 /dev/sda 的分区 1 克隆到物理磁盘 /dev/sdb 的分区 1,请运行

# e2image -ra -p /dev/sda1 /dev/sdb1
提示 GParted 使用 e2image 来高效地复制 ext2/3/4 分区。

使用 xfs_copy

xfs_copy(8) 来自 xfsprogs 可用于将 XFS 文件系统并行复制到一个或多个块设备。

注意 默认情况下,xfs_copy 将为新文件系统生成新的 UUID。要克隆 UUID 而不是生成新的 UUID,请使用 -d 选项。这将创建一个适合磁盘更换的重复文件系统。
提示 要将 XFS 并行克隆到多个块设备,只需将它们全部附加到 xfs_copy 命令中即可。

例如,要将 /dev/sda1 上的文件系统克隆到 /dev/sdb1,请运行

# xfs_copy /dev/sda1 /dev/sdb1

通用克隆解决方案

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因: 此应用程序列表不遵循 Template:App#Style,可能更适合用表格表示。(请在 Talk:Disk cloning 中讨论)

这些应用程序允许轻松备份整个文件系统并在发生故障时进行恢复,通常以 Live CD 或 USB 驱动器的形式。它们包含来自一个或多个特定时间点的完整系统映像,并经常用于记录已知良好的配置。有关其比较,请参阅 Wikipedia:Comparison of disk cloning software

另请参阅 同步和备份程序,了解其他可以拍摄完整系统快照以及其他功能的应用程序。

  • Clonezilla — 一个分区和磁盘映像/克隆程序,有助于系统部署、裸机备份和恢复。
    • 完整的备份和恢复解决方案:能够映像和恢复整个驱动器,包括引导扇区、引导加载程序、分区表...适用于包括 Windows 在内的不同操作系统
    • 支持 BIOS 和 UEFI,MBR 和 GPT
    • 支持大多数文件系统(ext2-3-4、reiserfs、reiser4、xfs、jfs、btrfs、f2fs、FAT12-16-32、NTFS、HFS+、UFS 等)和 LVM2
    • 使用 Partclone(默认)、Partimage(可选)、ntfsclone(可选)时,对可用空间敏感,否则会回退到 dd 进行块级复制(dm-crypt/LUKS 容器、不支持的文件系统...)
    • 支持使用不同格式(包括 zstd)和级别的多线程压缩
    • 支持加密备份
    • 多播服务器,可一次性恢复到多台计算机
    • 提供专用 LiveCD,可从 CD、USB 驱动器或 PXE 服务器启动
    • 包含在 Arch Linux 安装介质中。
https://clonezilla.org/ || clonezilla
  • Deepin Clone — Deepin 的备份和恢复工具。它支持克隆、备份和恢复磁盘或分区。
https://www.deepin.org/en/original/deepin-clone/ || deepin-clone
  • FSArchiver — 一个安全灵活的文件系统备份/部署工具
    • 支持基本和扩展文件属性
    • 支持所有 Linux 文件系统的基本文件系统属性(标签、uuid、块大小)和 FAT(以便备份/恢复 EFI 系统分区)
    • 支持每个存档有多个文件系统
    • 支持所有主要的 Linux 文件系统(extfs、xfs、btrfs、reiserfs 等)和 FAT(以便备份/恢复 EFI 系统分区)
    • 实验性支持 克隆 NTFS 文件系统
    • 对写入存档的所有内容(头部、数据块、整个文件)进行校验和
    • 能够恢复损坏的存档(它将仅跳过当前文件)
    • 多线程 lzo、lzo4、gzip、bzip2、xz/lzma 和 zstd 压缩支持
    • 支持将大型存档拆分成具有固定最大大小的多个文件
    • 使用密码加密存档。基于 libgcrypt 的 blowfish
    • 支持恢复到更大或更小的分区(只要有足够的空间来存储数据)
    • 支持排除模式以过滤要存档/恢复的内容
    • 可与目录一起使用(创建压缩并带有校验和的 tar 包)
    • 包含在 Arch Linux 安装介质中
https://www.fsarchiver.org/ || fsarchiver
  • Mondo Rescue — 一个灾难恢复解决方案,用于创建可用于重新部署损坏系统的备份介质。
    • 基于映像的备份,支持 Linux/Windows。
    • 压缩率可调。
    • 可以备份实时系统(无需停止它)。
    • 可以将映像拆分到多个文件中。
    • 支持启动到 Live CD 以执行完整恢复。
    • 可以通过 NFS、CD、磁带驱动器和其他介质备份/恢复。
    • 可以验证备份。
http://www.mondorescue.org/ || mondoAUR
  • Partclone — 一个可以备份和恢复分区同时只考虑已使用块的工具。
    • 支持 ext2、ext3、ext4、hfs+、reiserfs、reiser4、btrfs、vmfs3、vmfs5、xfs、jfs、ufs、ntfs、fat(12/16/32)、exfat、f2fs、nilfs
    • 支持管道、标准输入和标准输出以实现特殊功能(压缩、加密...)的脚本
    • 恢复模式尝试跳过坏块并仅备份好块,可以选择从源设备创建 GNU Ddrescue 域日志文件
    • 提供 ncurses 界面
    • 所有备份的块都使用 crc32 进行校验和
    • 包含在 Arch Linux 安装介质中
https://partclone.org/ || partclone
  • Partimage — 一个用于 Linux/UNIX 环境的 ncurses 磁盘克隆实用程序。
    • 拥有 Live CD。
    • 支持 Linux、Windows 和 Mac OS 上最流行的文件系统。
    • 压缩。
    • 保存到多个 CD 或 DVD,或通过 Samba/NFS 跨网络保存。
    • 开发已停止,取而代之的是 FSArchiver。
https://www.partimage.org || partimage

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.