13 个版本 (8 个破坏性更新)

0.9.0 2021年1月28日
0.7.0 2019年10月27日
0.6.0 2018年6月27日
0.5.0 2017年12月10日
0.4.1 2017年7月16日

#1064 in 文件系统


2 crates 使用

MIT 许可证

165KB
1.5K SLoC

状态

Build status

ext4-rs 可以从其他工具和 Linux 内核生成的真实镜像中提取基本的 stat 信息、目录列表和文件内容。

这直接在分区上操作。要读取实际的磁盘镜像,可能需要处理分区表。这可以通过 bootsector crate 实现。

所有基本文件类型都得到了表示:文件、目录、符号链接、字符和块设备、FIFO 和套接字。硬链接不是一个有意义的事物类型:项目只是位于多个目录中。

实际问题

  • 不支持扩展标志(例如 immutableappend-only)。
  • 可能包含溢出和边界错误,其中许多会被 Rust 转换为 panic。至少,在调试模式下是这样。

未实现的目标

这不是一个文件系统驱动程序。它不支持高效地修改真实文件系统。目前,它不支持修改任何东西,但这可能会改变。

我对资源受限的平台不感兴趣:内存和 I/O 不会被高效使用。

变更日志

  • 0.7.0: 使用 rust 1.34 功能来移除 cast 依赖
  • 0.6.0: 使用 failure 进行错误处理
  • 0.5.0: 更新 bitflags 以关联常量,并重命名一些公共常量。
  • 0.4.1: 修复解析目录条目时的无限循环问题

MSRV

Rust 1.34 (TryFrom) 受支持,并由 Travis 检查。更新此版本是一个 semver 更新。

开发

测试

一些测试读取生成的图像文件。这些图像不会直接提交到git,将由build.rs解包。这些文件显然非常大,但应该占用的空间很小。这需要在路径上有一个不错的tar

这些测试资产可以通过运行以下命令在Linux(需要root权限)上重建:./extract-test-data --refresh

许可说明

代码采用非常宽容的MIT许可。

然而,许多结构和位域定义,以及一些数学表达式,直接来自Linux或e2fsprogs源代码。这些代码库在GPLv2下。我认为这是公平使用:这些地方确实是文档,只提取了接口定义,没有代码。最终决定权在您手中。

感谢

如果没有Djwong在内核维基上关于ext4磁盘布局页面的工作,这几乎是无法实现的。我相信这个人就是Darrick Wong。谢谢你,兄弟。

依赖关系

~1.1–1.7MB
~29K SLoC