一次误删,教你完整走完 Linux 数据恢复流程(实战指南)
很多运维都经历过这样一个瞬间:
你在服务器上敲下了一条命令:
rm -rf *
下一秒,心跳直接停半拍。
尤其是在生产环境里,一次误删可能意味着:
但先别慌。
只要操作正确,很多数据其实是可以救回来的。
今天这篇文章,带你完整走一遍 Linux 数据恢复的标准流程。
整套流程分为三阶段:
1️⃣ 黄金止损
2️⃣ 暴力恢复
3️⃣ 数据整理
第一阶段:黄金止损(最关键)
在做任何恢复之前,请先记住一句话:
严禁在原盘写入!严禁在原盘写入!严禁在原盘写入!
因为 Linux 删除文件,本质只是:
把文件标记为“可覆盖”。
数据其实还在磁盘上。
只要新的数据写进去,就可能:
直接覆盖你要恢复的数据。
1 立即卸载文件系统
如果误删发生在数据盘,比如:
/home
/data
/var
第一时间执行:
umount /home
这样可以立刻停止写入。
2 如果无法卸载,就改为只读
有时候分区正在使用,卸载不了。
这时可以改为 只读挂载:
mount -o remount,ro /home
这样系统仍能读取数据,但不会再写入。
3 制作“案发现场”镜像(核心步骤)
真正有经验的运维,绝不会直接在原盘做恢复。
原因很简单:
恢复工具如果出 Bug,可能会造成 二次破坏。
正确做法是:
先把整个分区做一个镜像。
例如:
dd if=/dev/sdb1 of=/backup/recovery_home.img bs=4M status=progress
参数解释:
执行后你会得到一个文件:
recovery_home.img
这个文件就是:
磁盘的完整副本。
从现在开始:
安全系数直接提升。
第二阶段:PhotoRec 暴力搜救
很多传统恢复工具依赖:
文件系统元数据
但如果:
它们就彻底失明了。
而 PhotoRec 的思路完全不同。
它的工作方式是:
扫描整个磁盘的数据流,通过文件头特征识别文件。
例如:
这就像一个“数据考古学家”。
即使文件系统完全损坏,也能挖出数据。
1 安装恢复工具
PhotoRec 属于 testdisk 工具包。
CentOS / Rocky Linux:
yum install testdisk
Ubuntu / Debian:
apt install testdisk
2 开始扫描镜像
执行命令:
photorec recovery_home.img
界面虽然是命令行,但操作其实很简单。
3 交互流程
PhotoRec 会一步一步引导你操作。
第一步:选择磁盘
程序会识别:
recovery_home.img
直接选中即可。
第二步:选择分区类型
如果是 dd 下来的镜像:
选择:
Whole disk
或
No partition
第三步:选择文件系统
Linux 文件系统一般选择:
Other
也就是:
Ext2 / Ext3 / Ext4 / XFS
第四步:选择输出目录
这一点 非常重要:
恢复文件必须保存到 另一个磁盘。
千万不要写回原盘。
选择好目录后:
按 C 键确认。
4 开始扫描
接下来就是等待。
屏幕会不断滚动:
Pass 1
Reading sector
Recovered files
你会看到:
这个过程就像:
在废墟里挖宝。
第三阶段:清洗战场(最痛苦)
扫描结束后,你会看到一堆目录:
recup_dir.1
recup_dir.2
recup_dir.3
打开后你可能会崩溃:
文件名全没了。
变成这样:
f1234567.txt
f1234568.png
f1234569.sql
别慌,这是正常现象。
因为 PhotoRec 不依赖文件系统。
它只知道:
文件内容是什么。
但不知道:
原文件名是什么。
如何找到你需要的文件?
这时候 Linux 命令行就派上用场了。
1 按关键字搜索
如果你在找配置文件:
grep -r "jdbc.url" recup_dir.*
如果你在找代码:
grep -r "select * from" recup_dir.*
2 按类型整理文件
例如整理图片:
mkdir images
find recup_dir.* -name "*.png" -exec mv {} images/ \;
整理 SQL 文件:
mkdir sql
find recup_dir.* -name "*.sql" -exec mv {} sql/ \;
虽然整理过程很痛苦。
但当你看到:
f39284.sql
这种几百 MB 的数据库文件被找回来时,
那种感觉真的像:
从鬼门关把数据抢回来。
最后的忠告
如果你经历过一次数据恢复,你就会明白一件事:
恢复只是补救,备份才是答案。
建议立刻做两件事。
1 给 rm 加一个“安全锁”
安装回收站工具:
yum install trash-cli
以后删除文件:
trash file.txt
文件会进入回收站,而不是直接消失。
2 承认一个事实
人会犯错
硬盘会坏
系统会崩
只有一件事不会背叛你:
备份。
建议至少做到:
写一个简单脚本:
每天凌晨把核心数据同步到另一台服务器。
这样下次再误删时,你只需要:
淡定地恢复备份。
而不是半夜三点在机房里流冷汗。