2011/05/06

ZFS on Linux and Lustre その1

先日、分散ファイルシステムでLustreに興味があるとブログに書きましたがZFS on Linux(http://zfsonlinux.org/)も、気づいたらrc4までリリースが進んでいます。

rc3でlustreとの連携が図られた模様でlustreのバックエンドとしてzfsが使用可能になっています。さらにサポートされるカーネルも2.6.32ベースと比較的、ビルドしやすい?感じになっています。(絶賛、開発中なのは変わりませんが...)

今回は、rc4をベースにlustre連携をやってみようと思います。

まずは、lustreを動かすには、いくつかカーネルにパッチをあてる必要があるので、そちらから。使用した環境は

Oracle Linux 6

なのですが、カーネルソースが入手できるものがRedhat互換のkernel-2.6.32-71.el6だったので、そちらをベースにパッチをあてることにしました。

1. 事前準備
# public yum の準備
$ cd /etc/yum.repos.d
$ wget http://public-yum.oracle.com/public-yum-ol6.repo
## enabled=1をお忘れなく

# 不必要なので停止
$ service iptables stop
$ chkconfig iptables off
$ vi /etc/sysconfig/selinux
$ setenforce 0

2. パッチ(を含むlustreソース)をダウンロード
カーネルのビルドはこちらを参考に(http://fedoraproject.org/wiki/Docs/CustomKernel)
$ mkdir ~/work; cd ~/work
$ wget --no-check-certificate http://github.com/downloads/behlendorf/lustre-kdmu/lustre-2.0.58.2-1chaos.tar.gz
$ tar xzvf lustre-2.0.58.2-1chaos.tar.gz
$ yum install rpmdevtools yum-utils

3. カーネルビルド環境の準備
$ rpmdev-setuptree
$ yumdownloader --source kernel

ただ、、yumdownloaderでは上手くダウンロードできなかったので、wgetで直接ダウンロードすることにしました
$ wget http://public-yum.oracle.com/repo/OracleLinux/OL6/0/base/x86_64/getPackageSource/kernel-2.6.32-71.el6.src.rpm
$ yum-builddep --nogpgcheck kernel-2.6.32-71.el6.src.rpm
$ rpm -Uhv kernel-2.6.32-71.el6.src.rpm
$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp --target=`uname -m` kernel.spec
# 途中で処理が止まるので、別ターミナルで 
$ rngd -r /dev/urandom

4. パッチの準備
# なんかseries内では不足パッチがあるみたいなので、パッチを作成(d_rehash_cond()とかd_move_locked()のシンボルがない!とか言われるので)
$ cd /root/work/lustre-2.0.58.2-1chaos/lustre/kernel_patches/patches
# cp iopen-misc-2.6.22-vanilla.patchをベースにパッチ作成

# これは自作のパッチ
$ cp dcache.patch dcache.header.patch ~/rpmbuild/SOURCES

# ここからはseriesパッチ
$ cp lustre_version.patch \
 mpt-fusion-max-sge-rhel6.patch \
 raid5-mmp-unplug-dev-rhel6.patch \
 dev_read_only-2.6.32-rhel6.patch \
 blkdev_tunables-2.6-rhel6.patch \
 export-2.6.32-vanilla.patch \
 jbd2-jcberr-2.6-rhel6.patch \
 jbd2-commit-timer-no-jiffies-rounding-rhel6.patch \
 ~/rpmbuild/SOURCES

# パッチファイルの指定
$ cd /root/rpmbuild/SPECS
$ vi kernel.spec
ApplyOptionalPatch lustre_version.patch
ApplyOptionalPatch mpt-fusion-max-sge-rhel6.patch
ApplyOptionalPatch raid5-mmp-unplug-dev-rhel6.patch
ApplyOptionalPatch dev_read_only-2.6.32-rhel6.patch
ApplyOptionalPatch blkdev_tunables-2.6-rhel6.patch
ApplyOptionalPatch export-2.6.32-vanilla.patch
ApplyOptionalPatch jbd2-jcberr-2.6-rhel6.patch
ApplyOptionalPatch jbd2-commit-timer-no-jiffies-rounding-rhel6.patch
ApplyOptionalPatch dcache.patch
ApplyOptionalPatch dcache.header.patch

5. コンフィグの設定
$ cp configs/kernel-2.6.32-x86_64.config .config
$ make oldconfig
$ make menuconfig
# x86_64 -- Add a new line to the top of the config file that contains the hardware platform the kernel is built for (the output of uname -i). The line is preceded by a # sign. For example, an x86_64 machine would have the following line added to the top of the config file:)
$ vi .config 
$ cp .config ~/rpmbuild/SOURCES/config-`uname -m`
$ cp .config ~/rpmbuild/SOURCES/config-`uname -m`-generic
$ cd ~/rpmbuild/SPECS
# カーネルIDの指定
$ vi kernel.spec (%define buildid .lustre.2.0.58.2)

6. カーネルをビルド
$ rpmbuild -bb --with baseonly --with firmware --without debuginfo --target=`uname -m` kernel.spec

7. カーネルのインストール
$ cd ~/rpmbuild/RPMS/x86_64
$ rpm -ivh --force kernel-2.6.32-71.el6.lustre.2.0.58.2.x86_64.rpm \
 kernel-firmware-2.6.32-71.el6.lustre.2.0.58.2.x86_64.rpm \
 kernel-headers-2.6.32-71.el6.lustre.2.0.58.2.x86_64.rpm \
 kernel-devel-2.6.32-71.el6.lustre.2.0.58.2.x86_64.rpm

8. GRUBの設定
$ vi /etc/grub.conf (=> default 0) 

さー、これで、動いてくれますかねー (次回に続く)

0 コメント:

コメントを投稿