在 CentOS 上误删数据后,第一步不是重装系统,也不是急着安装各种恢复软件,而是立即停止对目标磁盘的一切写入操作。Linux 删除文件只是把 inode 标记为空闲,真正的数据块仍然留在磁盘上,只要没有被新数据覆盖,就有很大机会恢复。TestDisk 是 CGSecurity 推出的开源磁盘恢复套件,它既能修复被删除的分区、重建引导记录,也能配合 PhotoRec 找回误删文件。本文以 CentOS 为例,演示从只读挂载、安装工具到恢复分区和文件的全过程。

一、停止写入并安装 TestDisk
如果误删的是独立数据盘,立即卸载该分区。比如数据盘挂载在 /data,可以执行 sudo umount /data。如果误删的是根分区下的文件,则不能再直接卸载根目录,应该通过 Live CD、救援模式或其他系统启动,然后把原磁盘挂载为只读。只读挂载的命令通常为 sudo mount -o ro /dev/sda1 /mnt/old,这样可以避免在扫描过程中产生写操作。
CentOS 官方仓库默认没有 TestDisk,需要先启用 EPEL。CentOS 7 使用 yum,CentOS Stream 8/9 使用 dnf,安装方式基本一致。安装完成后可以用 testdisk --version 验证。注意安装操作本身也会写磁盘,所以如果目标磁盘是系统盘,最好在 Live 环境中安装并运行 TestDisk,避免覆盖待恢复数据。
# 启用 EPEL 仓库并安装 TestDisk sudo yum install epel-release -y sudo yum install testdisk -y # 验证安装 testdisk --version photorec --version
二、用 TestDisk 恢复被删除的分区
如果误删的不是单个文件,而是整个分区,或者分区表在磁盘操作中丢失,系统可能无法挂载原来的数据盘。这时 TestDisk 的分区表恢复功能就派上用场。启动命令为 sudo testdisk /dev/sda,其中 /dev/sda 是待恢复磁盘。TestDisk 会先询问是否创建日志文件,建议选择 Create,这样后续可以查看扫描记录。
进入主界面后选择磁盘、分区表类型。大多数 x86_64 服务器使用 Intel/PC 或 EFI GPT。接着选择 Analyse 分析当前分区结构,TestDisk 会显示已有的分区。执行 Quick Search 后,如果找到被删除的分区,会以 D 标记出来。此时可以继续选择 Deeper Search 深度扫描,以便找到更久以前的分区布局。确认分区参数无误后,再选择 Write 将分区表写回。写操作前强烈建议先备份当前 MBR,可以使用 dd 命令保存前 512 字节,这样即使写错也能回滚。
# 启动 TestDisk 分析分区表 sudo testdisk /dev/sda # 写回分区表后重新读取 sudo partprobe /dev/sda # 备份当前 MBR 分区表 sudo dd if=/dev/sda of=/root/mbr-backup.img bs=512 count=1
需要特别注意的是,TestDisk 在分区表恢复阶段不会直接恢复文件内容。如果分区表本来就正常,只是误删了某个目录或文件,那么问题出在文件系统层面,需要借助 PhotoRec 或者专门针对 ext4 的工具继续处理。
三、配合 PhotoRec 恢复误删文件
PhotoRec 是 TestDisk 的同源工具,它不依赖目录结构,而是按照文件头特征扫描磁盘扇区,因此能够找回 rm 删除的文件。运行方式为 sudo photorec /d /mnt/recovery /dev/sda1,其中 /d 参数指定输出目录,/dev/sda1 是待扫描分区。PhotoRec 会要求选择文件系统类型,通常可以选 ext2/ext3/ext4 或 Other。接着在 File Opt 菜单里选择要恢复的文件格式,建议先取消全选,只勾选 doc、jpg、png、zip 等需要找回的类型,这样能减少恢复大量无用文件的时间和磁盘占用。
输出目录一定不能和待扫描分区位于同一磁盘上。例如扫描 /dev/sda1 时,输出到 /dev/sdb1 上的目录;如果输出到同一个磁盘,恢复过程本身会写入大量文件,直接覆盖原始数据。可以先挂载一个独立备份盘到 /mnt/recovery,再执行扫描。恢复完成后,PhotoRec 会生成多个 recup_dir 目录,文件按编号命名,例如 f0123456.jpg。由于文件名无法还原,后续需要根据文件大小、修改时间和内容进行人工筛选。
# 挂载独立备份盘作为恢复输出目录 sudo mkdir /mnt/recovery sudo mount /dev/sdb1 /mnt/recovery # 运行 PhotoRec 扫描并恢复 sudo photorec /d /mnt/recovery /dev/sda1 # 查看恢复出的文件类型 file /mnt/recovery/recup_dir.1/*
四、恢复后的验证与长期预防
恢复出来的文件并不总是完整可用。对于图片、压缩包、文档等,可以通过 file 命令查看类型,用 md5sum 计算哈希并与原始备份对比。如果文件可以正常打开,说明数据块基本完整;如果文件大小异常或者打开报错,可能只恢复了一部分。此时不要对原盘再做任何操作,可以尝试用不同参数重新扫描,或者借助 extundelete 等工具补充恢复。
比起事后恢复,日常预防更重要。服务器上可以使用 cron 配合 rsync 做每日增量备份,例如将 /data 同步到 /backup/data。对于误删高频环境,可以安装 trash-cli,把 rm 替换为 trash 命令,删除的文件会进入回收站而不是直接消失。如果底层支持 LVM 或 Btrfs/ZFS,还可以创建快照,为重要目录保留可回滚的时间点。最后,故障发生后一定要保持冷静,先卸载或只读挂载,再制定恢复方案,这样才有最大概率把 CentOS 上的误删数据完整找回来。
CentOS数据恢复TestDisk误删文件恢复修改时间:2026-10-03 14:31:55