磁盘克隆

出自 ArchWiki

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

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

块级克隆

使用 dd

参见 dd#磁盘克隆与恢复核心工具#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)。在指定此项时要非常小心,因为该命令将覆盖此设备。或者,您可以创建映像,只需键入路径/到/文件/image.img
rescue.map
这是 ddrescue 用于跟踪恢复进度的日志文件。日志文件至关重要,因为它记录了哪些扇区已成功恢复以及哪些扇区需要进一步关注。如果恢复过程被中断,您可以稍后使用此日志文件恢复它,而无需从头开始。

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

  • 由于您要直接写入设备 (/dev/sdY),因此需要 --force 选项。
  • rescue.map 文件跟踪进度,允许您在恢复停止时恢复。

第二轮

对于第二轮,仅复制坏块,并尝试从源读取 3 次,然后再放弃。

# ddrescue --force --idirect --retry-passes=3 --no-scrape /dev/sdX /dev/sdY rescue.map
--idirect
直接磁盘访问,可以绕过一些问题。如果 mapfile 位置和大小是扇区大小的倍数,则内核可能会缓存磁盘访问。要绕过此问题并恢复更多数据,请考虑使用直接磁盘访问或从原始设备读取,确保使用 --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

文件系统克隆

使用 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

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

注意: 默认情况下,xfs_copy 将为新的文件系统生成新的 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:磁盘克隆软件比较

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

  • 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、块大小)
    • 每个存档支持多个文件系统
    • 支持所有主要的 Linux 文件系统(extfs、xfs、btrfs、reiserfs 等)和 FAT(为了备份/恢复 EFI 系统分区)
    • 实验性支持 克隆 ntfs 文件系统
    • 对写入存档的所有内容(标头、数据块、整个文件)进行校验和
    • 能够恢复损坏的存档(它只会跳过当前文件)
    • 多线程 lzo, lz4, gzip, bzip2, xz/lzma 和 zstd 压缩
    • 支持将大型存档拆分为具有固定最大大小的多个文件
    • 使用密码加密存档。基于 libgcrypt 的 blowfish
    • 支持恢复到更大或更小的分区(只要有足够的空间存储数据)
    • 支持排除模式来过滤存档/恢复的内容
    • 适用于目录(创建压缩和校验和的 tarball 文件)
    • 包含在 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
    • 支持管道,stdin 和 stdout 到脚本特殊功能(压缩、加密...)
    • 救援模式尝试跳过坏块并仅备份好块,可选择从源设备创建 GNU Ddrescue 域日志文件
    • 提供 ncurses 界面
    • 所有备份的块都使用 crc32 进行校验和
    • 包含在 Arch Linux 安装介质中
https://partclone.org/ || partclone
  • Partimage — 一个用于 Linux/UNIX 环境的 ncurses 磁盘克隆实用程序。
    • 有一个 Live CD。
    • 支持 Linux、Windows 和 Mac OS 上最流行的文件系统。
    • 压缩。
    • 使用 Samba/NFS 保存到多个 CD 或 DVD 或跨网络。
    • 开发已停止,转而支持 FSArchiver。
https://www.partimage.org || partimage
  • Redo Backup and Recovery — 一个备份和灾难恢复应用程序,可从可启动的 Linux CD 映像运行。
    • 能够对磁盘分区进行裸机备份和恢复。
    • 使用 xPUDPartclone 作为后端。
http://redorescue.com/ || 未打包? 在 AUR 中搜索

参见