2007-10-30

coLinuxでLVM

LVM使用までのまとめ。

  1. カーネルのコンパイル
  2. インストールしたときに入っているカーネルでは、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分くらいかかりました。

  3. LVMのインストール
  4. apt-getで必要なパッケージを取得します。

    $ apt-get install lvm2
    

    これでLVMが使えるようになっているはずです。

  5. イメージファイルの用意
  6. 記憶装置として使うためのイメージを必要なだけ作成 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を再起動します。

  7. ファイルシステムの作成まで
  8. ■ 物理デバイス(PV)の登録

    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のそれを比べ、違いがあるとエラーを表示して起動失敗となる模様。

ということらしいです。へー。
Posted at 02:37 in | WriteBacks (0) | Edit