电脑技术学习

zfs文件系统架构解读(二)-接口之探究

dn001

  下面这个图将贯穿始终:

  这里,重点讨论用户层的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 其他例程

标签: