nkjmkzk.net

powered by Kazuki Nakajima

Unbreakable Enterprise Kernelを使おう – Btrfsセットアップ編

Unbreakable Enterprise Kernelはカーネル2.6.32をベースとしていますが、このカーネルはBtrfsを有効にしてビルドされています。

/boot/config-2.6.32-100.0.19.el5から抜粋

CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y

つまりカーネル的にはBtrfsが使える状態になっています。しかし!Btrfsでブロックデバイスをフォーマットしたりする一連のユーティリティ(コマンド群)は残念ながらインストールされていません。

Btrfsを使用するにはカーネルがBtrfsをサポートしていることと、ユーザが操作を行うためのユーティリティがインストールされている必要があります。

なのでUnbreakable Enterprise KernelではBtrfsを実質まだサポートしないという状況ですが、せっかくカーネルでBtrfsが有効になっているのですから使ってみたい衝動を抑えきれません。ということでとりあえずやってしまいます。Btrfsってどんなものか見てみるにはよいちょうどよい環境です。

本当はこのユーティリティがRPMで用意されてたりすると簡単なのですが、Oracle Linux用のユーティリティRPMなんてものは都合よく存在するはずもなく、ソースからコンパイルすることになります。そして、結論からいうとちょっと厄介です。なのでVM Templateを作っておきました。Oracle VM用です。このVM TemplateはOracle Linux 5 update 5 x86_64をベースにUnbreakable Enterprise Kernelをインストールしてあり、なおかつBtrfsのユーティリティをビルドしてインストールしてあります。(Btrfsユーティリティは/usr/local/binにいれてあります)

Oracle VM環境を持っている人はこちらをどうぞ。

VM Template: OVM_UEK5U5_X86_64.tar.bz2 (717Mbyte)

*rootパスワードはovsrootです。

2010.09.27追記:Btrfsを使う際はできる限り新しいカーネルの方が安定しています。ということでもはやUnbreakable Enterprise Kernelベースではないですが、カーネル2.6.34ベースでBtrfsが使えるVM Templateを作成しておきました。ダウンロードはこちらから。

下記ではユーティリティのインストール方法を記載しておきます。(上記VM Templateを使われる場合は以下の作業は必要ありません)

まずPublic Yum Serverのレポジトリの中でel5_u5_baseを有効にします。

[el5_ga_base]
name=Enterprise Linux $releasever GA - $basearch - base
baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/0/base/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=0

[el5_u1_base]
name=Enterprise Linux $releasever U1 - $basearch - base
baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/1/base/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=0

[el5_u2_base]
name=Enterprise Linux $releasever U2 - $basearch - base
baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/2/base/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=0

[el5_u3_base]
name=Enterprise Linux $releasever U3 - $basearch - base
baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/3/base/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=0

[el5_u4_base]
name=Enterprise Linux $releasever U4 - $basearch - base
baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/4/base/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=0

[el5_u5_base]
name=Enterprise Linux $releasever U5 - $basearch - base
baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/5/base/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=1

[ol5_u5_base]
name=Oracle Linux $releasever - U5 - x86_64 - base
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/5/base/x86_64/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=1

[el5_addons]
name=Enterprise Linux $releasever - $basearch - addons
baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/addons/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=0

[el5_oracle_addons]
name=Enterprise Linux $releasever - $basearch - oracle_addons
baseurl=http://public-yum.oracle.com/repo/EnterpriseLinux/EL5/oracle_addons/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=0

そして必要なパッケージをインストールします。

[root@~]# yum install e2fsprogs-devel zlib-devel

次にgitをインストールします。これはBtrfsのユーティリティをgitのレポジトリから落としてくる必要があるためです。そしてgitはOracleのPublic Yum ServerにはありませんのでEPELからゲットさせていただきます。

EPELとはExtra Packages for Enterprise Linuxの略で、Fedoraプロジェクトの成果物をRHEL用にRPMパッケージ化したものです。RHELとOracle Linuxはバイナリ互換、ということでUnbreakable Enterprise Kernelをインストールした後でもほとんどのEPELのパッケージはそのまま使えます。

EPELをYumのレポジトリとして登録します。

[root@~]# rpm -ivh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

gitをインストールします。依存関係があるパッケージが芋づる式にインストールされます。

[root@~]# yum install git

次にgitレポジトリからBtrfsユーティリティのソースをダウンロードします。カレントディレクトリ直下にソースコードが入ったディレクトリが作成されます。

[root@~]# git clone git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs-unstable.git

次にこちらのパッチをコピペしてnkjm-btrfs.patch等として保存します。

diff -u a/btrfs.c b/btrfs.c
--- a/btrfs.c     2010-09-21 20:07:02.000000000 -0400
+++ b/btrfs.c     2010-09-21 20:09:06.000000000 -0400
@@ -14,7 +14,7 @@
  * Boston, MA 021110-1307, USA.
  */

-
+#define _GNU_SOURCE
 #include
 #include
 #include
diff -u a/btrfs-list.c b/btrfs-list.c
--- a/btrfs-list.c     2010-09-21 20:07:02.000000000 -0400
+++ b/btrfs-list.c     2010-09-21 20:09:38.000000000 -0400
@@ -16,6 +16,7 @@
  * Boston, MA 021110-1307, USA.
  */

+#define _GNU_SOURCE
 #ifndef __CHECKER__
 #include
 #include
@@ -662,9 +663,9 @@
                    char **cache_dir_name, u64 *cache_ino,
                    char **cache_full_name)
 {
-     u64 len;
-     u64 disk_start;
-     u64 disk_offset;
+     u64 len = 0;
+     u64 disk_start = 0;
+     u64 disk_offset = 0;
      u8 type;
      int compressed = 0;
      int flags = 0;
Common subdirectories: a/.git and b/.git
Common subdirectories: a/man and b/man

*ちなみにこのパッチは今日現在のユーティリティソースコード用に作ったのでそのうち当たらなくなるかもしれません。そうなったらごめんなさい。

ソースコードのディレクトリに移動しパッチを適用します。

[root@~]# cd btrfs-progs-unstable/
[root@~]# patch < ../nkjm-btrfs.patch

ビルドしてインストールします。

[root@~]# make
[root@~]# make install

これで/usr/local/bin以下にユーティリティのバイナリが、/usr/local/man以下にマニュアルがインストールされます。Btrfsがついに使えるようになりました。

*先ほど紹介したVM Tempalteはここまでの作業がすべて入っています。

それでは別のポストでBtrfsのオペレーションを解説したいと思います。

with one comment

Written by 中嶋 一樹

9月 22nd, 2010 at 2:29 pm

Posted in Uncategorized

Tagged with ,

One Response to 'Unbreakable Enterprise Kernelを使おう – Btrfsセットアップ編'

Subscribe to comments with RSS or TrackBack to 'Unbreakable Enterprise Kernelを使おう – Btrfsセットアップ編'.

  1. [...] *ちなみにBtrfs環境のセットアップはこちらを参照ください。 [...]

Leave a Reply