Linux 误删文件恢复实战:一次 find -delete 的紧急救援
摘要:本文记录了一次Linux运维中误删文件的恢复案例。由于find命令路径拼写错误,导致/app/middleware目录下的lib、bin、conf等重要文件被删除。作者立即以只读方式挂载分区防止数据覆盖,并提供了三种恢复方案:重新解压安装包、从备份服务器rsync同步、使用extundelete工具恢复。文章还给出了权限修复命令和预防建议,包括操作前预览、使用变量替代硬编码、定期备份等最佳实
前言
在运维工作中,误删文件是每个人都可能遇到的“噩梦”。本文记录了一次真实的误删恢复案例,希望能为大家提供参考。
关键词:数据恢复、Linux、extundelete、rsync、RMAN
一、事故经过
某日,在执行日常清理脚本时,误执行了以下命令:
find /app/middleware/middleware-project-module -type f -mtime +180 -delete
原本意图是清理超过180天的旧文件,但由于路径拼写错误,导致目标目录下的文件被批量删除。受影响的目录包括:
-
lib/(依赖库) -
bin/(启动脚本) -
conf/(配置文件)
影响:服务无法启动,项目中断约30分钟。
二、紧急止血
数据恢复的第一原则:立即停止对磁盘的写入操作。
# 以只读方式重新挂载分区 sudo mount -o remount,ro /app/middleware
这一步可以最大程度防止已删除的数据块被新数据覆盖。
三、恢复方案选择
根据是否有备份,选择不同的恢复策略:
| 场景 | 推荐方案 |
|---|---|
| 有完整备份包 | 重新解压部署 |
| 有远程备份服务器 | 使用 rsync 同步 |
| 无备份 | 使用 extundelete 恢复 |
方案一:重新解压部署(最快)
如果项目有原始的 .tar.gz 安装包:
tar -xzf middleware.tar.gz -C /app/middleware/
方案二:从备份服务器同步
rsync -avz --delete -e 'ssh -p 2222' \ root@192.168.x.x:/backup/middleware/ /app/middleware/
方案三:使用 extundelete 恢复
# 安装工具 sudo yum install -y extundelete # 恢复指定目录 sudo extundelete /dev/sdb1 --restore-directory /app/middleware/lib sudo extundelete /dev/sdb1 --restore-directory /app/middleware/bin sudo extundelete /dev/sdb1 --restore-directory /app/middleware/conf # 恢复的文件位于 ./RECOVERED_FILES/
四、权限修复
从 Windows 上传或恢复的文件,用户和权限可能不正确:
# 修改所有者和组
chown -R appuser:appgroup /app/middleware/
# 设置目录权限
find /app/middleware/ -type d -exec chmod 755 {} \;
# 设置文件权限
find /app/middleware/ -type f -exec chmod 644 {} \;
# 设置可执行脚本
chmod +x /app/middleware/bin/*.sh
五、经验总结
5.1 教训
-
find -delete极其危险,执行前务必先用-ls预览 -
脚本路径使用变量,避免硬编码错误
-
重要操作前先备份
5.2 最佳实践
# 安全删除模板 find /target/path -type f -mtime +180 -ls # 先预览 find /target/path -type f -mtime +180 -delete # 确认后执行
5.3 定期备份策略
| 备份类型 | 频率 | 保留 |
|---|---|---|
| 全量备份 | 每周 | 28天 |
| 增量备份 | 每日 | 14天 |
| 归档日志 | 实时 | 14天 |
5.4 自动化备份脚本示例
#!/bin/bash
# 每周全量备份
BACKUP_DIR=/backup/project
rman target / << EOF
backup incremental level 0 tag 'FULL'
format '${BACKUP_DIR}/full_%d_%T_%s_%p' database;
delete noprompt backup completed before 'sysdate-28';
EOF
六、结语
数据无价,预防胜于治疗。建议:
-
✅ 重要文件定期备份
-
✅ 删除操作使用
mv先移到临时目录 -
✅ 关键服务器配置堡垒机审计
-
✅ 定期演练恢复流程
你的备份策略,决定了你的恢复上限。
附录:常用恢复命令速查
| 场景 | 命令 |
|---|---|
| 查看文件系统 | df -Th |
| 只读挂载 | mount -o remount,ro /dev/sdb1 |
| 安装 extundelete | yum install -y extundelete |
| 恢复目录 | extundelete /dev/sdb1 --restore-directory /path |
| 恢复全部 | extundelete /dev/sdb1 --restore-all |
| rsync 同步 | rsync -avz --delete user@host:/src/ /dst/ |
| 批量改权限 | chown -R user:group /path |
脱敏对照表(内部参考)
| 原始内容 | 脱敏后 |
|---|---|
/app/tomee/tomee-3dspace-cas3 |
/app/middleware/middleware-project-module |
tomee.tar.gz |
middleware.tar.gz |
tomee 用户 |
appuser |
oinstall 组 |
appgroup |
/backup/PDM-DB01 |
/backup/project |
PDMDB1 |
PRODDB1 |
📌 本文已脱敏处理,所有 IP、路径、用户名均为示例,请根据实际环境调整。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)