2011/03/30

Native ZFS on Linux


先日、ZFSonLinuxにLinux用NativeなZFSがリリース(現時点ではRC2)されていると書きましたが、せっかくなのでOracle Linux 6 (Unbreakable Enterprise Kernel)でビルドしてみることにします。
本当は、ZFSのshareiscsiでZVolumeをiSCSIとしたかったのですが、shareiscsiは現時点では未実装でした。

上記のRC2のアーカイブを使ってもよいのですが、絶賛開発中のものであるのでgit リポジトリから最新ソースを持ってきてビルドしてみます。




ビルドの流れとしては

1. SPLのソースを持ってきてビルド
2. ZFSのソースを持ってきてビルド

の2段階です。

1. SPLのソースをgitリポジトリから取得
# git clone https://github.com/behlendorf/spl.git
Initialized empty Git repository in /root/work/spl/.git/
remote: Counting objects: 4372, done.
remote: Compressing objects: 100% (1195/1195), done.
remote: Total 4372 (delta 3264), reused 4206 (delta 3137)
Receiving objects: 100% (4372/4372), 1.53 MiB | 637 KiB/s, done.
Resolving deltas: 100% (3264/3264), done.

2. SPLのビルド
# cd spl
# ./configure
# vi spl-modules.spec

ここで、UEKカーネル用にちょっとspecファイルを修正しておきます。
spl-modules.specの抜粋
# RHEL 5.x/6.x:
%if %{defined el5} || %{defined el6}
 %if %{undefined kver}
  %define klnk           %{_usrsrc}/kernels/*/include/config
  %define kver           %((echo X; %{__cat} %{klnk}/kernel.release
                            2>/dev/null) | tail -1)
 %endif
 %define kpkg            kernel-uek       <-- ここと
 %define kdevpkg         kernel-uek-devel <-- ここ
# make rpm

3. 完成したSPLのrpmをインストール
# rpm -ihv spl*.rpm

4. ZFSのソースをgitリポジトリから取得
# git clone https://github.com/behlendorf/zfs.git
Initialized empty Git repository in /root/work/zfs/.git/
remote: Counting objects: 70283, done.
remote: Compressing objects: 100% (21559/21559), done.
remote: Total 70283 (delta 48202), reused 69767 (delta 47741)
Receiving objects: 100% (70283/70283), 15.40 MiB | 1.99 MiB/s, done.
Resolving deltas: 100% (48202/48202), done.

5. 必要なパッケージのインストール
# sudo yum install zlib-devel libuuid-devel libblkid-devel libselinux-devel lsscsi

6. ZFSのビルド
# cd zfs
# ./configure

ここで、SPLと同様にUEKカーネル用にちょっとspecファイルを修正しておきます。
zfs-modules.specの抜粋
# RHEL 5.x/6.x:
%if %{defined el5} || %{defined el6}
 %if %{undefined kver}
  %define klnk           %{_usrsrc}/kernels/*/include/config
  %define kver           %((echo X; %{__cat} %{klnk}/kernel.release
                            2>/dev/null) | tail -1)
 %endif
 %define kpkg            kernel-uek       <-- ここと
 %define kdevpkg         kernel-uek-devel <-- ここ

# make rpm

7. 完成したZFSのrpmをインストール
# rpm -ihv *.rpm

何かと、SELinuxが悪さをしそうなので、切っておきます。
# setenforce 0
and
# vi /etc/sysconfig/selinux

ちょっとテスト
- zpoolの作成
# zpool create myzpool sdb1

- zvolの作成
# zfs create myzpool/myzvol -V 5g

# zfs list
NAME             USED  AVAIL  REFER  MOUNTPOINT
myzpool         5.16G  4.62G    21K  /myzpool
myzpool/myzvol  5.16G  9.78G    16K  -

# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/sda1             7.7G  3.5G  3.9G  48% /
tmpfs                1001M   88K 1001M   1% /dev/shm
/dev/sda3              18G  1.2G   16G   7% /export
myzpool               4.7G 1001M  3.7G  22% /myzpool

Productionレベルではないと注記があるものですので、利用に際してはご注意ください。

0 コメント:

コメントを投稿