文件恢复 - Arch Linux 中文维基

跳转到内容

# 文件恢复

来自 Arch Linux 中文维基

相关文章

- /Post recovery tasks#Photorec

翻译状态：

- 本文（或部分内容）译自 File recovery，最近一次同步于 2025-04-22，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

这篇文章列举了一系列在 Linux 下恢复数据的方法。

## 特别提示

### 三思而后行

这篇文章的某些内容需要扩充。

原因：适用于在正常硬盘上不小心删掉文件的情况，不适用于已经出现故障的硬盘。 (在 Talk:文件恢复 中讨论)

本文主要用于教学目的。如果你意外地删除或损坏了有价值且不可替代的数据，并且毫无数据恢复的经验的话，请立刻关闭你的电脑（只要长按电源键或直接拔插头即可，不要使用系统的关机功能），然后寻求专业人员的帮助。

警告：如果在没有完全理解下文内容的情况下就进行任何操作，很有可能会导致情况恶化。

### 故障的磁盘

在数据恢复的领域里，操作一个磁盘的镜像会比直接操作物理磁盘会更好些。总体上来说，一个坏掉的硬盘的情况会随着时间恶化。我们的目标应当是首先尽快地抢救出尽可能多的数据，并且抛弃故障的磁盘。ddrescue包 和 dd_rescue包 工具与 `dd` 不同，它们会反复尝试从错误中恢复，并且从硬盘往返读取以抢救出数据。它们会保留日志文件，所以恢复过程中的暂停并不会损失进度。

参阅硬盘克隆。

由类如 ddrescue 这样的工具创建的镜像文件可以像物理设备一样被挂载，并且安全地对其进行操作。请务必做好原始镜像的备份以便在恢复工作黄掉的时候重新做人。

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

原因： 虽然这是数据恢复公司博文中提出的内容，但过去 10 年中已有人对降温技巧提出反对。该段落自 2009 年起就基本未作修改，可能不适用于现代硬盘。（在 Talk:文件恢复 中讨论）

改善故障硬盘读取的一个久经考验的方法是保持硬盘清凉。在冰箱里放一会儿是个好主意，但不要让硬盘升温太快，因为这样会产生冷凝水。如果能在进行恢复工作的时候把硬盘放在冰箱里，并用线材连接电脑就再好不过了.

不要尝试对故障硬盘进行文件系统检查，这很可能会使情况变得更糟糕。请务必把它挂载为只读。

### 备份闪存介质或者小分区

在出问题的文件系统不大或硬盘空间足够的情况下，优先选择在镜像上进行操作，而不是在活跃分区上进行（与是否挂载无关）。类似 U 盘，相机，便携播放器，手机等闪存介质的设备通常镜像都足够小。

请务必阅读下列工具的 man 手册，以确保这些工具能够处理映像文件。

可以使用如下命令通过 `dd` 创建镜像：

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

### 恢复数码相机

为使下一节提到的工具能正常在闪存设备上工作，需要将设备挂载为块设备（即出现在 /dev 下）。在图片传输协议（Picture Transfer，PTP）模式下工作的数码相机不会以该形式出现，而是由 libgphoto 和/或 libptp 透明处理。在这种情况下，“透明”意味着 PTP 设备不会被获取为块设备。不是所有相机都支持作为 PTP 模式替代的 USB 大容量存储设备（USB Mass Storage，UMS）模式。有些相机可以在菜单中切换这两种模式，具体信息请参考相机的用户手册。如果你的相机不支持 UMS 模式，就无法被作为块设备读取，唯一解决方法是将介质从相机中取出，然后使用读卡器连到电脑。

## 工具清单

See also Wikipedia:List of data recovery software#File Recovery

- ddrutility — Compliment to GNU ddrescue包. Find what files are related to the bad sectors and some special tools for NTFS. No longer actively supported.

  https://sourceforge.net/projects/ddrutility/ || ddrutilityAUR

- dvdisaster — Additional error protection for CD/DVD media.

  https://sourceforge.net/projects/dvdisaster/ || dvdisasterAUR

- Foremost — Console program to recover files based on their headers, footers, and internal data structures. This process is commonly referred to as data carving. The headers and footers can be specified by a configuration file or command line switches can be used to specify built-in file types.

  https://foremost.sourceforge.net/ || foremost包

- PhotoRec — File data recovery software designed to recover lost files including video, documents and archives from hard disks, CD-ROMs, and lost pictures (thus the Photo Recovery name) from digital camera memory.

  https://www.cgsecurity.org/ || testdisk包

- R-Linux — A free file recovery utility for the Ext2/Ext3/Ext4 file systems.

  https://www.r-studio.com/free-linux-recovery/ || r-linuxAUR

- Scalpel — File carving and indexing application originally based on Foremost, although significantly more efficient. It allows an examiner to specify a number of headers and footers to recover filetypes from a piece of media.

  https://github.com/sleuthkit/scalpel || scalpel-gitAUR

- TestDisk — Data recovery software primarily designed to help recover lost partitions and/or make non-booting disks bootable again when these symptoms are caused by faulty software: certain types of viruses or human error (such as accidentally deleting a Partition Table).

  https://www.cgsecurity.org/ || testdisk包

- xfs_undelete — Traverses the inode B+trees of each allocation group and tries to recover all files on an XFS filesystem marked as deleted.

  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。

### 用法

在执行类似 ddrescue包 的工具创建 image.img 后，使用 `photorec image.img` 会打开一个命令行交互界面，以供选择要搜寻的文件类型和被恢复文件的存放位置。更详细的内容请参考 wiki。

### 通过 photorec 恢复的文件

photorec 会将恢复的文件存放在编号目录下，多数文件都是随机名称，例如 `./recup_dir.1/f872690288.jpg`，`./recup_dir.1/f864563104_wmclockmon-0.1.0.tar.gz`。

### 参考

- 如何获取原始文件名：PhotoRec FAQ
- 如何添加自定义文件特征：CGSecurity Wiki
- Wiki（TestDisk）：https://www.cgsecurity.org/wiki/TestDisk
- Wiki（Photorec）：https://www.cgsecurity.org/wiki/PhotoRec
- 主页：https://www.cgsecurity.org/

## e2fsck

e2fsck 是一个 ext2/ext3 文件系统检查器，已包含在 Arch 的基本安装环境中。e2fsck 依赖于有效的超级块（superblock），其中描述了整个文件系统的参数。由于该数据非常重要，其内容被多次复制到了分区的多个分散位置中。使用 `-b` 选项可以向 e2fsck 传入替代 superblock 参数，适用于主（即首个）超级块出现损坏的情况。

对未挂载的目标执行 `dumpe2fs -h` 可找到超级块的位置。取决于创建文件系统时块大小的设置不同，超级块的间距也会变动。

另一种确定超级块位置的方法是向 mke2fs 传入 `-n` 选项。务必确保使用了 `-n` 选项，根据 mke2fs(8) 所说，它会让 mke2fs 不要实际创建文件系统，而是显示在创建文件系统时会进行的更改。只要传入和创建文件系统时一致的参数（另外要加上 -n），就可以用它来确定特定文件系统中备份超级块的位置。

### 安装

`e2fsck` 和 `dumpe2fs` 已作为 e2fsprogs包 的一部分包含着默认 Arch 安装中。

另请参考 e2fsck(8) 和 dumpe2fs(8)。

## 操作原始（raw）硬盘镜像

本文或本章节可能需要合并到QEMU。

附注： 请提供模板的second参数以more detailed indications。（在 Talk:文件恢复 中讨论）

该部分适用于已通过 ddrescue 或 dd 将硬盘进行备份，并需要将镜像挂载为物理硬盘的情况。

### 挂载整个硬盘

要将整个硬盘挂载到下个可用回环设备上，请使用 `losetup` 命令：

    # losetup -f -P /path/to/image

提示：

- `-f` 标志会将硬盘挂载到下一个可用回环设备上。
- `-P` 标志会为每个分区创建一个额外的设备。

另请参考 QEMU#loop模块自动检测分区.

### 挂载分区

为挂载整个硬盘镜像中的单个分区，请先参考以上步骤。

在挂载了整个硬盘镜像后，可以对回环设备使用正常的 `mount` 命令：

    # mount /dev/loop0p1 /mnt/example

该命令会将 loop0 中的镜像的首个分区挂载到 `/mnt/example` 下。记住，指定的挂载点文件夹必须已经存在！

#### 获取硬盘布局

在将硬盘镜像挂载为回环设备后，就可以检查其硬盘布局。

### 使用 QEMU 来修复 NTFS

由于 Linux 下没有好的 NTFS 检查工具，包含一个或多个 NTFS 分区的硬盘需要使用 Windows 进行 `chkdsk`。 QEMU 可以在虚拟机中将 raw 原始磁盘映像作为物理硬盘使用：

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

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

警告：不要在低版本的 Windows 上检查高版本 Windows 创建的 NTFS 分区，例如对于 Windows 8 创建的 NTFS 分区， Windows XP 会通过“修复”其不支持的元数据配置，导致这些配置项损坏或被移除。

## 文本文件恢复

在块设备上有可能通过直接搜索找出被删掉的纯文本文件。你需要一段来自待恢复的文件中的比较独一无二的字符串。

使用 `grep` 在分区上直接筛选固定字符串（`-F`）：

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

如果运气好的话，被删除文件的内容会出现在 OutputFile 中，可直接从文本的上下文中提取。

注意：`-C -200` 选项告诉 grep 打印每个匹配字符串的前后 200 行。也可以使用 `-A` 和 `-B` 参数，分别会输出匹配字符串之后和之前的内容。如果你在寻找的文本很长，则需要视情况调整。

## 参阅

- Data Recovery on the Ubuntu wiki

分类：​

- 文件系统
- 系统恢复

隐藏分类：​

- 使用“模板:准确性”标记的页面或章节
- 使用“模板:合并”标记的页面或章节

文件恢复
添加话题