
— 特色专栏 —
大家好,我民工哥!
身为程序员的我们,谁还没有个手一抖误删文件的时候呢!

删库跑路这事可不太好搞哦。。。。
再说了,跑能跑掉的嘛,是吧。
不过,有了今天说的这款神器后,再也不必删库跑路了。
之前我们介绍过了:专为 ext3/ext4 文件系统设计的数据恢复工具:extundelete,今天再给大家介绍一款数据恢复利器!
这款神兵利器就是:xfs_undelete!
xfs_undelete 是一款专为 XFS 文件系统设计的开源数据恢复工具,旨在通过扫描磁盘 inode 结构,找回被标记为删除但数据仍保留在磁盘上的文件。

全盘扫描:遍历 XFS 文件系统的 inode B+树,识别被删除的文件元数据(如 inode 号、文件大小、块分配信息)。
数据重建:根据残留的元数据,从磁盘读取对应数据块并重组文件内容,支持恢复大多数类型的文件(如文档、图片、视频等)。
只读操作:恢复过程中自动将目标文件系统挂载为只读模式,避免数据被覆盖,确保安全性。
时间范围筛选:通过 -t 参数指定删除时间或修改时间范围(如 -t "2024-01-01..2024-01-31"),仅恢复特定时间段内的文件。
文件类型过滤:通过 -r 参数按 MIME 类型或扩展名筛选文件(如 -r "image/*,application/pdf"),仅恢复图片和 PDF 文件。
大小限制设置:通过 -s(最小大小)和 -m(最大大小)参数避免恢复无效文件(如零字节文件或超大稀疏文件)。

自定义目录:通过 -o 参数指定恢复文件的存储路径(如 -o /mnt/external_harddisk),确保输出目录位于不同文件系统以防止数据覆盖。
文件名生成:恢复的文件名由删除时间、inode 号和猜测的扩展名组成(如 20240101_12345_txt),需用户手动检查和重命名。
基于 Tcl 编程语言开发,代码透明且可二次开发,支持 Linux 系统(如 CentOS、Ubuntu、openSUSE)。
依赖环境简单,仅需 Tcl 8.6+、tcllib 包及 GNU coreutils 工具集(如 dd、stat、file)。
直接读取磁盘:绕过文件系统缓存,直接访问磁盘底层数据,提升恢复效率。
智能识别文件类型:利用系统自带的 file 工具自动检测文件类型并添加扩展名,减少用户手动操作。

自动挂载只读:启动时自动将目标文件系统挂载为只读模式,防止恢复过程中意外写入数据。
输出目录校验:拒绝将恢复文件保存到源文件系统所在分区,避免数据覆盖风险。
越早越好:XFS 文件系统删除文件后仅标记 inode 为删除状态,数据未被立即清除。发现文件丢失后应立即停止写入操作,提升恢复成功率。
避免覆盖:恢复前确保目标分区未被新数据写入,防止残留数据被覆盖。
安装依赖
yum install -y tcl tcllib coreutils file
安装(建议放在需恢复数据的不同分区)
#下载
git clone https://github.com/ianka/xfs_undelete/archive/refs/tags/v15.0.tar.gz
#解压
tar -zxf v15.0.tar.gz
#配置执行权限
cd xfs_undelete
chmod +x xfs_undelete
#恢复 /dev/sdb1 分区中的所有文件,输出到当前目录的 xfs_undeleted 子目录
xfs_undelete /dev/sdb1
//按时间范围恢复
#恢复 24 小时内删除的文件,输出到 /mnt/recovery 目录
xfs_undelete -t -24hour -o /mnt/recovery /dev/sdb1
//按文件类型恢复
#仅恢复图片和 PDF 文件,输出到 /mnt/recovery 目录
xfs_undelete -r "image/*,application/pdf" -o /mnt/recovery /dev/sdb1
场景:系统管理员误删了根文件系统 /dev/sda1 中的关键配置文件(如 /etc/nginx/nginx.conf),需恢复且无法卸载根分区。
xfs_undelete --no-remount-readonly /dev/sda1
恢复特定时间段内的文件
#恢复 /dev/sdX1 分区上在2024年1月1日至1月31日期间删除的所有文件
xfs_undelete -t "2024-01-01..2024-01-31" /dev/sdX1
恢复文件至外部存储设备
#将恢复的文件保存至外部硬盘 /mnt/external_disk,而非原分区。
xfs_undelete -o /mnt/external_disk /dev/sda3
排除特定类型文件(如临时文件)
#恢复/dev/sda3分区上的所有文件,但排除临时文件(如 .tmp、.swp)。
xfs_undelete -i "*.tmp,*.swp" /dev/sda3
//还可以结合时间过滤进一步优化
xfs_undelete -t -1day -i "*.tmp,*.swp" /dev/sda3
无法恢复文件名和路径:仅能重建文件内容,原始文件名和目录结构无法恢复。
文件大小可能不准确:恢复的文件可能被填充零值以匹配 XFS 块大小,需用户检查内容完整性。
高度碎片化文件可能无法完全恢复:若文件数据块分散且部分被覆盖,恢复可能不完整。
xfs_undelete 是一款针对 XFS 文件系统的专业数据恢复工具,通过智能扫描和过滤机制,高效找回被删除的文件。其开源特性、安全设计和跨平台支持使其成为 Linux 用户应对数据丢失的可靠选择。

然而,受 XFS 文件系统特性限制,恢复的文件需用户手动检查和重命名,且无法恢复原始文件名和路径。
因此,还是建议大家定期备份重要数据,并在发现文件丢失后立即停止写入操作,以最大化恢复成功率。
项目地址:https://github.com/ianka/xfs_undelete
都看到这里了,觉得不错的话,随手点个赞👍 、推荐