下面这个图将贯穿始终:
这里,重点讨论用户层的JNI和libzfs
JNI (Java Native Interface)是Java本地接口,本地方法被编译进动态链接库,在运行时由Java虚拟机载入。
在上面的图中,libzfs是Solaris中实现ZFS的本地库,而JNI是libzfs的Java封装,其目的是让用户以更加友好的方式使用ZFS。有了这个库,用户就可以方便地创建一个新的文件系统:
LibZFS zfs = new LibZFS();
ZFSObject newFS = zfs.create("rpool/kohsuke/test", ZFSType.FILESYSTEM);
newFS.mount();
... 或者撤销:
ZFSObject fs = zfs.open("rpool/kohsuke/test");fs.unmount();fs.destory();
当然,基于libzfs,所做的事情远不止这些,还可以查询文件系统信息,创建快照,回滚(roll back等等)。
更多的信息参看:https://zfs.dev.java.net/
它是应用程序与 ZFS 内核模块打交道的主要接口。此库为访问和处理存储池和文件系统提供了一种统一的、基于对象的机制(想象一下把用户解放出来的感觉)。其中与内核通信的基础机制是系统调用调用 ioctl(2)。libzfs的源代码可以在 usr/src/lib/libzfs 中找到。它包含以下文件:
libzfs_dataset.c | 用于处理数据集的主要接口 |
libzfs_pool.c | 处理存储池的主要接口 |
libzfs_changelist.c | 在子级中传播属性改变的实用程序 |
libzfs_config.c | 读取和处理存储池配置信息 |
libzfs_graph.c | 为数据集构建相关列表 |
libzfs_import.c | 搜索和导入存储池 |
libzfs_mount.c | 挂载、取消挂载和共享数据集。 |
libzfs_status.c | 根据存储池状态链接到 FMA 知识库文章 |
libzfs_util.c | 其他例程 |
标签: