前言

在运维工作中,误删文件是每个人都可能遇到的“噩梦”。本文记录了一次真实的误删恢复案例,希望能为大家提供参考。

关键词:数据恢复、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 教训

  1. find -delete 极其危险,执行前务必先用 -ls 预览

  2. 脚本路径使用变量,避免硬编码错误

  3. 重要操作前先备份

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、路径、用户名均为示例,请根据实际环境调整。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐