NTT-X store にて2台で2万円で買ってしまったHP Proliant ML115G5 ( HP-ProLiant-ML115 G5まとめwiki - トップページ ) の FakeRAID (BIOS RAID) を使って RAID5 のストレージを Gentoo 上に構築した記録.

用意するもの

取り付け

まずは,普通にディスクを取り付けて起動して, BIOS から 取り付けたディスクで RAID5 を構成するように設定する.HP ProLiant ML115 Server series - Manuals (guides, supplements, addendums, etc) - HP Business Support Center の nForce Software for Linux MediaShield User’s Guide をもとにBIOS と RAID BIOS を設定をする.

この状態で起動すると,普通に /dev/sdb,/dev/sdc,/dev/sdd として見えるので,kernel の作り直しや必要なドライバ類のセットアップを行う.

kernel とドライバの用意

FakeRAID に必要な sys-fs/dmraid,kernel 構築用に genkernel,パーティション設定用に sys-apps/partedsys-fs/multipath-tools ( kpartx 用 )をそれぞれ emerge しておく.

RAID5 対応 kernel を構築するために,http://people.redhat.com/heinzm/sw/dm/dm-raid45/ から パッチを持ってきて当てる.

試した時点(2010/01/20 )では2.6.30 用のパッチしかなく Gentoo 10.1 の kernel は 2.6.31 (ACCEPT_KEYWORD="~amd64"していると 2.6.32) なので問題ないかどうかは不明.実際 drivers/md/Makefile へのパッチがちゃんと当たらなかったり,2.6.32 では block デバイスIO に関して変更があるため, dm-raid45.c の bio_barrier(bio)bio_rw_flagged(bio, BIO_RW_BARRIER) と書き換えないとコンパイルすら通らなかったりするので適宜修正する.

genkernel が dmraid 用に組み込むモジュールの一覧 (/usr/share/genkernel/arch/x86_64/modules_load) を以下のように変更して,dm-raid45 を起動時に読み込むようにする.

MODULES_DMRAID="dm-mod dm-mirror dm-crypt dm-raid45"

# genkernel --dmraid --multipath --menuconfig all

として,kernel を構築する.--dmraid --multipathdmraidkpartx を組み込むようにするために付ける.--menuconfig は先に当てた dmraid-45 のモジュールを作るために menuconfig を呼び出すために付ける.

menuconfig の画面になったら Device Drivers ---> Multiple devices driver support (RAID and LVM) と進んで,一番下の RAID 4/5 target (EXPERIMENTAL) にチェックを入れる.その他は RAID/NVRAID with dmraid 参照.

また,今回の構成では 2TB を超えるので GPT サポートを有効にする.

File systems  
  --->  Partition Types  
    ---> Advanced partition selection 
      ---> EFI GUID Partition support 

出来上がった kernel に合わせて適宜 grub.conf を書き換えて,起動する.

パーティションとフォーマット

ここまでの作業が成功していると,/dev/mapper/nvidia_djbdafbe というデバイスが見えているようになるので,パーティションを切り FS を設定する.nvidia_ の後の文字列は個体ごとに異なるので,以下では /dev/mapper/nvidia_fakeraid としておく.

今回のように 2TiB を超える場合,fdisk は使えないため #parted /dev/mapper/nvidia_fakeraid で好きなようにパーティションを切る.

注意点としては,パーティションテーブルに gpt を指定(mklabel gpt)し,parted が ext2 以外 でのフォーマットには対応してないので mkpartfs ではなく mkpart で切るようにする必要がある.そのほかの操作は適宜 help を呼び出すか,GNU parted マニュアル を参照.

パーティションを切ったら,#kpartx -a /dev/mapper/nvidia_fakeraid とすると,/dev/mapper/nvidia_fakeraid1 などのように見えるようになるので普通のHDDと同じようにフォーマットする.(ex. #mkfs.ext4 /dev/mapper/nvidia_fakeraid1)

mount と initrd の修正

フォーマットした領域がひとまず mount できるか確認した後,/etc/fstab に追記するなど,普通の HDD の追加と同じ作業をする. だが,このまま再起動すると dmraid が gpt をサポートして無いため( dmraid cannot handle disks with GPT),起動時に正しく mount するには先ほどのように kpartx -a を呼び出す必要がある.

/usr/share/genkernel/default/linuxrcstartVolumes 後に次のように追加する. kpartx -a /dev/mapper//sbin/dmraid -r -craidname

修正後 #genkernel –dmraid –multipath initramfs して,修正した initrd を再構築して再起動する.

参考資料