#zfs #freebsd #os #open3 #zol

libzetta

libzetta 是 ZFS 的程序化管理的一个稳定接口

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文件系统

Download history 18/week @ 2024-03-11 10/week @ 2024-03-18 14/week @ 2024-03-25 34/week @ 2024-04-01 5/week @ 2024-04-08 17/week @ 2024-04-15 33/week @ 2024-04-22 12/week @ 2024-04-29 4/week @ 2024-05-06 21/week @ 2024-05-13 15/week @ 2024-05-20 1/week @ 2024-05-27 40/week @ 2024-06-03 46/week @ 2024-06-10 10/week @ 2024-06-17 4/week @ 2024-06-24

每月101 次下载
用于 symo

BSD-2-Clause

265KB
5.5K SLoC

Build Status codecov Crates.io Cirrus CI - Base Branch Build Status docs.rs license

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-ubuntujust test-freebsd12 以在虚拟机中运行测试
  • 要运行特定的测试运行 just test-ubuntu "-- easy_snapshot_and_bookmark"

注意:集成测试必须以root身份运行。Zpools和数据集将被创建/修改/销毁。如果它擦除了您在VM外部运行的系统数据集,那将是您的责任。

Nix

项目已启用nix-flake,但flake本身还不够:您需要自己提供libzfs_core及其依赖项。这是故意的。

当前功能状态

zpool

创建 销毁 获取属性 设置属性 清除 导出 导入 列出可用 读取状态 添加vdev 更换磁盘
open3 ✔¹
  1. 读取状态,但API不稳定,在报告清除状态方面做得不好。

zfs

文件系统和ZVOL

创建 销毁 列表 获取属性 更新属性
open3
lzc ✔¹
  1. 可能无法访问所有属性。

快照和书签

创建 销毁 列表 获取属性 发送 接收
open3
lzc ✔¹
  1. 可能无法访问所有属性。

替代方案

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实现。

许可证

BSD-2-Clause.

依赖项

~10MB
~188K SLoC