RAID+LVM (2/2)

前回 からの続き. md アレイ上に LVM を設定し,ファイルシステムを作成する.


LVM の設定

EtchインストーラでインストールしたシステムでLVMを使うには,単にlvm2パッケージをapt-getすれば良い.

# apt-get install lvm2

作成したmdアレイをPVとし,それを使ってVGを作る.

# lvm pvcreate /dev/md1
# lvm vgcreate PeteVG01 /dev/md1

# lvcreate -n PeteLV_SWAP --size 4G      PeteVG01     (swap 用)
# lvcreate -n PeteLV_ROOT --size 10G     PeteVG01     (/ 用)
# lvcreate -n PeteLV_VAR  --size 10G     PeteVG01     (/var 用)
# lvcreate -n PeteLV_HOME --size 20G     PeteVG01     (/home 用)
# lvcreate -n PeteLV_STORAGE --size 188G PeteVG01     (残り)

md1上に0x8e (Linux LVM) タイプのパーティションを作ったほうが良いのかとも思ったが, Web上の事例の多くはmdアレイをPVにしているようだ.

ファイルシステムの設定

作成したLVの上にファイルシステムを作成していく. まずはSwap領域を作成し,有効化する.

# mkswap -L SWAP /dev/PeteVG01/PeteLV_SWAP
# swapon /dev/PeteVG01/PeteLV_SWAP

その他のファイルシステムを作成する.

# mkfs.ext3 -L ROOT    PeteLV_ROOT
# mkfs.ext3 -L VAR     PeteLV_VAR
# mkfs.ext3 -L HOME    PeteLV_HOME
# mkfs.ext3 -L STORAGE PeteLV_STORAGE

上記のファイルシステムをシステム起動時にマウントするようにfstabを編集する.

# vi fstab
....
LABEL=SWAP      none            swap    sw                      0       0
LABEL=ROOT      /               ext3    defaults,errors=remount-ro,noatime      0       1
LABEL=BOOT      /boot           ext3    defaults,errors=remount-ro,noatime      0       2
LABEL=VAR       /var            ext3    defaults,noatime        0       2
LABEL=HOME      /home           ext3    defaults,noatime        0       2
none            /tmp            tmpfs   defaults,size=256m      0       0
none            /mnt/ftp        tmpfs   defaults,size=256m      0       0

ラベル名ベースの設定をしてみたが,これだとこのディスクを別のシステムにマウントしたときに名前空間が衝突しそうだ.

ファイルシステムの中身の書き換え

現在はLABEL=BOOTパーティションを/として使っているので,その内容をLABEL=ROOTLABEL=VARにコピーする. この作業はオンラインでは出来ないので,インストールCDのrescueモードなどを使って行う. rescueモードはmdadmなどのユーティリティを備えており,思いのほか便利だ.

boot: rescue pci=nommconf
...
(snip)
...
sh# mdadm --assemble --scan     (これで md0, md1 が再構築される)
sh# (cp 等でコピー)

LABEL=BOOT の内容も変更し,/boot化する.

sh# mount -t ext3 /dev/md0 /boot

initrdの再構築

RAID上のLVをルートパーティションに指定した場合,ブートプロセスにおいて以下の処理が必要になる.

  1. mdアレイの再構築
  2. LVMの再構築

これらはカーネルイメージのロード以前,すなわち initrdが適切に行う必要がある. Etchがデフォルトインストールするinitrdは両者とも自動的に行ってくれるのだが,mdアレイの再構築に関してはinitrd作成時に存在していたもののみ対象にするようだ. よって,md1作成後にinitrdを再作成する.

# mkinitrd -o /boot/initrd.img-2.6.23-1-486-RAID 2.6.23-1-486

grubの設定

grubの設定も変更する. 具体的には,以下のポイントを修正する.

  • カーネルイメージとinitrdのパス (md0/から/bootに変更になっているため)
  • カーネルパラメタのrootオプションの値

実際のgrubエントリは次のようになる. カーネルのrootオプションにLVを指定するときは,/dev/<VG>/<LV>ではなくて /dev/mapper/<VG>-<LV>としなければうまくいかなかった.

title           Debian GNU/Linux Etch (2.6.23-1-486)
root            (hd0,0)
kernel          /vmlinuz-2.6.23-1-486 root=/dev/mapper/PeteVG01-PeteLV_ROOT ro pci=nommconf VGA=771
initrd          /initrd.img-2.6.23-1-486-RAID

また/boot周辺が大幅に変更されているため,このままではgrubが関連ファイルを見つけられない. 現在の状態を反映させるため,grubを再インストールする. この操作は必ずLABEL=BOOT/bootにマウントして行うこと

# grub-install --root-directory=/ /dev/sda

これで全ての作業が完了したので,あとはシステムをリブートすれば良いはず.