xfs_undelete 发布 XFS 文件系统恢复工具一、概述1. 工具简介xfs_undelete 是一款专门用于 XFS 文件系统的文件恢复工具。该工具由 Jan Kandziora 开发，采用 Tcl 脚本编写，可以帮助用户从 XFS 文件系统中恢复已删除的文件。当前最新版本为 v15.0，发布于 2024 年 7 月 21 日。XFS 是一种高性能的日志文件系统，广泛应用于 Linux 服务器和企业级存储系统。然而，XFS 文件系统的删除机制使得文件恢复变得相当困难。xfs_undelete 工具的出现填补了这一空白，为系统管理员和数据恢复专业人员提供了一种有效的恢复方案。2. 核心功能xfs_undelete 的主要功能包括：扫描 XFS 文件系统中所有标记为已删除的文件根据删除时间范围筛选恢复文件根据文件类型进行选择性恢复自动识别文件类型并分配扩展名对恢复的文件进行完整性检查支持中断后继续恢复3. 项目信息仓库地址：https://github.com/ianka/xfs_undelete开发语言：Tcl（69.6%）、Roff（29.9%）、Nix（0.5%）许可证：GPL-3.0GitHub 星标：297Fork 数量：51贡献者：5 人二、工作原理1. 技术架构XFS 文件系统采用 B+ 树结构来管理 inode。当文件被删除时，XFS 会将 inode 标记为删除状态，但并不会立即清除 extent（数据块映射）信息。xfs_undelete 正是利用这一特性来实现文件恢复。graph TB A[XFS 文件系统] --> B[分配组 AG] B --> C[Inode B+树] C --> D[扫描 Inode] D --> E{检查魔术字符串} E -->|IN\\0\\0| F[已删除 Inode] E -->|其他| G[跳过] F --> H[解析 Extent 信息] H --> I[收集数据块] I --> J[重组文件数据] J --> K[保存到目标位置]2. 恢复机制xfs_undelete 的工作流程包括以下步骤：遍历每个分配组的 inode B+ 树检查文件系统中存储 inode 的块，查找魔术字符串 IN\0\0（表示已删除的 inode）尝试解析 inode 中存储的 extent 信息（XFS 不会删除这些信息）收集文件的数据块将数据块重组并保存到指定的恢复目录3. 文件识别工具使用 file 命令和 magic number 数据库来识别文件类型。如果安装了支持 MIME 类型的 file 工具，xfs_undelete 可以根据文件内容猜测文件扩展名。三、系统要求1. 运行环境A. 必需组件Tcl >= 8.5tcllib 包（用于解析命令行参数）GNU coreutils（包含 dd、readlink、stat 等工具）B. 推荐组件file 工具（具有 magic number 文件和 MIME 类型支持）C. 存储要求需要在另一个文件系统上有足够的存储空间来保存恢复的文件。恢复的文件无法在原位恢复。2. 支持的发行版xfs_undelete 已经被以下 Linux 发行版收录：OpenSUSE Linux：https://software.opensuse.org/package/xfs_undeleteArch Linux（AUR）：https://aur.archlinux.org/packages/xfs_undelete/四、功能详解1. 时间范围过滤工具提供了灵活的时间过滤选项，可以精确控制需要恢复的文件范围。A. 删除时间范围（-t 选项）只恢复在指定时间范围内删除的文件。时间范围可以指定为：两个时间点，用双点分隔：2020-03-19..-2hours从纪元开始的范围：..-2hours到当前时间的范围：-2hours..单个时间点：-2hours时间规范支持 Tcl 的 clock scan 函数接受的所有值。B. 修改时间范围（-T 选项）只恢复在删除前指定时间范围内修改过的文件。这个选项对于知道最新备份日期的情况非常有用。时间范围格式与 -t 选项相同。2. 文件类型过滤A. 包含过滤（-r 选项）只恢复与指定模式匹配的文件类型。模式列表用逗号分隔。默认情况下，此模式为 *，即恢复所有文件。B. 排除过滤（-i 选项）忽略与指定模式匹配的文件类型。默认设置为 bin，即忽略所有未知类型的文件。C. 文件类型模式文件类型模式可以是 / 形式（匹配 MIME 类型）或其他形式（匹配文件扩展名）。文件扩展名是根据 file 工具从文件内容猜测的，因此可能与删除前的扩展名不同。使用 -l 选项可以查看所有有效的文件类型。3. 其他过滤选项A. inode 过滤（-x 选项）忽略指定 inode 编号的文件。inode 列表用逗号分隔。B. 大小过滤（-S 选项）忽略大于指定大小的文件。大小可以指定为字节数，或附加 k、M、G 后缀表示千字节、兆字节、吉字节。C. 零字节清理（-z 选项）从与指定模式匹配的文件中删除尾随零。默认设置为 text/，即所有 text/ MIME 类型的文件都会删除尾随零。五、使用指南1. 基本用法A. 最简单的使用方式cd ~ xfs_undelete /dev/mapper/cr_data这将把 /dev/mapper/cr_data 中恢复的文件保存在 ~/xfs_undeleted 目录中。B. 指定输出目录xfs_undelete -o /mnt/external_harddisk /dev/sda3这将把 /dev/sda3 中恢复的文件保存到 /mnt/external_harddisk 目录。2. 高级用法A. 按时间范围恢复xfs_undelete -t 2020-03-19 /dev/sda3忽略 2020 年 3 月 19 日之前删除的文件。xfs_undelete -t -1hour /dev/sda3忽略一小时前删除的文件。B. 恢复所有类型文件xfs_undelete -i "" -t -2hour /dev/sda3恢复两小时内删除的所有文件，包括"bin"文件（未知类型）。C. 按文件类型恢复xfs_undelete -r 'image/*,gimp-*' /dev/sda3只恢复匹配 image/* MIME 类型的文件，以及被分配以 gimp- 开头的扩展名的文件。3. 命令行选项完整的命令行语法：xfs_undelete [-t timerange] [-T timerange] [-r filetypes] [-i filetypes] [-x inodes] [-S size] [-z filetypes] [-o output_directory] [-s start_inode] [-m magicfiles] [--no-remount-readonly] device xfs_undelete -l [-m magicfiles]主要选项说明：-t timerange：只恢复指定时间范围内删除的文件-T timerange：只恢复删除前指定时间范围内修改过的文件-r filetypes：只恢复指定类型的文件-i filetypes：忽略指定类型的文件-x inodes：忽略指定的 inode-S size：忽略大于指定大小的文件-z filetypes：从指定类型的文件中删除尾随零-o output_directory：指定输出目录-s start_inode：指定开始恢复的 inode 编号-m magicfiles：指定 alternate magic 文件列表--no-remount-readonly：不重新挂载为只读模式-l：列出所有有效的文件类型六、限制与注意事项1. XFS 文件系统的固有限制A. 文件名和路径无法恢复XFS 删除文件的方式使得恢复文件名和路径成为不可能。工具只能根据删除时间、inode 编号和猜测的文件扩展名来命名恢复的文件。用户需要手动检查和重命名恢复的文件。B. 碎片文件恢复受限对于 512 字节的 inode，最多只能恢复具有 21 个 extent（任意大小）的文件。具有更多 extent 的文件无法通过此程序恢复。C. 文件大小不准确大多数文件会用零填充以适应 XFS 块大小边界。大多数程序不会在意这些尾随零字符。text/* MIME 类型的文件默认会在恢复后删除尾随零。2. 安全性考虑A. 只读操作xfs_undelete 只对源文件系统执行读取操作。它默认会在启动时将文件系统重新挂载为只读模式，以防止意外覆盖源数据。B. 风险提示尽管工具尽可能保证安全，但作者不提供任何保证或责任声明。使用风险自负。C. --no-remount-readonly 选项此选项用于需要从根文件系统恢复文件的特殊情况。使用此选项有风险，因为源文件系统不会重新挂载为只读，可能会意外覆盖源文件系统。建议将硬盘移动到另一台计算机进行恢复。3. 故障排除A. 权限问题操作设备时需要以 root 用户身份运行，因为工具会将源文件系统重新挂载为只读模式。如果文件系统繁忙（例如有程序以读写模式打开文件），重新挂载可能会失败。解决方法：停止使用文件系统的程序使用 fuser -m /home 查找占用文件的进程最终可以进入单用户模式如果需要从 / 文件系统恢复，建议从另一个根文件系统启动B. 存储空间需要在另一个文件系统上有足够的空间来保存恢复的文件。如果计算机只有一个巨大的 XFS 文件系统，需要连接外部存储。C. 文件类型识别问题如果恢复的文件没有文件扩展名，或者 -r、-i、-z 选项不起作用：使用 -l 选项检查 file 工具是否正常工作如果返回的列表很短，可能是 file 工具未安装检查 file-magic 包是否安装确认 magic 文件支持 MIME 类型七、技术特色1. 设计优势xfs_undelete 的设计体现了以下优势：轻量级：采用 Tcl 脚本编写，代码简洁易读安全性：只读操作，不会对源文件系统造成二次破坏灵活性：提供多种过滤选项，精确控制恢复范围实用性：支持中断继续，适合大规模恢复任务2. 与其他恢复工具的对比特性xfs_undeleteext4recoverTestDisk支持文件系统XFSext4多种文件名恢复不支持支持支持时间过滤支持不支持不支持类型过滤支持不支持有限安装难度简单中等中等八、适用场景1. 典型应用场景xfs_undelete 适用于以下场景：误删除文件后的紧急恢复定期备份之前的文件恢复系统维护前的数据备份数据迁移后的遗漏文件恢复恶意软件攻击后的数据恢复2. 最佳实践一旦发现文件丢失，立即停止对文件系统的任何写入操作如果可能，将硬盘连接到另一台计算机进行恢复优先恢复到外部存储设备使用时间过滤缩小恢复范围，减少恢复时间和存储空间恢复后及时验证文件完整性建立定期备份机制，减少对恢复工具的依赖九、总结xfs_undelete 是一款针对 XFS 文件系统的专业恢复工具，填补了 XFS 文件系统恢复领域的空白。虽然受到 XFS 文件系统删除机制的限制，无法恢复文件名和路径，但通过时间范围过滤、文件类型过滤等功能，仍然可以为用户提供有效的数据恢复方案。对于使用 XFS 文件系统的系统管理员和数据恢复专业人员来说，xfs_undelete 是一个值得收藏的工具。在日常工作中，应该建立完善的备份机制，将数据恢复工具作为最后一道防线。参考资料xfs_undelete GitHub 仓库