跳转至内容

文件恢复

来自 ArchWiki

本文档列出了 Linux 系统中的数据恢复和文件删除恢复选项。

特别说明

开始之前

本文章或章节需要扩充。

原因: 以下建议不适用于故障硬盘,主要适用于健康硬盘上的意外文件删除。(请在 Talk:File recovery 中讨论)

此页面主要用于教育目的。如果您意外删除了或以其他方式损坏了您宝贵且不可替代的数据,并且没有数据恢复经验,请立即关闭计算机(只需按住电源按钮或拔掉电源插头;请勿使用系统关机功能),并寻求专业帮助。

警告 如果您在未完全理解的情况下遵循以下任何步骤,您很可能会使情况变得更糟。

故障硬盘

在数据恢复领域,最好是处理磁盘映像而不是物理磁盘本身。通常,故障硬盘的状况会随着时间推移而恶化。目标应该是首先尽快从磁盘故障中尽可能多地挽救数据,然后放弃该磁盘。与 dd 不同,ddrescuedd_rescue 工具会反复尝试从错误中恢复,并会从驱动器的前到后,再从后到前读取,试图挽救数据。它们会维护日志文件,以便恢复可以暂停和恢复,而不会丢失进度。

请参阅 Disk cloning

使用 ddrescue 等工具创建的映像文件可以像物理设备一样挂载,并可以安全地进行处理。始终制作原始映像的副本,这样如果出现问题,您就可以恢复!

本文或本章节的准确性存在争议。

原因: 尽管这是数据恢复公司博客上的内容,但似乎有反对使用“冷冻技巧”来处理近 10 年来硬盘的说法。此段落自 2009 年以来基本未被修改,可能不适用于现代硬盘。(请在 Talk:File recovery 中讨论)

提高故障硬盘读取性能的一个久经考验的方法是保持硬盘低温。在冰箱里放一段时间是合适的,但要小心避免硬盘从冷到热过快,因为会产生冷凝水。将硬盘放在冰箱里,并连接到恢复 PC 的电缆,效果很好。

请勿尝试对故障硬盘进行文件系统检查,这很可能会使问题恶化。将其挂载为只读。

备份闪存介质/小型分区

作为处理“实时”分区(无论是否挂载)的替代方法,使用映像通常是首选,前提是目标文件系统不是太大,并且您有足够的可用硬盘空间来容纳映像文件。例如,闪存设备如 U 盘、数码相机、便携式音乐播放器、手机等,在很多情况下都足够小,可以制作映像。

请务必阅读以下工具的手册页,以验证它们是否能够处理映像文件。

要创建映像,可以使用 dd,如下所示

# dd if=/dev/target_partition of=/home/user/partition.image

使用数码相机

为了让下一节中列出的一些工具能够处理闪存介质,需要将目标设备挂载为块设备(即,显示在 /dev 下)。以 PTP(Picture Transfer Protocol)模式运行的数码相机无法在此方面正常工作。PTP 相机会被 libgphoto 和/或 libptp 透明处理。在这种情况下,“透明处理”意味着 PTP 设备不会获得块设备。PTP 模式的替代方案是 USB 大容量存储(UMS)模式,并非所有相机都支持。有些相机有一个菜单项允许在两种模式之间切换;请参阅您的相机用户手册。如果您的相机不支持 UMS 模式,因此无法作为块设备访问,您的唯一选择是使用闪存读卡器,并从相机中物理取出存储介质。

实用工具列表

另请参阅 Wikipedia:List of data recovery software#File Recovery

  • ddrutility — GNU ddrescue 的补充。查找与坏扇区相关的文件,并提供一些 NTFS 的特殊工具。已不再积极支持。
https://sourceforge.net/projects/ddrutility/ || ddrutilityAUR
  • dvdisaster — 为 CD/DVD 介质提供额外的错误保护。
https://sourceforge.net/projects/dvdisaster/ || dvdisasterAUR
  • Foremost — 一款基于文件头、文件尾和内部数据结构恢复文件的命令行程序。这个过程通常被称为数据分块(data carving)。文件头和文件尾可以通过配置文件指定,或者使用命令行开关来指定内置的文件类型。
https://foremost.sourceforge.net/ || foremost
  • PhotoRec — 文件数据恢复软件,旨在恢复包括照片(提示:PhotographRecovery)、视频、文档、存档等文件,从硬盘、CD-ROM,以及从数码相机内存中恢复丢失的照片。
https://www.cgsecurity.org/ || testdisk
  • R-Linux — 一款适用于 Ext2/Ext3/Ext4 文件系统的免费文件恢复实用工具。
https://www.r-studio.com/free-linux-recovery/ || r-linuxAUR
  • Scalpel — 文件分块和索引应用程序,最初基于 Foremost,但效率显著提高。它允许检查员指定一组文件头和文件尾来从介质中恢复文件类型。
https://github.com/sleuthkit/scalpel || scalpel-gitAUR
  • TestDisk — 数据恢复软件,主要用于帮助恢复丢失的分区和/或修复无法启动的磁盘,当这些症状是由软件故障、某些类型的病毒或人为错误(例如意外删除分区表)引起时。
https://www.cgsecurity.org/ || testdisk
  • xfs_undelete — 遍历每个分配组的 inode B+ 树,并尝试恢复 XFS 文件系统上标记为已删除的所有文件。
https://github.com/ianka/xfs_undelete || xfs_undelete-gitAUR

TestDisk 和 PhotoRec

TestDisk 和 Photorec 都是开源数据恢复实用工具,根据 GNU 公共许可证 (GPL) 条款授权。

TestDisk 主要用于帮助恢复丢失的分区和/或修复无法启动的磁盘,当这些症状是由软件故障、某些类型的病毒或人为错误(例如意外删除分区表)引起时。TestDisk 可以检测多种文件系统,包括 NTFS、FAT12、FAT16、FAT32、exFAT、ext2、ext3、ext4、btrfs、BeFS、CramFS、HFS、JFS、Linux Raid、Linux Swap、LVM、LVM2、NSS、ReiserFS、UFS、XFS。它还可以从 FAT、NTFS、exFAT 和 ext2 文件系统中恢复已删除的文件。

TestDisk 可以修复分区表、恢复已删除的分区、从备份中恢复 FAT32 引导扇区、重建 FAT12/FAT16/FAT32 引导扇区、修复 FAT 表、重建 NTFS 引导扇区等。

PhotoRec 是一款文件恢复软件,旨在从硬盘和 CD-ROM 中恢复丢失的文件,包括照片(提示:PhotographRecovery)、视频、文档、存档。PhotoRec 会忽略文件系统,直接搜索底层数据,因此即使文件系统和/或分区表被重新格式化或严重损坏,它仍然可以工作。

安装

安装 testdisk 包,该包同时提供 TestDisk 和 PhotoRec。

用法

运行 e.g. ddrescue 来创建 image.img 后,photorec image.img 将打开一个终端 UI,您可以在其中选择要搜索的文件类型以及恢复文件的位置。他们的 wiki分步指南)上有非常好的文档。

PhotoRec 恢复的文件

photorec 工具会将恢复的文件以随机名称(对于大多数文件)保存在编号的目录中,例如 ./recup_dir.1/f872690288.jpg./recup_dir.1/f864563104_wmclockmon-0.1.0.tar.gz

参见

e2fsck

e2fsck 是 Arch 基础安装中包含的 ext2/ext3 文件系统检查器。e2fsck 依赖于有效的超级块。超级块是对整个文件系统参数的描述。由于此数据非常重要,因此在分区中分布了几个超级块的副本。使用 -b 选项,e2fsck 可以接受一个备用超级块参数;如果主超级块(第一个)损坏,这将很有用。

要确定超级块的位置,请在目标未挂载的分区上运行 dumpe2fs -h。超级块的间隔不同,具体取决于文件系统的块大小,该块大小在文件系统创建时设置。

确定超级块位置的替代方法是使用 mke2fs 的 -n 选项。请务必使用 -n 标志,根据 mke2fs(8) 的说法,“该选项会导致 mke2fs 不实际创建文件系统,而是显示它在创建文件系统时将执行的操作。只要使用创建文件系统时传递的参数再次使用,就可以确定特定文件系统的备份超级块的位置。(当然,添加了 -n 选项!)”。

安装

e2fsckdumpe2fs 都包含在 Arch 基础安装中,作为 e2fsprogs 的一部分。

另请参阅 e2fsck(8)dumpe2fs(8)

处理原始磁盘映像

本文或本节可能是合并到 QEMU 的候选。

注意:请使用模板的第二个参数提供更详细的说明。(请在 Talk:File recovery 中讨论)

如果您使用 ddrescue 或 dd 备份了驱动器,并且需要将其映像挂载为物理驱动器,请参阅本节。

挂载整个磁盘

要将完整的磁盘映像挂载到下一个可用的 loop 设备,请使用 losetup 命令

# losetup -f -P /path/to/image
提示
  • -f 标志会将映像挂载到下一个可用的 loop 设备。
  • -P 标志会为每个分区创建额外的设备。

另请参阅 QEMU#With loop module autodetecting partitions

挂载分区

为了能够挂载整个磁盘映像中的某个分区,请按照上面的步骤进行。

一旦完整的磁盘映像被挂载为 loop 设备,就可以在 loop 设备上使用普通的 mount 命令

# mount /dev/loop0p1 /mnt/example

此命令将 loop0 中的映像的第一个分区挂载到挂载点 /mnt/example 的文件夹中。请记住,挂载点目录必须存在!

获取磁盘几何信息

一旦整个磁盘映像被挂载为 loopback 设备,就可以检查其驱动器布局。

使用 QEMU 修复 NTFS

对于包含一个或多个需要由 Windows chkdsk 的 NTFS 分区的磁盘映像(因为 Linux 上没有好的 NTFS 文件系统检查器),QEMU 可以将原始磁盘映像用作虚拟机内的真实硬盘

# qemu -hda /path/to/primary.img -hdb /path/to/DamagedDisk.img

然后,假设 Windows 已安装在 primary.img 上,可以使用它来检查 /path/to/DamagedDisk.img 上的分区。

警告 不要使用较低版本的 Windows 来检查由较高版本 Windows 创建的 NTFS 分区,例如,Windows XP 可能会通过“修复”其不支持的元数据配置来损坏由 Windows 8 创建的 NTFS 分区,从而导致这些不受支持条目的损坏/删除。

文本文件恢复

可以通过直接搜索块设备来查找硬盘上已删除的纯文本文件。需要一个您要恢复的文件中一个最好是唯一的字符串。

使用 grep 直接在分区上搜索固定字符串(-F

$ grep -a -C 200 -F 'Unique string in text file' /dev/sdXN > OutputFile

希望已删除文件的内容现在在 OutputFile 中,可以手动从周围上下文中提取。

注意 -C 200 选项告诉 grep 打印每个匹配项前后各 200 行的上下文。备选方案是 -A-B 标志,它们分别只打印匹配项之后的上下文和匹配项之前的上下文。如果查找的文件非常长,您可能需要调整行数。

参见