在 Linux 上编译和安装 ZFS 文件系统

因为版权的问题,使用 GPL 协议的 Linux 内核无法直接使用 CDDL 协议的 ZFS 文件系统,有一个办法可以绕过这个问题,就是先把 ZFS 代码编译成版权为 CDDL 的内核模块,然后 Linux 内核加载一个 CDDL 协议的内核模块,很高兴已经有人(ZFS on Linux)这么做了,所以我们终于有了原生的 Linux ZFS 文件系统。在 Linux 上和 ZFS 相似的还有一个 Btrfs 文件系统,被称为 Linux 下一代文件系统,起初是由 Oracle 开发的,有意思的是 Oracle 收购 SUN 后又得到了 ZFS,不过因为 Btrfs 使用的是 GPL 协议,所以不管 Oracle 的态度如何,对 Btrfs 的影响有限。

安装必备软件包:

# yum install kernel-devel rpm-build

下载、编译和安装 SPL 包:

# wget http://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz
# tar zxvf spl-0.5.1.tar.gz
# cd spl-0.5.1
# ./configure
# make rpm

# rpm -Uvh *.x86_64.rpm

加载 splat 模块到内核,并测试:

# /sbin/modprobe splat

# splat -t kmem:all
------------------------------ Running SPLAT Tests ------------------------------
                kmem:kmem_alloc           Pass  
                kmem:kmem_zalloc          Pass  
                kmem:vmem_alloc           Pass  
                kmem:vmem_zalloc          Pass  
                kmem:slab_small           Pass  
                kmem:slab_large           Pass  
                kmem:slab_align           Pass  
                kmem:slab_reap            Pass  
                kmem:slab_age             Pass  
                kmem:slab_lock            Pass  
                kmem:slab_overcommit      Pass  
                kmem:vmem_size            Pass

下载、编译和安装 ZFS 包:

# wget http://github.com/downloads/behlendorf/zfs/zfs-0.5.1.tar.gz
# tar zxvf zfs-0.5.1.tar.gz
# cd zfs-0.5.1
# ./configure
# make pkg

# rpm -Uvh *.x86_64.rpm

加载 zfs 模块到内核,并测试:

# /sbin/modprobe zfs

# /usr/libexec/zfs/zpios-sanity.sh 
status    name        id	wr-data	wr-ch	wr-bw	rd-data	rd-ch	rd-bw
-------------------------------------------------------------------------------
PASS:     file-raid0   0	64m	64	112.68m	64m	64	4.81g
PASS:     file-raid10  0	64m	64	10.46m	64m	64	876.71m
PASS:     file-raidz   0	64m	64	12.14m	64m	64	780.49m
PASS:     file-raidz2  0	64m	64	17.68m	64m	64	14.66m
PASS:     lo-raid0     0	64m	64	1.30g	64m	64	876.71m
PASS:     lo-raid10    0	64m	64	666.67m	64m	64	14.65m
PASS:     lo-raidz     0	64m	64	1.10g	64m	64	876.71m
PASS:     lo-raidz2    0	64m	64	492.31m	64m	64	876.71m

如果上述加载内核模块有问题,建议重启系统后重新加载试一下,并检查是否模块加载成功:

# reboot

# /sbin/modprobe splat
# /sbin/modprobe zfs

# lsmod
Module                  Size  Used by
zfs                   866368  0 
zcommon                75504  1 zfs
znvpair                82432  2 zfs,zcommon
zavl                   40576  1 zfs
zlib_deflate           52825  1 zfs
zunicode              353664  1 zfs
splat                 160848  0
...

如果没有多余的硬盘玩 ZFS 的话,可以按照 “ZFS 的简单使用” 介绍的方法创建几个文件充当硬盘,简单玩一下 Linux 下的原生 ZFS 支持。

评论 (3 Comments)

  1. ZFS 有什麼特別嗎

  2. 希望有空能讲讲 nagios 。

  3. 貌似现在还不支持posix的访问方式,只能将zfs vol作为块设备来用。感觉有点怪哈。
    Currently in the ZFS for Linux port the only interface available from user space is the zvol.

    The only interface currently available from user space is the ZVOL virtual block device.

发表评论