nkjmkzk.net

powered by Kazuki Nakajima

ルートファイルシステムをBtrfsにする方法(Oracle Linux 5.6)

Fedora 16でデフォルトファイルシステムとなることがアナウンスされ、Btrfsはいよいよ本格的に使われはじめることと思います。今回は最新のBtrfsソースコードを用いてLinuxのルートファイルシステムをBtrfsにしてしまう手順を紹介します。
OSは仮想マシンのOracle Linux 5.6 x86_64をベースにして進めていきます。

まずはBtrfsのソースコードを取ってくる必要があります。最新のソースコードはgitで管理されており、gitコマンドでダウンロードする必要がありますのでまずはgitを使えるようにします。

EPELレポジトリを利用可能にし、yumでgitをインストールします。

[root@~]# cd /var/opt
[root@~]# wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
[root@~]# rpm -ivh epel-release-5-4.noarch.rpm
[root@~]# yum install -y git

git cloneでBtrfsの最新ソースコードをダウンロードします。これによってLinux Kernelを含むコード全体がダウンロードされます。

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

作成されたディレクトリに移動し、現在のKernel設定を継承するために/bootディレクトリからKernelビルド設定ファイルを.configとしてカレントディレクトリ配下にコピーします。

[root@~]# cd btrfs-unstable/
[root@~]# cp /boot/config-2.6.32-100.26.2.el5 ./.config

コピーした設定ファイルを元に新しい設定ファイルを作成します。

[root@~]# make oldconfig

このあと古い設定ファイルと新しいKernelとの機能差の部分について対話的に設定することを求められますが、今回はEnterキーを押し続けてデフォルトを受け入れます。ビルドがうまくいったらその後で自分なりのコンフィグを詰めて下さい。
対話的設定が終わるとコマンドプロンプトが戻ってきます。
一点だけ今作成したKernelビルド設定ファイルを修正します。BtrfsはデフォルトではKernel Moduleとしてビルドされますが、これをKernel本体に組み込むようにします。

[root@~]# vi .config
CONFIG_BTRFS_FS=y

ではここからコンパイルを行っていきます。ちなみに-jオプションに渡す数字はコンパイルの並列度を設定します。お手持ちのCPUコア数の倍の数くらいを目安に与えてください。

[root@~]# make -j8

Kernel Moduleのインストール。

[root@~]# make modules_install

Kernelのインストール。

[root@~]# make install

これでインストールはひとまず完了です。
一度リブートしますが、起動時にgrubのメニュー画面を見れない場合は次のようにgrub.confを編集してデフォルトのKernelを新しいKernelに変更しておきます。

[root@~]# vi /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Oracle Linux Server (2.6.38+)
        root (hd0,0)
        kernel /vmlinuz-2.6.38+ ro root=/dev/VolGroup00/root rhgb quiet
        initrd /initrd-2.6.38+.img
title Oracle Linux Server (2.6.32-100.26.2.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-100.26.2.el5 ro root=/dev/VolGroup00/root rhgb quiet
        initrd /initrd-2.6.32-100.26.2.el5.img
title Oracle Linux Server (2.6.18-238.1.1.0.1.el5xen)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-238.1.1.0.1.el5xen ro root=/dev/VolGroup00/root rhgb quiet
        initrd /initrd-2.6.18-238.1.1.0.1.el5xen.img

リブートします。

[root@~]# init 6

起動したら新しいKernelで起動しているか確認します。

[root@~]# uname -r
2.6.38+

次にbtrfsの操作に必要となるツール群と、そのツール群のビルドに必要なe2fsprogs-develをインストールします。

[root@~]# yum install -y e2fsprogs-devel
[root@~]# cd /var/opt
[root@~]# git clone git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs-unstable.git
[root@~]# cd btrfs-progs-unstable/
[root@~]# make
[root@~]# make install

これでmkfs.btrfs等のツール群がインストールされました。リブートは必要ありません。

ここからBtrfsのファイルシステム作成と移行をおこなっていきます。
現在のボリュームとファイルシステムのレイアウトを確認します。

[root@~]# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-root    20G   9.5G  8.9G  52% /
/dev/xvda1                     99M    34M   60M  37% /boot
tmpfs                          952M     0  952M   0% /dev/shm

現在ルートファイルシステムは20GByte程のLogical Volumeで構成されています。
このファイルシステムを丸ごと同容量のBtrfsにコピーすることで移行を図ります。
さしあたってBtrfs用のボリュームを追加する必要があります。今回は仮想化環境なのでdom0側で20GByteのFile VBDを作成して仮想マシンに割り当てます。

[root@dom0]# cd /OVS/running_pool/btrfs
[root@dom0]# dd if=/dev/zero of=btrfs_root.img bs=1M count=0 seek=20480
[root@dom0]# xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0   564     8     r-----   2052.8
btrfs                                        1   256     4     -b----    247.1

[root@dom0]# xm block-attach btrfs file:/OVS/running_pool/btrfs/btrfs_root.img /dev/xvdc w

仮想マシンに戻り、今割り当てられたボリュームをBtrfsでフォーマットして一時的に/mntにマウントします。

[root@~]# mkfs.btrfs /dev/xvc

WARNING! - Btrfs v0.19-35-g1b444cd IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using

fs created label (null) on /dev/xvdc
        nodesize 4096 leafsize 4096 sectorsize 4096 size 20.00GB
Btrfs v0.19-35-g1b444cd

[root@~]# mount -t btrfs /dev/xvdc /mnt

次にfstabを編集して/にマウントされるボリュームを現在のLogical Volumeから/dev/xvdcに変更します。

[root@~]# vi /etc/fstab
#/dev/VolGroup00/root   /               ext3    defaults        1 1
/dev/xvdc               /               btrfs   defaults        1 1
LABEL=/boot             /boot           ext3    defaults        1 2
tmpfs                   /dev/shm        tmpfs   defaults        0 0
devpts                  /dev/pts        devpts  gid=5,mode=620  0 0
sysfs                   /sys            sysfs   defaults        0 0
proc                    /proc           proc    defaults        0 0
/dev/xvdb               swap            swap    defaults        0 0

次に現在のルートファイルシステムからデータをコピーします。なお、別ボリュームの/boot、スペシャルファイルを含むディレクトリ等はコピーせず、後ほどディレクトリだけ作成します。

[root@~]# cd /
[root@~]# cp -a {bin,etc,home,lib,lib64,media,misc,opt,root,sbin,selinux,srv,tftpboot,u01,usr,var} /mnt
[root@~]# mkdir /mnt/{boot,dev,mnt,proc,sys,tmp}

次にKernelをビルドしたディレクトリに移り、今一度make installを行います。これは、変更したfstabに基づいてinitrdを再構築するためです。また、同時にgrub.confも適切に編集してくれます。

[root@~]# cd /var/opt/btrfs-unstable/
[root@~]# make install

これでリブートします。起動すると/に/dev/xvdcがマウントされ、Btrfsがルートファイルシステムとなります。

[root@~]# mount
/dev/xvdc on / type btrfs (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/xvda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

without comments

Written by 中嶋 一樹

6月 21st, 2011 at 9:14 am

Posted in Uncategorized

Tagged with ,

Leave a Reply