温馨提示×

CentOS回收站如何进行数据恢复测试

小樊
39
2025-12-31 08:01:34
栏目: 智能运维

CentOS 回收站数据恢复测试方案

一 测试目标与环境准备

  • 目标:验证在 CentOS 环境下,使用 trash-cli 的回收站机制能否稳定记录、列出并恢复被删除文件,同时确认 ext4xfs 在“真正删除(绕过回收站)”场景下的可恢复性与限制。
  • 准备:
    • 一台 CentOS 7/8/9 主机,具备 sudo 权限。
    • 两块测试盘或分区:分别格式化为 ext4xfs(如 /dev/vdb1/dev/vdc1),挂载到 /data/data-ext4/data/data-xfs
    • 安装工具:回收站工具 trash-cli,以及恢复工具 extundelete(ext4)、xfsdump/xfsrestore(xfs)。
    • 校验工具:生成校验值(如 md5sum)以确认恢复一致性。

二 基于 trash-cli 的回收站恢复测试

  • 安装与验证
    • 安装:sudo yum install -y trash-cli(或 dnf)。
    • 验证命令:trash-list、trash-restore、trash-empty 是否可用。
  • 回收站机制验证
    • 创建测试文件:echo “test-recycle” > /data/test1.txt;记录校验值:md5sum /data/test1.txt。
    • 删除到回收站:trash-put /data/test1.txt;执行 trash-list 应能看到记录(含原始路径、删除时间)。
    • 恢复文件:trash-restore,按提示选择对应编号;恢复到原路径或指定路径;用 md5sum 校验一致性。
    • 清理回收站:trash-empty(可按天数清理:trash-empty 10)。
  • 回收站目录结构核对
    • 查看回收站文件:ls -l ~/.local/share/Trash/files;查看元信息:ls -l ~/.local/share/Trash/info。
    • 说明:files 保存实际数据,info 保存原始路径、删除时间等元数据;这是 FreeDesktop.org 规范定义的回收站结构。
  • 注意事项
    • 回收站仅对通过文件管理器或 trash-put 删除的文件有效;直接使用 rm 删除的文件不会进入回收站。
    • 作者不建议将 rm 直接别名为 trash-put,以免语义差异导致误用;如确需别名,建议仅作提示或改用安全包装脚本。

三 绕过回收站时的恢复测试 ext4 与 xfs

  • 通用原则
    • 发生 rm -rf 等绕过回收站的删除后,应立即停止对目标分区的写入,降低被覆盖风险;恢复成功率并非 100%
  • ext4 场景
    • 安装工具:sudo yum install -y extundelete。
    • 卸载分区:sudo umount /dev/vdb1(恢复前必须卸载)。
    • 查看可恢复项:extundelete /dev/vdb1 --inode 2(确认删除记录存在)。
    • 执行恢复:extundelete /dev/vdb1 --restore-all;恢复结果位于当前目录的 RECOVERED_FILES
    • 校验:对恢复文件执行 md5sum,与删除前记录比对。
  • xfs 场景
    • 说明:xfs 文件系统不支持 extundelete 类按日志“反删除”。可用 xfsdump/xfsrestore 在事前有备份的前提下恢复。
    • 备份:sudo xfsdump -f /data/xfsbackup /dev/vdc1(先做一次全量备份)。
    • 模拟删除:rm -rf /data/data-xfs/hostname。
    • 恢复:sudo xfsrestore -f /data/xfsbackup /data/restore-xfs;进入恢复目录校验一致性。
  • 补充
    • 若文件被进程占用,可尝试 lsof | grep deleted 定位仍被打开的已删除文件句柄,再酌情处理(如从 /proc//fd 复制恢复)。

四 自动化测试脚本与验收要点

  • 示例脚本(回收站路径测试)
    • 说明:该脚本验证“删除→列出→恢复→校验”的闭环;请在非生产环境运行,并确保目标分区挂载为 ext4/xfs 并已安装 trash-cli
    • 脚本:
      • #!/usr/bin/env bash set -e DATA_DIR=“/data/test-recycle” mkdir -p “$DATA_DIR” FILE=“$DATA_DIR/file-$(date +%s).txt” echo “hello-recycle” > “$FILE” ORIG_MD5=$(md5sum “$FILE” | awk ‘{print $1}’) echo “Original md5: $ORIG_MD5” trash-put “$FILE” echo “After trash-put, trash-list:” trash-list RESTORED=$(trash-restore <<< $‘0\n’ | grep -o “$DATA_DIR/file-[0-9]+.txt” || true) if [[ -f “$RESTORED” ]]; then RESTORED_MD5=$(md5sum “$RESTORED” | awk ‘{print $1}’) if [[ “$ORIG_MD5” == “$RESTORED_MD5” ]]; then echo “PASS: Recovered file matches original md5.” else echo “FAIL: md5 mismatch.” exit 1 fi else echo “FAIL: Restore failed.” exit 1 fi

        可选:清理

        trash-empty

  • 验收要点
    • 回收站能正确记录删除事件并支持交互式恢复;恢复后文件内容与校验值一致。
    • 回收站目录结构(files/info)完整,包含原始路径与时间等元数据。
    • 绕过回收站的删除:在 ext4 上可用 extundelete 恢复;xfs 需依赖事先的 xfsdump 备份,无法保证无备份情况下的通用恢复。

0