简单、低级的ZFS API

simplezfs的Python项目详细描述


围绕OpenZFS项目的ZFS的薄薄包装。在

该库旨在通过包装zfs(8)zpool(8)CLI实用程序或访问本机python API。在

然而,它并没有提供高水平的接口。它还试图保持尽可能少的状态 可能。在

API由两个接口类组成,ZFSZPool,它们是CLI功能的包装器 同名工具。它们有两种实现方式:

  • CLI实现包装了可执行文件
  • 本机实现使用OpenZFS 0.8发布的本机API。在

在这个早期阶段,还没有编写本机实现。在

状态

并对它们的实现作了粗略的概述。对于PE Helper,在其所在位置运行 没有用的留空(对于那些使用zfs allow)。Recursive用于指示是否可以使用 依赖数据集,例如文件集及其关联的快照。在

APITopicFeatureCLINativePE HelperRecursive
ZFSPropertiesRead nativeYesNo
Write nativeYesNo
Read metadataYesNo
Write metadataYesNo
DatasetsList datasetsYesNo
Check existanceYesNo
Create FilesetYesNoYes
Create VolumeNoNo
Create SnapshotNoNoNo
Create BookmarkNoNo
Destroy FilesetYesNoYesYes (Snaps)
Destroy VolumeNoNoNo
Destroy SnapshotNoNoNo
Destroy BookmarkNoNoNo
ZPoolStorageList poolsNoNo
Read structureYesNo
Replace diskNoNoNo
DestroyNoNoNo
CreateNoNoNo
PropertiesRead nativeNoNo
Write nativeNoNoNo
Read metadataNoNo
Write metadataNoNo

使用

可以通过调用ZFSCli/ZFSNativeZPoolCli/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提供程序无法做到这一点 要求操作系统具有加载的模块,这些模块可能在测试运行期间被破坏。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
实现接口方法时不允许java@Override   使用BuffereImage加载映像时java高ram使用率   java For循环混乱,为什么不是循环?   java Android网格视图字符串对齐问题   java如何将方法与比较类型的附加功能进行比较?   在Java Swing中放置JSepator后的间隙大小   java如何避免并发访问我的网站中的支付链接   java如何从现有的Unix服务器连接到FTP服务器?   Spring中的java用户相关bean定义   带有scribesjava库的wordpress Woocommerce REST API返回消费者密钥参数缺失错误消息   java我可以自动检测特定设备连接的串行端口吗?   Javafx棋盘游戏   java使用JTextPane显示HTML,支持SVG吗?   SpringBoot如何在java中将映射转换为实体对象?   如何使用java代码对xls文件进行密码保护   Java JPA(EclipseLink)如何在持久化实际实体之前接收下一个生成的值?   Javaservlet启动外部进程