9 个版本 (1 个稳定版)
3.0.0-rc.2 | 2024年8月2日 |
---|---|
3.0.0-rc.1 | 2024年7月28日 |
3.0.0-rc.0 | 2024年5月27日 |
3.0.0-beta.3 |
|
0.10.1 | 2021年11月7日 |
#81 in 文件系统
235 每月下载量
用于 4 crates
490KB
11K SLoC
Zff
Zff (Z 法医文件格式) 是用于存储和处理部分或整个磁盘镜像、物理内存或逻辑文件/文件夹结构的文件格式。zff 的重点是速度、安全性和模块化,同时满足法医需求。模块化设计保证了高度的维护性和可扩展性。Zff 是 ewf 和 aff 文件格式的替代品,并且与它们不兼容。
查看 wiki 了解更多关于规范的信息。
Zff(v3) 包含的功能(其中大多数是可选的)
- ⚡ 使用现代、极快的方法压缩导出的数据(如 Zstd 或 Lz4)⚡
- 🔒 数据可以选择加密存储。使用强 AEAD 和 PBE 算法。🔒
- ☄ 格式设计为可流式传输(例如,您可以通过 HTTP 流式传输 zff 导出/容器)。☄
- 🪂 Zff 可以处理逻辑导出(如文件系统提取)和物理导出(如 dd 导出)。🪂
- 🌐️ 可以构建虚拟对象来正确读取内容(例如,定义 RAIDs)。🌐️
- ♊️ Zff 可以去重数据,以确保充分利用可用存储。♊️
- 🤹 格式设计为可以分割成多个文件。🤹
- 🍱 可以在一个 zff 容器中存储多个导出,并使用附加的导出来扩展现有的 zff 容器。🍱
- 🛡 为了防止篡改攻击,数据可以签名存储。🛡
- 🔗 使用快速的现代哈希算法来确保存储数据的完整性。🔗
Zff 工具和库
有几个工具(以及此库)可以处理 zff 容器(或获取它们)。所有工具和库都是用纯 Rust 编写的。
名称 | 类型 | 描述 | Crates.io | MRSV |
---|---|---|---|---|
zff | 库 | 处理 zff 格式的库 | 1.67.1 | |
zffacquire | 二进制文件 | 用于获取 zff 格式磁盘镜像的工具 | 1.67.1 | |
zffanalyze | 二进制文件 | 获取 zff 容器信息的工具 | 1.70.0 | |
zffmount | 二进制文件 | 使用 FUSE 挂载 zff 容器的工具(类似于 xmount) | 1.67.1 |
基准测试
以下基准测试均在一台笔记本上运行,该笔记本具有以下配置:
- 联想 Thinkbook 14S Yoga ITL
- 英特尔(R) 第11代 i5-1135G7 @ AVG:2.40GHz(MAX:4.2 GHz)
- 16GB DDR4-3200 RAM
- 内部三星 980 Pro NVMe 1TB 安装的操作系统为 Gentoo Linux。
输入和输出存储设备为内部 NVMe。
以下基准测试是为一个约20GB的预构建镜像创建的,该镜像使用基准脚本生成。
¹使用 ewfacquire example01.dd -t example01_ewf -b 64 -c fast -S 7.9EiB -u
,使用 ewfacquire 20171104。
²使用 ewfacquire example01.dd -t example01_ewf -f encase7-v2 -b 64 -c fast -S 7.9EiB -u
³使用 zffacquire physical -i raw/example01.dd -o zff
⁴使用 zffacquire physical -i raw/example01.dd -o zff -p -L debug
⁵使用 zffacquire physical -i raw/example01.dd -o zff -S
⁶使用 zffacquire physical -i raw/example01.dd -o zff_lz4 -z lz4
⁷使用 Guymager 0.8.12,默认 guymager.cfg,MD5 哈希计算,不使用 "HashVerifyDest"。
⁸使用 Guymager 0.8.12,在 guymager.cfg 中启用 Aff 支持,Aff 压缩级别为 1,MD5 哈希计算,不使用 "HashVerifyDest"。
⁹使用 linpmem-3.3-rc1 -i example01.dd -o output.aff4
¹⁰使用 linpmem-3.3-rc1 -i example01.dd -o output.aff4 --threads 8
¹¹使用 linpmem-3.3-rc1 -i example01.dd -o output.aff4 -c snappy
¹²使用 linpmem-3.3-rc1 -i example01.dd -o output.aff4 -c snappy --threads 8
使用 linpmem-3.3-rc1 -i example01.dd -o output.aff4 -c lz4
如您所见,zffacquire 在大多数情况下比其他工具要快得多 - 即使您存储加密数据。使用默认值的 zffacquire 不会影响性能。当然,如果使用额外的签名操作(但这同样适用于 Guymager,如果开启了 "HashVerifyDest" 和/或 "HashVerifySrc"),情况就不同了。
\ zffacquire 和 linpmem 使用 lz4(这仅仅表明更换压缩算法能做多少!)产生非常好的基准。
\ 以下获取的图像(Guymager-e01-image 第 1 号,在上面的基准过程中获取,以及使用 zffacquire 默认选项获取的 zff-z01-image,见上方第 6 号),获取的 Ex01-image(第 7 号)和获取的 Aff-image(由 Guymager 获取,见第 2 号),被用作读取速度基准的基础。对于基准测试,使用了 xmount 和 zffmount 以 FUSE 挂载适当的图像。接下来,使用 dd 进行读取速度基准测试。
\ 很不幸,我没有找到官方的参考工具,可以用于 FUSE 挂载 aff4 图像(在 www.aff4.org 或 docs.aff4.org 上都找不到)。如果有人能告诉我一个,我会相应地更新基准。
¹以下命令被使用
zffmount -i zff.z01 -m /tmp/zffmount -c in-memory
dd if=/tmp/zffmount/zff_image.dd of=/dev/null bs=1M
²以下命令被使用
zffmount-v2 -i zff.z01 -m /tmp/zffmount
dd if=/tmp/zffmount/zff_image.dd of=/dev/null bs=1M
³以下命令被使用
affuse aff_image.aff /tmp/affmount
dd if=/tmp/affmount/aff_example01.aff.raw of=/dev/null bs=1M
⁴以下命令被使用
xmount --in aff aff_image.aff /tmp/affmount
dd if=/tmp/affmount/aff_image.dd of=/dev/null bs=1M
⁵以下命令被使用
xmount --in ewf ewfacquired.Ex01 /tmp/ewfmount
dd if=/tmp/ewfmount/ewfacquired.dd of=/dev/null bs=1M
⁶以下命令被使用
xmount --in ewf guymager.e01 /tmp/ewfmount
dd if=/tmp/ewfmount/guymager.dd of=/dev/null b=1M
Zff 布局
有关更多信息,请参阅 wiki。
许可证
Zff 是开源软件,并使用 Apache 2.0 和 MIT 许可。这应确保其与开源和商业软件兼容。
贡献
除非您明确表示,否则您有意提交的任何贡献,根据 Apache-2.0 许可证定义,将被双许可,如上所述,没有其他条款或条件。
依赖项
~11–21MB
~306K SLoC