TestDisk 数据恢复工具教程
TestDisk 是一款功能强大的开源数据恢复工具,专门用于恢复丢失的分区和修复无法引导的磁盘。它的配套工具 PhotoRec 则专注于恢复已删除的文件。无论是在搬瓦工 VPS 上误删了重要分区,还是在本地服务器上遇到磁盘故障,TestDisk 都是首选的紧急恢复方案。本文将从安装、分区恢复到文件恢复,全面讲解这套工具的使用方法。
一、安装 TestDisk
1.1 在 Ubuntu/Debian 上安装
apt update
apt install testdisk -y
1.2 在 CentOS/RHEL 上安装
# 需要启用 EPEL 仓库
yum install epel-release -y
yum install testdisk -y
1.3 从源码编译安装
# 安装依赖
apt install build-essential libncurses-dev libext2fs-dev libjpeg-dev zlib1g-dev -y
# 下载并编译
wget https://www.cgsecurity.org/testdisk-7.2.tar.bz2
tar -xjf testdisk-7.2.tar.bz2
cd testdisk-7.2
./configure
make
make install
二、TestDisk 恢复丢失的分区
2.1 启动 TestDisk
# 以 root 权限运行 TestDisk
testdisk
启动后 TestDisk 会询问是否创建日志文件,选择「Create」创建新的日志文件。然后选择要恢复的磁盘设备(如 /dev/sda),接着选择分区表类型(通常选择「Intel」表示 MBR,或「EFI GPT」表示 GPT)。
2.2 分析和搜索分区
在主菜单中选择「Analyse」开始分析分区结构。TestDisk 会显示当前的分区表状态。如果分区已丢失,选择「Quick Search」进行快速搜索:
- Quick Search:快速扫描,可以找到大多数丢失的分区。
- Deeper Search:深度扫描,耗时更长但可以找到更多分区,适合快速搜索未找到目标分区的情况。
2.3 恢复分区
搜索完成后,TestDisk 会列出找到的分区。你可以使用方向键标记每个分区的状态:
- P(Primary):主分区
- L(Logical):逻辑分区
- E(Extended):扩展分区
- D(Deleted):标记为删除(不恢复)
确认分区设置正确后,选择「Write」将分区表写入磁盘。重启系统后丢失的分区应该恢复可见。
2.4 使用命令行模式
# 直接指定磁盘设备
testdisk /dev/sda
# 指定日志文件路径
testdisk /log /var/log/testdisk.log /dev/sda
# 只读模式(不会修改磁盘)
testdisk /debug /dev/sda
三、修复启动扇区
TestDisk 可以修复损坏的引导扇区(Boot Sector),这在系统无法启动时特别有用。
3.1 检查和修复 NTFS 引导扇区
在 TestDisk 的「Advanced」菜单中,选择目标分区后选择「Boot」选项:
- TestDisk 会对比引导扇区和备份引导扇区的差异。
- 如果引导扇区损坏但备份完好,可以选择「Backup BS」从备份恢复。
- 选择「Rebuild BS」可以尝试重建引导扇区。
3.2 修复 ext4 超级块
# 查看备份超级块位置
dumpe2fs /dev/sda1 | grep -i superblock
# 使用备份超级块修复文件系统
e2fsck -b 32768 /dev/sda1
四、使用 PhotoRec 恢复文件
PhotoRec 是 TestDisk 套件中的文件恢复工具,它通过识别文件头(file signature)来恢复已删除的文件,支持超过 480 种文件格式。
4.1 启动 PhotoRec
# 运行 PhotoRec
photorec
# 或者直接指定设备
photorec /dev/sda1
4.2 恢复已删除的文件
启动后按以下步骤操作:
- 选择目标磁盘和分区。
- 选择文件系统类型(ext2/3/4 选「ext2/ext3」,其他选「Other」)。
- 选择搜索范围(「Free」只搜索空闲空间,「Whole」搜索整个分区)。
- 选择恢复文件的保存目录(必须是另一个分区,不能保存到源分区)。
4.3 过滤文件类型
在 PhotoRec 中可以选择「File Opt」来指定要恢复的文件类型,避免恢复大量不需要的文件:
# 也可以使用命令行指定文件类型
photorec /d /recovery /dev/sda1 fileopt,jpg,enable,everything,disable
五、实际案例:恢复 VPS 上误删的数据
5.1 场景描述
假设你在搬瓦工 VPS 上不小心执行了 rm -rf 删除了网站目录。由于 VPS 使用虚拟磁盘,恢复方法与物理机略有不同。
5.2 紧急处理步骤
# 第一步:立即停止对磁盘的写入操作
# 停止 Web 服务器以减少磁盘写入
systemctl stop nginx
systemctl stop mysql
# 第二步:安装 TestDisk(如果尚未安装)
apt install testdisk -y
# 第三步:创建恢复目录(使用 /tmp 或其他分区)
mkdir /tmp/recovery
# 第四步:使用 PhotoRec 恢复文件
photorec /d /tmp/recovery /dev/vda1
5.3 恢复后整理文件
PhotoRec 恢复的文件会按编号命名并放入 recup_dir.1、recup_dir.2 等子目录中。可以使用脚本按文件类型整理:
#!/bin/bash
# 整理 PhotoRec 恢复的文件
RECOVERY_DIR="/tmp/recovery"
SORTED_DIR="/tmp/sorted"
mkdir -p ${SORTED_DIR}/{images,documents,databases,configs,others}
find ${RECOVERY_DIR} -name "*.jpg" -o -name "*.png" -o -name "*.gif" | xargs -I {} mv {} ${SORTED_DIR}/images/
find ${RECOVERY_DIR} -name "*.pdf" -o -name "*.doc" -o -name "*.txt" | xargs -I {} mv {} ${SORTED_DIR}/documents/
find ${RECOVERY_DIR} -name "*.sql" -o -name "*.db" | xargs -I {} mv {} ${SORTED_DIR}/databases/
find ${RECOVERY_DIR} -name "*.conf" -o -name "*.cfg" -o -name "*.ini" | xargs -I {} mv {} ${SORTED_DIR}/configs/
六、使用 extundelete 恢复 ext4 文件
对于 ext3/ext4 文件系统,extundelete 可以直接按文件名恢复,比 PhotoRec 更方便:
# 安装 extundelete
apt install extundelete -y
# 恢复指定文件
extundelete /dev/sda1 --restore-file /var/www/html/index.php
# 恢复指定目录
extundelete /dev/sda1 --restore-directory /var/www/html/
# 恢复所有可恢复的文件
extundelete /dev/sda1 --restore-all
七、预防措施
- 定期备份重要数据,可以参考 Clonezilla 磁盘克隆备份教程。
- 设置
rm的别名,使用回收站代替直接删除:
# 在 .bashrc 中添加安全删除别名
alias rm='trash-put'
# 需要安装 trash-cli
apt install trash-cli -y
- 启用文件系统快照功能(如 Btrfs 或 LVM 快照)。
- 使用搬瓦工 KiwiVM 面板的 Snapshots 功能定期创建 VPS 快照。
总结
TestDisk 和 PhotoRec 是 Linux 系统管理员必须掌握的数据恢复工具。在紧急情况下,这些工具可以帮助你找回丢失的分区和删除的文件。当然,最好的数据保护策略永远是定期备份。如果你需要一台稳定的 VPS 用于数据备份,可以参考搬瓦工 全部方案,购买时使用优惠码 NODESEEK2026 可享受 6.77% 的优惠,通过 bwh81.net 进入官网购买。