USBメモリにopenfilerをインストールする

このまえ、VMwareを使ってDRBDで二台のopenfiler間でのレプリケーションをする環境を試してみましたが(こちら)、今回、実サーバで環境を構築しました。以下のような構成になる予定です。DRBDを使うと基本的には片方のサーバはスタンバイになり、普段はまったく使われないのでもったいないですが。

  • openfilerはUSBメモリから起動
  • サーバ2台でDRBDで同期する
  • 各サーバのHDDはRAID10

手順については↓のサイトを参考にさせていただきました。ありがとうございました。ほとんどそのままですが、いくつかはまった点について追加しました。

わがまま大王@みらにすた - ESXiの相棒「Openfiler」のインストールメモ(iSCSI)

機器

サーバはこんな構成です。ML115は2台で2万円、HDDは1台1万円と安いです。別途SATAケーブルが必要でした。HDD固定用のネジはサーバ筐体にくっついているので不要です。

他に、SATAを無効にした状態でCDからインストールするためにUSB接続のDVDドライブも必要です。

手順

手順自体は長いですが、通常のインストールを行ってから、USBメモリを認識できるようにinitrdを作るだけです。

Openfiler 2.3のISOイメージをダウンロードしてCD-Rに焼きます(64bit版を使いました)。

BIOSの設定で以下の設定を行います。ML115はSATA以外はデフォルトのままでOKでした。

  • SATAを無効にする
  • USB-DVDドライブから起動できるようにする
  • USBメモリから起動できるようにする

USBメモリを接続して起動します。openfilerのブートプロンプトで、USBメモリを認識させるため"linux expert"と入力します。

USBメモリにインストールします。インストーラまかせでよいはずですが、私の環境では以下の点でつまづきました。

  • USBメモリにWindowsパーティションがあるとエラーで先に進まない
  • 自動でパーティションを作成できない

1点目はWindowsではUSBメモリのパーティションを削除できないようだったので、Ubuntuから削除しました。2点目は、結局手動でパーティションを作成しました。

インストール後に再度CDからブートさせ、openfilerのブートプロンプトで"linux rescue"と入力します。ブート中にシステムをマウントするか聞かれたらNoを選択します。

シェルからUSBメモリをマウントします。

mkdir /mnt/source/boot
mount /dev/sda2 /mnt/source
mount /dev/sda1 /mnt/source/boot

/mnt/source/bootにあるinitrdをコピーします。

cp /mnt/source/boot/initrd-2.6.26.8-1.0.11.smp.pae.gcc3.4.x86.i686_64.img /mnt/source/tmp/initrd.gz

chrootします。先ほどコピーしたinitrd.gzを展開します。

chroot /mnt/source
gunzip /tmp/initrd.gz
cd /tmp
mkdir /tmp/a
cd /tmp/a
cpio -i < /tmp/initrd

viにて/tmp/a/initを編集します。echo "Loading jbd.ko module" の前に以下の内容を追加します。

insmod /lib/sr_mod.ko
insmod /lib/ohci-hcd.ko
sleep 10
insmod /lib/usb-storage.ko
sleep 12

モジュールをコピーします。

cd /lib/modules/2.6.26.8-1.0.11.smp.pae.gcc3.4.x86.i686/kernel/drivers
cp scsi/sr_mod.ko /tmp/a/lib
cp usb/storage/usb-storage.ko /tmp/a/lib
cp usb/host/ohci-hcd.ko /tmp/a/lib

パッケージに戻して/bootにコピーします。

cd /tmp/a
find . | cpio -c -o | gzip -9 > /tmp/usbinitrd.img
cp /tmp/usbinitrd.img /boot/

grub.confを編集します。

vi /boot/grub/grub.conf

default=1に変更し、0をコピーしてinitrdを"/usbinitrd.img"とします(太字が追加・変更した部分です)。もともとある設定では正常に起動できないので、コピーせずに編集してしまってもよいかもしれません。

default=1

title Openfiler NSA (2.6.26.8-1.0.11.smp.gcc3.4.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.26.8-1.0.11.smp.gcc3.4.x86_64 ro root=LABEL=/1  quiet
        initrd /initrd-2.6.26.8-1.0.11.smp.gcc3.4.x86_64.img

title Openfiler NSA (2.6.26.8-1.0.11.smp.gcc3.4.x86_64) USB
        root (hd0,0)
        kernel /vmlinuz-2.6.26.8-1.0.11.smp.gcc3.4.x86_64 ro root=LABEL=/1  quiet
        initrd /usbinitrd2.img

リブートします。USBメモリから起動するためにCD-Rを取り出しておきます。

ブートするとgrubの選択画面が表示されるのでUSB版を選びます。正常に起動できない場合(kernel panic)には、何かミスがあるので、再度CDから起動して手順を見直します。

正常に起動できた場合には、リブートしてBIOS画面からSATAを有効にします。

起動するとSATAのディスクが/dev/sda-sddとして認識され、USBメモリはsdeになります。ログインしてRAID10の設定を行います。

まずfdiskでパーティションを作成します。

  • スワップ領域:512MB
  • openfiler設定用:256MB(Linux raid auto)
  • openfilerデータ用:残り全部(Linux raid auto)

という構成にしました*1。同じ操作を/dev/sdb-sddまで行います。

RAIDを構築します。

mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[abcd]2
mdadm --create /dev/md1 --level=10 --raid-devices=4 /dev/sd[abcd]3
mdadm --detail --scan >> /etc/mdadm.conf

md0とmd1は、DRBDでopenfilerの設定用とデータ用になるパーティションなのですが、この時点で分けてよいのか、すべてをmd0にしてから分けるのがよいのか、
linuxの知識が乏しくわかりませんでした。

この後のDRBDの設定は、こちらに書いたとおりです。DRBDを使用しない場合には、そのままLVMの設定を行います。

*1: DRBDを使用しない場合にはopenfiler用を分ける必要はありません