简单、低级的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 JPA标准从数组中选择枚举   javajavafx:操作系统dockbar中程序的标题(例如ubuntu19.10)   java int数组和双数组差分   java如何用字母表填充字符数组?   java Lucene:如何考虑与原始术语的相似性?   eclipse如何获取java文件的路径,包括/src/   Java接口—通过多个层传递变量的替代方案   java动态字段和/或人工方法   带有表单登录的JavaSpringSecurityOAuth2   twitter4j使用Java从URL中提取tweet?   java JSP解析错误   java气泡排序交换每个数字,而不考虑值   java如何在变量中存储时间?   Java程序在Eclipse中运行良好,但不是作为一个整体。jar文件(配置路径是否错误??)   如何在LinuxShell中持续运行特定数量的java进程?   java c#始终允许向上转换   java正则表达式匹配阿拉伯日期或普通日期   类Java HashMap对象,整数