文件恢复
本文列出了 Linux 下的数据恢复和反删除选项。
特别说明
开始之前
本页面主要用于教育目的。如果您不慎删除或损坏了重要且不可替代的数据,并且没有数据恢复的经验,请立即关闭计算机(只需按住电源按钮或拔下电源插头;不要使用系统关机功能)并寻求专业帮助。
故障驱动器
在数据恢复领域,最好在磁盘镜像上工作,而不是直接在物理磁盘上工作。通常,故障驱动器的状况会随着时间推移而恶化。目标应该是首先在磁盘故障的早期尽可能多地抢救数据,然后放弃该磁盘。ddrescue 和 dd_rescue 实用程序与 dd
不同,它们会反复尝试从错误中恢复,并会从前往后、再从后往前读取驱动器,尝试挽救数据。它们会保留日志文件,以便可以暂停和恢复恢复过程而不会丢失进度。
参见 磁盘克隆。
从 ddrescue 等实用程序创建的镜像文件可以像物理设备一样挂载,并且可以安全地在其上工作。始终制作原始镜像的副本,以便在情况变糟时可以恢复!
一种经过验证的提高故障驱动器读取性能的方法是保持驱动器低温。在冰箱中放置一段时间是合适的,但要注意避免驱动器从冷到热升温过快,因为会形成冷凝水。将驱动器放在冰箱中并连接到恢复 PC 的电缆效果很好。
不要尝试对故障驱动器进行文件系统检查,因为这可能会使问题更糟。以只读方式挂载它。
备份闪存介质/小型分区
作为处理“实时”分区(无论是否挂载)的替代方案,通常最好处理镜像,前提是所讨论的文件系统不太大,并且您有足够的可用 HDD 空间来容纳镜像文件。例如,闪存设备,如 U 盘、数码相机、便携式音乐播放器、手机等,在许多情况下可能都足够小,可以进行镜像。
请务必阅读下面列出的实用工具的手册页,以验证它们是否能够处理镜像文件。
要制作镜像,可以使用 dd
,如下所示
# dd if=/dev/target_partition of=/home/user/partition.image
处理数码相机
为了使下一节中列出的一些实用工具能够与闪存介质一起工作,相关设备需要作为块设备挂载(即,在 /dev 下列出)。以 PTP(图片传输协议)模式运行的数码相机将无法在此方面工作。PTP 相机由 libgphoto 和/或 libptp 透明地处理。在这种情况下,“透明地”意味着 PTP 设备不会获得块设备。UMS(USB 大容量存储)模式是 PTP 模式的替代方案,但并非所有相机都支持。某些相机具有允许在两种模式之间切换的菜单项;请参阅相机用户手册。如果您的相机不支持 UMS 模式,因此无法作为块设备访问,那么您唯一的选择是使用闪存介质读卡器并物理移除相机中的存储介质。
实用工具列表
- ddrutility — GNU ddrescue 的补充工具。查找与坏扇区相关的文件以及一些用于 NTFS 的特殊工具。不再积极维护。
- dvdisaster — CD/DVD 介质的附加错误保护。
- Foremost — 基于文件头、文件尾和内部数据结构恢复文件的控制台程序。此过程通常称为数据雕刻。文件头和文件尾可以通过配置文件指定,也可以使用命令行开关来指定内置文件类型。
- PhotoRec — 文件数据恢复软件,旨在恢复丢失的文件,包括视频、文档和存档,以及从硬盘驱动器、CD-ROM 和数码相机内存中丢失的图片(因此得名 Photo Recovery,即照片恢复)。
- Scalpel — 文件雕刻和索引应用程序,最初基于 Foremost,但效率更高。它允许检查人员指定许多文件头和文件尾,以从介质中恢复文件类型。
- TestDisk — 数据恢复软件,主要设计用于帮助恢复丢失的分区和/或使无法启动的磁盘重新可启动,当这些症状是由错误的软件、某些类型的病毒或人为错误(例如意外删除分区表)引起时。
- xfs_undelete — 遍历每个分配组的 inode B+ 树,并尝试恢复 XFS 文件系统上标记为已删除的所有文件。
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 是文件恢复软件,旨在恢复丢失的文件,包括照片(提示:PhotographRecovery,照片恢复)、视频、文档、存档,来自硬盘驱动器和 CD-ROM。PhotoRec 忽略文件系统并追溯底层数据,因此即使文件系统和/或分区表被重新格式化或严重损坏,它仍然可以工作。
安装
安装 testdisk 软件包,该软件包同时提供 TestDisk 和 PhotoRec。
用法
在运行例如 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
。
参见
- 如何获取原始文件名:PhotoRec 常见问题解答
- 如何添加您自己的自定义文件签名: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 依赖于有效的超级块。超级块是对整个文件系统参数的描述。由于此数据非常重要,因此超级块的多个副本分布在整个分区中。使用 -b
选项,e2fsck 可以接受备用超级块参数;如果主要的第一个超级块损坏,这将非常有用。
要确定超级块的位置,请在目标未挂载的分区上运行 dumpe2fs -h
。超级块的间隔取决于文件系统的块大小,该块大小在创建文件系统时设置。
确定超级块位置的另一种方法是将 -n 选项与 mke2fs 一起使用。务必使用 -n
标志,根据 mke2fs(8),“使 mke2fs 实际上不创建文件系统,而是显示如果它要创建文件系统会做什么。只要再次使用最初创建文件系统时传递的 mke2fs 参数,这就可以用于确定特定文件系统的备份超级块的位置。(当然,要添加 -n 选项!)”。
安装
e2fsck
和 dumpe2fs
都包含在 Arch 基本安装中,作为 e2fsprogs 的一部分。
另见 e2fsck(8) 和 dumpe2fs(8)。
处理原始磁盘镜像
如果您已使用 ddrescue 或 dd 备份了驱动器,并且需要将此镜像挂载为物理驱动器,请参阅本节。
挂载整个磁盘
要将完整的磁盘镜像挂载到下一个可用的循环设备,请使用 losetup
命令
# losetup -f -P /path/to/image
-f
标志将镜像挂载到下一个可用的循环设备。-P
标志为每个分区创建额外的设备。
挂载分区
为了能够挂载整个磁盘镜像的分区,请按照上述步骤操作。
一旦整个磁盘镜像被挂载,就可以在循环设备上使用普通的 mount
命令
# mount /dev/loop0p1 /mnt/example
此命令将 loop0 中镜像的第一个分区挂载到挂载点 /mnt/example
的文件夹。请记住,挂载点目录必须存在!
获取磁盘几何信息
一旦整个磁盘镜像作为环回设备挂载,就可以检查其驱动器布局。
使用 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
上的分区。
文本文件恢复
可以通过直接在块设备上搜索来查找硬盘驱动器上已删除的纯文本文件。需要来自您尝试恢复的文件的首选唯一字符串。
使用 grep
直接在分区上搜索固定字符串 (-F
)
$ grep -a -C 200 -F 'Unique string in text file' /dev/sdXN > OutputFile
希望删除文件的内容现在在 OutputFile 中,可以从周围的上下文中手动提取。
-C 200
选项告诉 grep 打印字符串的每个匹配项前后 200 行的上下文。替代方法是 -A
和 -B
标志,它们分别仅打印每个匹配项之后和之前的上下文。如果正在查找的文件很长,您可能需要调整行数。参见
- 数据恢复 在 Ubuntu Wiki 上