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 使用
165KB
1.5K SLoC
状态
ext4-rs
可以从其他工具和 Linux 内核生成的真实镜像中提取基本的 stat
信息、目录列表和文件内容。
这直接在分区上操作。要读取实际的磁盘镜像,可能需要处理分区表。这可以通过 bootsector
crate 实现。
所有基本文件类型都得到了表示:文件、目录、符号链接、字符和块设备、FIFO 和套接字。硬链接不是一个有意义的事物类型:项目只是位于多个目录中。
实际问题
- 不支持扩展标志(例如
immutable
、append-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