将 ZFS 移植到其他平台有些用户问到有关如何将 ZFS 移植到其他平台的问题,并且他们愿意尝试自行移植代码。本页面旨在协助他们完成移植过程,并为用户提供一个公用页面,共享其经验和他们发现的陷阱。如果要将 ZFS 移植到另一个平台,并想将相关内容添加到此页面中,请通过电子邮件与其中一个社区发起人联系,他可让您成为发起人,以便您可以编辑此内容。 现行的移植FUSERicardo Correia 正在将 ZFS 移植到 FUSE,作为用户空间文件系统。可以在以下位置找到此项目页面: http://www.wizy.org/wiki/ZFS onFUSE Ricardo 的博客: http://zfs-on-fuse.blogspot.com/ FreeBSDPawel Jakub Dawidek 正在 将 ZFS 移植到 FreeBSD。可 以在以下位置找到 FreeBSD 信息库: http://perforce.freebsd.org/depotTreeBrowser.cgi?FSPC=//depot/user/pjd/zfs gcc 信息与所有 ON 一样,ZFS 源代码是使用 gcc 构建的,作为“阴影编译”的一部分,用于检测特定于 gcc 的警告。 不过,我们使用了一组稍做修改的警告,从而获得目前所拥有的无错误的内部版本。您 可以在用于 ON 的 编译器包装函数中查看一些详细信息。特别地,我 们使用了以下警告标志:
还使用
建议的阶段进行 ZFS 移植的方法有多种,下面列出的是建议执行的某些重要阶段。这里使用了 源代码概览中的术语,因此,在进一步阅读信息之前,您应该大致了解 ZFS 源代码布局。 libzpool 和 ztestlibzpool 是 SPA(Storage Pool Allocator,存储池分配器)和 DMU(Data Management Unit,数据管理单元)的用户空间移植,它包括较大百分比的相关源代码。根据其设计,允许使用 ztest 进行用户空间测试,还允许通过 zdb 进行调试。它具有一个方便的属性,特定于内核的代码已经将该属性用作 zfs_context.h 的参数,这样移植起来相对简单。您可以在 usr/src/lib/libzpool/common 中找到这些接口(不能用 #define 实现的接口)的 Solaris 端口。 如果您可以在一个循环中成功运行 ztest 一整天而没有出现任何问题,则 可能移植了 80% 的内核代码(尽管最难的 20% 代码仍未移植)。此过程还需要移植 zdb,它用作 ztest 的一部分。 zpool(1M) 和 zfs(1M)下一步是获取用户空间管理工具 [zfs(1M)]( http://cvs.opensolaris.org/source/xref/on/usr/src/cmd/zfs/) 和 zpool(1M),前者可使用数据集,后 者可创建数据集。这实际上不会挂载文件系统(可能需要 ZPL),但是会建立用户空间 -> 内核接口,并验证 DSL 是否正常工作。 对于内核而言,需要创建
zvol要运行的简单内核内部使用者是 zvol(ZFS volume,ZFS 卷)接口。这将需要一些特定于操作系统的设备信息,但 DMU 接口非常简单。请参见 zvol.c。< /p> ZFS 文件系统最后的障碍是最困难的,因为必须使用特定于操作系统的 VFS 接口从头开始大规模写入代码。当前的 ZPL 代码可以用作如何达成实现的理念指导,但它在极大程度上是特定于 Solaris 的。有 些理念(扩展属性,NFSv4/NT ACL)可能根本不会转化为某些操作系统中的内容。 |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||