在Linux上使用原生ZFS文件系统

来源:互联网 发布:cntv5 for mac 编辑:程序博客网 时间:2024/05/16 17:30

 

     目前我们公司的greenplum是建立在Solars上ZFS上的,听数据仓库部门反映,当有硬盘出现问题时,ZFS会hang住。由于目前oracle收购了sun公司,而oracle也关闭了Open Solars项目。以后Solars也要收费了,所以就想能否让greenplum跑在Linux下,而greenplum建议在Linux使用xfs文件系统,而xfs文件系统本身没有快照功能,而我们数据仓库又需要使用快照,所以我就想能否直接在Linux下使用ZFS。但是由于Linux kernel的许可证与ZFS的CDDL协议的不兼容,所以无法在Linux 内核中直接使用ZFS。去年就知道,在Linux下有ZFS的FUSE的版本可以使用,但 FUSE 的ZFS作为一个程序在用户空间(userspace)内使用,虽然绕过法律了障碍,但性能不高,据网上说的只是目前的性能仅仅只有XFS的一半。这个FUSE的ZFS我也使用过,对于一般对性能要求不高的应用还不可以的。但对于数据仓库这样对性能要求很高的应用明显是不可行的。今天,与SA同事聊时,他们说Linux下的原生ZFS发布了,而把这个ZFS编译成一个模块,而不是放入内核中,也是可以绕过法律障碍的。于是,晚上就准备试一下。

     首先在google上找到了一篇文章:《在 Linux 上编译和安装 ZFS 文件系统》,按这篇文章开始安装ZFS。我的笔记本上安装的是ubuntu10.04,于是就先在自己的笔记本电脑上安装ZFS:

 

 

到网站:https://github.com/behlendorf/zfs下载ZFS包,我下载的为zfs-0.5.1.tar.gz

由于zfs需要包spl包,还需要下载spl包:https://github.com/behlendorf/spl,我下载spl-0.5.1.tar.gz

 

root@osdba-laptop:/usr/src# wget http://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz

--2010-11-09 20:58:54--  http://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz

正在解析主机 github.com... 207.97.227.239

正在连接 github.com|207.97.227.239|:80... 已连接。

已发出 HTTP 请求,正在等待回应... 301 Moved Permanently

位置:https://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz [跟随至新的 URL]

--2010-11-09 20:58:55--  https://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz

正在连接 github.com|207.97.227.239|:443... 已连接。

错误: 证书通用名 “*.github.com” 与所要求的主机名 “github.com” 不符。

要以不安全的方式连接至 github.com,使用‘--no-check-certificate’。

wget 时报错,说是需要加“--no-check-certificate”:

wget --no-check-certificate http://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz

下载到/usr/src 目录下,解压,进入目录,运行./configure,然后make、make install就完成了spl的安装。

按文章《在 Linux 上编译和安装 ZFS 文件系统》测试一下spl是否正常:

root@osdba-laptop:/usr/src/spl-0.5.1# /sbin/modprobe splat

root@osdba-laptop:/usr/src/spl-0.5.1# 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 

 

OK,没有问题。

 

然后把ZFS解压到/usr/src/下

这时进行./configure时报如下一个错误:

configure: error: in `/usr/src/zfs-0.5.1':

configure: error:

*** uuid/uuid.h missing, libuuid-devel package required

See `config.log' for more details.

说是需要安装libuuid-devel的包,没有找到libuuid-devel的包,找到一个uuid-dev的包,估计差不多,安装:

root@osdba-laptop:/usr/src/zfs-0.5.1# aptitude install uuid-dev

正在读取软件包列表... 完成

正在分析软件包的依赖关系树       

正在读取状态信息... 完成       

正在读取扩展状态文件      

正在初始化软件包状态... 完成

下列“新”软件包将被安装。

  uuid-dev 

0 个软件包被升级,新安装 1 个, 0 个将被删除, 同时 0 个将不升级。

需要获取 76.6kB 的存档。 解包后将要使用 193kB。

正在编辑扩展状态信息... 完成

读取:1 http://cn.archive.ubuntu.com/ubuntu/ lucid/main uuid-dev 2.17.2-0ubuntu1 [76.6kB]

已下载 76.6kB,耗时 0秒 (83.3kB/s)

选中了曾被取消选择的软件包 uuid-dev。

(正在读取数据库 ... 系统当前总共安装有 241612 个文件和目录。)

正在解压缩 uuid-dev (从 .../uuid-dev_2.17.2-0ubuntu1_amd64.deb) ...

正在处理用于 man-db 的触发器...

正在设置 uuid-dev (2.17.2-0ubuntu1) ...

正在读取软件包列表... 完成     

正在分析软件包的依赖关系树       

正在读取状态信息... 完成       

正在读取扩展状态文件      

正在初始化软件包状态... 完成

正在编辑扩展状态信息... 完成  

 

然后再./configure就通过了,然后,准备使用一下ZFS:

 

root@osdba-laptop:/usr/src/zfs-0.5.1# zpool status

zpool: error while loading shared libraries: libspl.so.0: cannot open shared object file: No such file or directory

 

说明找不到libspl.so.o,这个原因估是是没有把/usr/local/lib目前加到库的搜索路径中:

root@osdba-laptop:/usr/local/lib# export LD_LIBRARY_PATH=/usr/local/lib

 

root@osdba-laptop:/usr/local/lib# zpool status

Unable to open /dev/zfs: 没有那个文件或目录.

Verify the ZFS module stack is loaded by running '/sbin/modprobe zfs'.

root@osdba-laptop:/usr/local/lib# 

需要加载zfs内核模块,加载:
root@osdba-laptop:/usr/local/lib# modprobe zfs
root@osdba-laptop:/usr/local/lib# zpool status
no pools available
root@osdba-laptop:/usr/local/lib# 
这时执行命令就正常了。
由于笔记本上无空闲的硬盘,所以建6个100M的文件做测试:

 

root@osdba-laptop:/opt/zfs# dd if=/dev/zero of=c0d2 bs=1024k count=100

记录了100+0 的读入

记录了100+0 的写出

104857600字节(105 MB)已复制,0.193669 秒,541 MB/秒

root@osdba-laptop:/opt/zfs# dd if=/dev/zero of=c1d0 bs=1024k count=100

记录了100+0 的读入

记录了100+0 的写出

104857600字节(105 MB)已复制,0.217518 秒,482 MB/秒

root@osdba-laptop:/opt/zfs# dd if=/dev/zero of=c1d1 bs=1024k count=100

记录了100+0 的读入

记录了100+0 的写出

104857600字节(105 MB)已复制,0.33618 秒,312 MB/秒

root@osdba-laptop:/opt/zfs# dd if=/dev/zero of=c1d2 bs=1024k count=100

记录了100+0 的读入

记录了100+0 的写出

104857600字节(105 MB)已复制,0.202078 秒,519 MB/秒

root@osdba-laptop:/opt/zfs# 

root@osdba-laptop:/opt/zfs# ls -l

总用量 614404

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c0d0

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c0d1

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c0d2

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c1d0

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c1d1

-rw-r--r-- 1 root root 104857600 2010-11-09 21:49 c1d2

root@osdba-laptop:/opt/zfs# zpool create mypool /opt/zfs/c0d0
root@osdba-laptop:/opt/zfs# zpool status
  pool: mypool
 state: ONLINE
 scan: none requested
config:
NAME             STATE     READ WRITE CKSUM
mypool           ONLINE       0     0     0
 /opt/zfs/c0d0  ONLINE       0     0     0
errors: No known data errors
root@osdba-laptop:/opt/zfs# 
root@osdba-laptop:/opt/zfs# zpool attach mypool /opt/zfs/c0d0 /opt/zfs/c0d1
root@osdba-laptop:/opt/zfs# zpool status
  pool: mypool
 state: ONLINE
 scan: resilvered 94K in 0h0m with 0 errors on Tue Nov  9 21:52:23 2010
config:
NAME               STATE     READ WRITE CKSUM
mypool             ONLINE       0     0     0
 mirror-0         ONLINE       0     0     0
   /opt/zfs/c0d0  ONLINE       0     0     0
   /opt/zfs/c0d1  ONLINE       0     0     0
errors: No known data errors
oot@osdba-laptop:/opt/zfs# zfs create mypool/zfs01
root@osdba-laptop:/opt/zfs# zfs list
NAME           USED  AVAIL  REFER  MOUNTPOINT
mypool         347K  63.2M    19K  /mypool
mypool/zfs01    19K  63.2M    19K  /mypool/zfs01

 

原创粉丝点击