先日、分散ファイルシステムで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. 事前準備
2. パッチ(を含むlustreソース)をダウンロード
カーネルのビルドはこちらを参考に(http://fedoraproject.org/wiki/Docs/CustomKernel)
3. カーネルビルド環境の準備
ただ、、yumdownloaderでは上手くダウンロードできなかったので、wgetで直接ダウンロードすることにしました
4. パッチの準備
5. コンフィグの設定
6. カーネルをビルド
7. カーネルのインストール
8. GRUBの設定
さー、これで、動いてくれますかねー (次回に続く)
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)
さー、これで、動いてくれますかねー (次回に続く)
コメント
コメントを投稿