13 个不稳定版本 (4 个破坏性更改)
0.5.0 | 2023年5月13日 |
---|---|
0.4.3 | 2023年5月12日 |
0.4.2 | 2023年4月1日 |
0.3.1 | 2022年4月17日 |
0.1.2 | 2019年8月12日 |
514 在 文件系统 中
每月101 次下载
用于 symo
265KB
5.5K SLoC
libzetta-rs 是 ZFS 的程序化管理的一个稳定接口
安装
尚未提供。它不会破坏你的存储池或杀害你的兄弟,但 API 可能会更改。等待 1.0.0 版本。我有一个相当不错的 1.0.0 版本的路线图。
用法
zpool
的稳定公共 API。我实际上在其他项目中使用 zfs
之前,其公共 API 可能会更改。请参阅使用 文档。
FreeBSD
此库专注于 FreeBSD 支持。它应该适用于任何 9.2 或更高版本的 FreeBSD。没有支持旧版本的意图。支持的版本
- 12.1
- 13.0 (没有为它设置 CI)
注意:FreeBSD 13.0 破坏了 libzfs_core
依赖项。直到它修复,解决方案是使用 LD_PRELOAD
从 ports 加载 libzfs_core
。 注意:由于 FreeBSD 转移到 OpenZFS,将在第一次破坏时删除对“旧版”的支持。
Linux
在编写此内容时,已验证适用于 Ubuntu 20.04 的可用版本是 0.8.3
。
工作原理
ZFS 完全没有稳定的 API。libzfs_core
(lzc
) 填补了一些空缺,但并非全部。虽然 lzc
为 zfs 的某些功能提供了稳定的 API,但没有为 zpool 提供此类 API。此库在 zfs(8)
和 zpool(8)
中使用,其中 lzc
短缺。
运行测试
Vagrantfile
有 3 个 VMS:ubuntu-20.04、FreeBSD 12 和 FreeBSD 13,以使用它们
- 启动其中一个
- 安装
just
- 运行
just test-ubuntu
或just test-freebsd12
以在虚拟机中运行测试 - 要运行特定的测试运行
just test-ubuntu "-- easy_snapshot_and_bookmark"
注意:集成测试必须以root身份运行。Zpools和数据集将被创建/修改/销毁。如果它擦除了您在VM外部运行的系统数据集,那将是您的责任。
Nix
项目已启用nix-flake,但flake本身还不够:您需要自己提供libzfs_core
及其依赖项。这是故意的。
当前功能状态
zpool
创建 | 销毁 | 获取属性 | 设置属性 | 清除 | 导出 | 导入 | 列出可用 | 读取状态 | 添加vdev | 更换磁盘 | |
---|---|---|---|---|---|---|---|---|---|---|---|
open3 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔¹ | ✔ | ✔ |
- 读取状态,但API不稳定,在报告清除状态方面做得不好。
zfs
文件系统和ZVOL
创建 | 销毁 | 列表 | 获取属性 | 更新属性 | |
---|---|---|---|---|---|
open3 | ❌ | ❌ | ✔ | ✔ | ❌ |
lzc | ✔¹ | ✔ | ❌ | ❌ | ❌ |
- 可能无法访问所有属性。
快照和书签
创建 | 销毁 | 列表 | 获取属性 | 发送 | 接收 | |
---|---|---|---|---|---|---|
open3 | ❌ | ❌ | ✔ | ✔ | ❌ | ❌ |
lzc | ✔¹ | ✔ | ❌ | ❌ | ✔ | ❌ |
- 可能无法访问所有属性。
替代方案
https://github.com/whamcloud/rust-libzfs
与它们不同,LibZetta不链接到ZFS的私有库。 libzetta
还有更多文档。
https://github.com/jmesmon/rust-libzfs
LibZetta具有zpool API。LibZetta与这个库共享 -sys
crate。LibZetta还将某些功能委派给 zfs(8)
的open3实现。
许可证
依赖项
~10MB
~188K SLoC