文件恢复
本文列出了 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 是 Arch 基本安装中包含的 ext2/ext3 文件系统检查器。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
标志为每个分区创建附加设备。
另请参阅 QEMU#使用循环模块自动检测分区。
挂载分区
为了能够挂载整个磁盘镜像的分区,请按照上面的步骤操作。
一旦整个磁盘镜像被挂载,就可以在循环设备上使用普通的 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 上