简单、低级的ZFS API
simplezfs的Python项目详细描述
围绕OpenZFS项目的ZFS的薄薄包装。在
该库旨在通过包装zfs(8)和 zpool(8)CLI实用程序或访问本机python API。在
然而,它并没有提供高水平的接口。它还试图保持尽可能少的状态 可能。在
API由两个接口类组成,ZFS和ZPool,它们是CLI功能的包装器 同名工具。它们有两种实现方式:
- CLI实现包装了可执行文件
- 本机实现使用OpenZFS 0.8发布的本机API。在
在这个早期阶段,还没有编写本机实现。在
状态
并对它们的实现作了粗略的概述。对于PE Helper,在其所在位置运行 没有用的留空(对于那些使用zfs allow)。Recursive用于指示是否可以使用 依赖数据集,例如文件集及其关联的快照。在
API | Topic | Feature | CLI | Native | PE Helper | Recursive |
---|---|---|---|---|---|---|
ZFS | Properties | Read native | Yes | No | ||
Write native | Yes | No | ||||
Read metadata | Yes | No | ||||
Write metadata | Yes | No | ||||
Datasets | List datasets | Yes | No | |||
Check existance | Yes | No | ||||
Create Fileset | Yes | No | Yes | |||
Create Volume | No | No | ||||
Create Snapshot | No | No | No | |||
Create Bookmark | No | No | ||||
Destroy Fileset | Yes | No | Yes | Yes (Snaps) | ||
Destroy Volume | No | No | No | |||
Destroy Snapshot | No | No | No | |||
Destroy Bookmark | No | No | No | |||
ZPool | Storage | List pools | No | No | ||
Read structure | Yes | No | ||||
Replace disk | No | No | No | |||
Destroy | No | No | No | |||
Create | No | No | No | |||
Properties | Read native | No | No | |||
Write native | No | No | No | |||
Read metadata | No | No | ||||
Write metadata | No | No |
使用
可以通过调用ZFSCli/ZFSNative或ZPoolCli/ZPoolNative来获得具体的实现,或者 更方便地使用函数get_zfs(implementation_name)或get_zpool(implementation_name)。 首先,获取一个实例:
>>> fromsimplezfsimportget_zfs>>> zfs=get_zfs('cli')# or "native" for the native API>>> zfs<simplezfs.zfs_cli.ZFSCli object at 0x7ffbca7fb9e8> >>> >>> fordsinzfs.list_datasets():... print(ds.name)...tank tank/system tank/system/rootfs
兼容性
这个库是用Python3.6或更高版本编写的,它在一些主流Linux中是稳定的版本 我们关心的发行版(DebianBuster,Ubuntu18.04 LTS,RHEL8,Gentoo)。在
在OpenZFS端,代码是在0.8及更高版本上开发的,并从中获取一些验证值 释放。库没有做太多假设,代码也应该在0.7上工作。如果你发现 不兼容,请通过问题跟踪程序通知我们。在
测试
大量的测试集在tests/子文件夹中,可以使用来自源代码的pytest运行它 存储库。此时,只测试验证函数和ZFS Cli API,测试是非破坏性的 并且不会运行实际的命令,而是模仿subprocess调用并提供要运行的伪命令 (通常是/bin/true)应该以测试框架没有捕捉到的方式更改代码。尽管如此,保持 请记住,无论出于什么原因运行命令,它们很可能导致不可恢复的数据丢失。在
计划增加一组单独的破坏性测试,这些测试需要特别激活以测试代码 在实际的Linux系统上运行时有效。由于ZFS的本质,使用大多数CI提供程序无法做到这一点 要求操作系统具有加载的模块,这些模块可能在测试运行期间被破坏。在
- 项目
标签: