磁盘克隆
磁盘克隆是指为分区或整个硬盘创建镜像的过程。这在将驱动器复制到其他计算机,或用于备份和恢复目的时非常有用。
- 迁移到逻辑扇区较小(例如从 4096 字节到 512 字节)的驱动器将需要重新创建分区表,因为分区边界是以扇区号指定的。
- 如果文件系统的块大小小于目标驱动器的逻辑扇区大小,或者不能被其整除,则可能完全无法迁移到逻辑扇区较大的驱动器(例如从 512 字节到 4096 字节)。
块级克隆
使用 dd
请参阅 dd#Disk cloning and restore 和 Core utilities#dd alternatives。
使用 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),同时优先考虑速度(通过跳过重试尝试)。
--force选项是必需的,因为您正在直接写入设备 (/dev/sdY)。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 以反向方式读取驱动器,有时可以绕过阻止正向读取的问题。
第四轮
在第四轮中,使用 scraping 模式 进行 精细化恢复
# ddrescue --force --idirect --retry-passes=3 /dev/sdX /dev/sdY rescue.map
--retry-passes=3 将多次对问题扇区进行“刮除” (scrape)。它尝试从损坏最严重的扇区中挽救数据。
何时停止:如果驱动器的读取速度持续接近 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
如果您有参考文件,也可以运行校验和 (checksum)。
文件系统克隆
使用 e2image
e2image 是 e2fsprogs 中包含的一个用于调试目的的工具。它可以通过仅复制已使用的块来高效地复制 ext2、ext3 和 ext4 分区。请注意,这仅适用于 ext2、ext3 和 ext4 文件系统,且未使用的块不会被复制,因此如果希望恢复已删除的文件,这可能不是一个有用的工具。
要使用 e2image 将物理磁盘 /dev/sda 的分区 1 克隆到物理磁盘 /dev/sdb 的分区 1,请运行
# e2image -ra -p /dev/sda1 /dev/sdb1
使用 xfs_copy
xfs_copy(8) 源自 xfsprogs,可用于将 XFS 文件系统并行复制到一个或多个块设备中。
-d 选项。这将创建一个适合磁盘更换的重复文件系统。xfs_copy 命令后即可。例如,要将 /dev/sda1 上的文件系统克隆到 /dev/sdb1,请运行
# xfs_copy /dev/sda1 /dev/sdb1
多功能克隆方案
这些应用程序允许轻松备份整个文件系统并在发生故障时进行恢复,通常以 Live CD 或 USB 驱动器的形式存在。它们包含一个或多个特定时间点的完整系统镜像,常用于记录已知良好的配置。比较请参阅 Wikipedia:Comparison of disk cloning software。
另请参阅 Synchronization and backup programs,了解其他具有全系统快照等功能的应用程序。
- 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 安装介质中。
- FSArchiver — 一个安全且灵活的文件系统备份/部署工具
- 支持基本和扩展文件属性
- 支持所有 Linux 文件系统的基本文件系统属性 (标签, uuid, 块大小)
- 支持每个归档包含多个文件系统
- 支持所有主要的 Linux 文件系统 (extfs, xfs, btrfs, reiserfs 等) 和 FAT (用于备份/恢复 EFI 系统分区)
- 实验性支持克隆 ntfs 文件系统
- 对写入归档的所有内容(标头、数据块、整个文件)进行校验和验证
- 能够恢复损坏的归档(它将直接跳过当前文件)
- 多线程 lzo, lz4, gzip, bzip2, xz/lzma 和 zstd 压缩
- 支持将大归档拆分为几个具有固定最大大小的文件
- 使用密码对归档进行加密。基于 libgcrypt 的 blowfish
- 支持恢复到更大或更小的分区(只要有足够的空间存储数据)
- 支持使用排除模式来过滤归档/恢复的内容
- 可用于目录(创建某种压缩且带有校验和的 tar 包)
- 包含在 Arch Linux 安装介质中
- Mondo Rescue — 一个灾难恢复解决方案,用于创建可用于重新部署损坏系统的备份介质。
- 基于镜像的备份,支持 Linux/Windows。
- 压缩率可调。
- 可以备份运行中的系统(无需停机)。
- 可以将镜像拆分为多个文件。
- 支持启动到 Live CD 以执行完整还原。
- 可以通过 NFS、CD、磁带驱动器和其他介质进行备份/还原。
- 可以验证备份。
- Partclone — 一个可以用来备份和还原分区且仅考虑已使用块的工具。
- 支持 ext2, ext3, ext4, hfs+, reiserfs, reiser4, btrfs, vmfs3, vmfs5, xfs, jfs, ufs, ntfs, fat(12/16/32), exfat, f2fs, nilfs
- 支持管道 (pipe)、stdin 和 stdout 以通过脚本实现特殊功能(压缩、加密...)
- 救援模式尝试跳过坏块并仅备份好块,提供从源设备创建 GNU Ddrescue 域日志文件的选项
- 提供 ncurses 界面
- 所有备份的块都使用 crc32 进行校验和验证
- 包含在 Arch Linux 安装介质中
- Partimage — 一个用于 Linux/UNIX 环境的 ncurses 磁盘克隆实用程序。
- 拥有 Live CD。
- 支持 Linux, Windows 和 Mac OS 上最流行的文件系统。
- 支持压缩。
- 可保存到多张 CD 或 DVD,或通过 Samba/NFS 跨网络保存。
- 开发已停止,转而支持 FSArchiver。