2007-10-30
coLinuxでLVM
LVM使用までのまとめ。
- カーネルのコンパイル
- LVMのインストール
- イメージファイルの用意
- ファイルシステムの作成まで ■ 物理デバイス(PV)の登録
インストールしたときに入っているカーネルでは、LVMがサポートされていませんでした。なので、LVMのサポートを有効にして、カーネルのコンパイルをする必要がありました。カーネルのコンパイル自体は初めてでしたが、こちらのページの解説とおりにやることでコンパイルすることが出来ました。自分用の備忘も兼ねてということで手順は書いていますが、コンパイル自体の説明はこちらのページを参照されるのが良いと思います。
■ カーネルのソースを取得初めに、コンパイルするためのカーネルソースと、coLinux用のパッチを取得します。注意する点としては、coLinuxのパッチをlinuxカーネルのバージョンと合わせることぐらいです。
#僕はカーネルの2.6.11を選びましたが、特に深い意味はありません。
$ cd /usr/src/ $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.11.tar.gz $ wget http://downloads.sourceforge.net/colinux/coLinux-0.6.4-src.tar.gz?modtime=1151786092& $ tar xvzf linux-2.6.11.tar.gz $ tar xvzf coLinux-0.6.4-src.tar.gz■ coLinux用のパッチをあてる
$ cd /usr/src/linux-2.6.11 $ patch -p1 < ../coLinux-0.6.4/patch/linux■ 設定ファイルのコピー
$ cd /usr/src/linux-2.6.11 $ cp ../coLinux-0.6.4/conf/linux-config ./■ LVMを有効にする
$ make menuconfig
上記コマンド発行後、組み込むモジュールなどを指定する画面が起動するので、「Load an Alternate Configuration File」でlinux-configを読み込み、「Device Drivers --->」→「Multi-device support (RAID and LVM) --->」の順に進み、「Multiple devices driver support (RAID and LVM)」と「Device mapper support」を有効にします。
これで、LVMに必要なモジュールが取り込まれます。ここまできたら、コンパイルの準備完了です。
$ cd /usr/src/linux-2.6.11 $ make-kpkg --revision=colinux-2.6.11-1 kernel_image kernel_headers $ make vmlinux $ mv /lib/modules/2.6.11-co-0.6.4/ /lib/modules/2.6.11-co-0.6.4.old $ cd /usr/src $ dpkg -i kernel-image-2.6.11_colinux-2.6.11-1_i386.deb
で、作成された/usr/src/linux-2.6.11/vmlinuxをcoLinuxをインストールしたフォルダにあるそれと差し替えます。 coLinuxを再起動して問題なければ、カーネルの再構築は完了です。ちなみに、カーネルのコンパイルは30分くらいかかりました。
apt-getで必要なパッケージを取得します。
$ apt-get install lvm2
これでLVMが使えるようになっているはずです。
記憶装置として使うためのイメージを必要なだけ作成 or 取得します。
■ イメージファイルの取得僕は、こちらのサイトが公開している2Gのイメージを2つ用意しました。自分で作りたいかたは、こちらを参考にすれば良いと思います。
■ 設定ファイルの編集新たに使用するイメージファイルをcoLinuxの設定ファイル(xmlファイル)に追加します。
<!-- 既存の設定 --> <block_device index="0" alias="hda1" path="\DosDevices\c:\coLinux\root_fs" enabled="true" /> <block_device index="1" alias="hda2" path="\DosDevices\c:\coLinux\swap_256Mb" enabled="true" /> <!-- 既存の設定 --> <!-- ここを追加 --> <block_device index="2" alias="hda3" path="\DosDevices\c:\coLinux\hda3" enabled="true" /> <block_device index="3" alias="hda4" path="\DosDevices\c:\coLinux\hda4" enabled="true" /> <!-- ここを追加 -->
編集が終わったら、coLinuxを再起動します。
LVMを使用するには、まず始めにパーティションを物理デバイス(Physical Volume)として登録しなければなりません。その場合、使用するパーティションのパーティションIDを「Linux LVM」に指定する必要があるのですが、coLinuxではその必要はないようです。この辺はたぶんcoLinuxのイメージファイルの扱いを知る必要があると思うのですが、それをいま追求してもあれなので、とりあえず気にしません。いきなりイメージファイルを物理デバイスとして登録します。
$ pvcreate /dev/hda3 /dev/hda4 Physical volume "/dev/hda3" successfully created Physical volume "/dev/hda4" successfully created■ ボリュームグループ(VG)の作成
ボリュームグループ(Volume Group)は仮想的なハードディスクみたいなものです。このあと、仮想的なパーティションをボリュームグループから切り出して、実際に使用するイメージです。ボリュームグループは1つ以上のPVから作成することができます。また、後からボリュームグループに物理ボリュームをを追加することも出来ます。
$ vgcreate vg_test /dev/hda3 /dev/hda4 Volume group "vg_test" successfully created■ 論理ボリューム(LV)の作成
ボリュームグループから、論理ボリューム(Logical Volume)を作成します。論理ボリュームは仮想的なパーティションです。この上にファイルシステムを作成したりします。ここでは、5MバイトのLVを作成してみます。
$ lvcreate -L5M -ntest vg_test Rounding up size to full physical extent 8.00 MB Logical volume "test" created
デフォルトのPhysicalExtentSize(LVMで扱うデータの最小構成で、ファイルシステムのブロックサイズのようなものです。VG作成時に指定することができます。)が4Mバイトとなっているので、8MバイトのLVが作成されています。
■ ファイルシステムの作成論理ボリューム(LV)上にファイルシステムを作成してみます。
$ mkfs.ext3 /dev/vg_test/test mke2fs 1.27 (8-Mar-2002) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 2048 inodes, 8192 blocks 409 blocks (4.99%) reserved for the super user First data block=1 1 block group 8192 blocks per group, 8192 fragments per group 2048 inodes per group Writing inode tables: done Creating journal (1024 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 34 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
で、仕上げにこれを/root/lvm_testにマウントしてみます。
$ mount -t ext3 -o noatime /dev/vg_test/test /root/lvm_test
LVがマウントされていることを確認します。
$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda1 4127424 2547380 1370380 66% / cofs0 52428092 33682664 18745428 65% /mnt /dev/vg_test/test 7931 1043 6479 14% /root/lvm_test
ここまででLVMが問題なく使用できることを確認できました。LVM自体の話しだと、他にも設定ファイルの編集だとかでいろいろあるのですが、それは検索すればすぐ出てきますので、ひとまずはここまでをまとめておきました。
カーネルのコンパイルは予想していたよりもあっさりいったのですが、coLinuxの起動時に以下のようなエラーが出て大変な目にあいました。
C:\coLinux>colinux-daemon.exe -c colinux.xml Cooperative Linux Daemon, 0.6.4 Compiled on Mon May 29 22:19:09 2006 mapping cobd0 to \DosDevices\c:\coLinux\root_fs mapping cobd1 to \DosDevices\c:\coLinux\swap_256Mb mapping cobd2 to \DosDevices\c:\coLinux\fs_2048Mb mapping cofs0 to \DosDevices\C: colinux: error, expected gcc version 3.4.x, got 3.3.x error initializing daemon: exit code 88669c14 daemon: error - CO_RC_ERROR_COMPILER_MISMATCHED, line 423, file colinux/user/daemon.o (67)
こちらの日記によると、
ということらしいです。へー。colinux-daemon.exeが、自分自身をコンパイルしたgccのバージョンとvmlinuxのそれを比べ、違いがあるとエラーを表示して起動失敗となる模様。