磁盘克隆
磁盘克隆是指创建分区或整个硬盘的映像的过程。这对于将驱动器复制到其他计算机或用于备份和恢复目的非常有用。
- 移动到逻辑扇区大小较小的驱动器(例如从 4096 字节到 512 字节)需要重新创建分区表,因为分区边界是以扇区号指定的。
- 移动到逻辑扇区大小较大的驱动器(例如从 512 字节到 4096 字节)可能根本不可能,如果文件系统的块大小小于目标驱动器的逻辑扇区大小或不能被其整除。
块级别克隆
使用 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),同时通过跳过重试尝试来优先考虑速度。
- 由于您正在直接写入设备(
/dev/sdY),因此需要--force选项。 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
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。
另请参阅 同步和备份程序,了解其他可以拍摄完整系统快照的应用程序。
- 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 安装介质中。
- Deepin Clone — Deepin 的备份和恢复工具。支持克隆、备份和恢复磁盘或分区。
- FSArchiver — 一个安全灵活的文件系统备份/部署工具。
- 支持基本和扩展文件属性。
- 支持所有 Linux 文件系统的基本文件系统属性(标签、uuid、块大小)。
- 支持一个存档中的多个文件系统。
- 支持所有主要的 Linux 文件系统(extfs、xfs、btrfs、reiserfs 等)和 FAT(以便备份/恢复 EFI 系统分区)。
- 对克隆 ntfs 文件系统的实验性支持。
- 对写入存档的所有内容(标题、数据块、整个文件)进行校验和。
- 能够恢复损坏的存档(它只会跳过当前文件)。
- 多线程 lzo、lzo4、gzip、bzip2、xz/lzma 和 zstd 压缩。
- 支持将大型存档分割成具有固定最大大小的多个文件。
- 使用密码加密存档。基于 libgcrypt 的 blowfish。
- 支持恢复到更大或更小的分区(只要有足够的空间来存储数据)。
- 支持排除模式来过滤存档/恢复的内容。
- 适用于目录(创建一种压缩和校验和的 tarball)。
- 包含在 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 的发展而停止开发。