CentOS回收站如何进行数据恢复测试
小樊
39
2025-12-31 08:01:34
CentOS 回收站数据恢复测试方案
一 测试目标与环境准备
- 目标:验证在 CentOS 环境下,使用 trash-cli 的回收站机制能否稳定记录、列出并恢复被删除文件,同时确认 ext4 与 xfs 在“真正删除(绕过回收站)”场景下的可恢复性与限制。
- 准备:
- 一台 CentOS 7/8/9 主机,具备 sudo 权限。
- 两块测试盘或分区:分别格式化为 ext4 与 xfs(如 /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 备份,无法保证无备份情况下的通用恢复。