Openfilerを使ってiSCSIなNASを作ってみた。これはその備忘録。
初期状態
サーバ
ML115(初代)
ディスク構成
1TB x 4のHDDで2つの1TBのRAID1を組む。
OS構成
Xenの上に以下のOSを入れている。
- openSUSE 11.0 (Domain-0 x86_64)
- openSUSE 11.0 (Domain-U x86_64)
- WindowsXP (Domain-U HVM i386)
- FreeBSD 7.0 (Domain-U HVM i386)
目的
ディスクボリュームサイズを動的に変更したかったため、
Domain-0側でDomain-U openSUSEの/home用ディスク領域を確保し、NFSでマウント
していた。
NFSマウントの影響でSamba経由のファイル転送やソフトウェアのコンパイルが遅くなるといった問題が出ていた。
iSCSIでディスクを接続したならば、NFSよりもオーバーヘッドが減ってディスクI/O性能が上がると思い、ディスクのiSCSI化を計画した。
また、現状ではRAID1 1TB x 2という使いづらい構成なので、iSCSIを提供するNASサーバでRAID6 4TBを組み、将来に備えることとした。
準備
ハードウェア
- NEC Express5800/110Ge
- NASサーバ用に用意したサーバ
- 安サーバなのにベイが多いため購入(5inch x 2, 3.5inch x 2, shadow 3.5inch x 4)
- NTT-X Storeにて12,800円
- Western Digital WD10EADS x 4
- Sofmap 秋葉原本店にて 7,780 x 4 = 31,120円
- Western Digital WD10EACS x 2
- 現在使用中のディスクを流用。4プラッタ品(00ZJB0)
- A-DATA C801 4GB
- NASアプライアンスのブート用
- 安いUSBメモリならなんでも良かったので購入。パソコンハウス東映にて880円
- あとでUSBメモリまとめWikiを見て性能の低さに愕然。今は反省している。
- Serial ATAケーブル 60cm x 4
- HDD増設に必要と思い購入
- 110Geにケーブルが同梱されていたため、実際は不要だった…
追記(2008/12/25)
元々付いている電源ではSerial ATA HDD用の電源が4台分しかない。
6台積むには電源の入れ替えが必要だった。
今回は余っていたSeasonicの550W電源を流用している。
ソフトウェア
フリーのNAS用アプライアンスとして
FreeNASと
Openfilerを見つけたが、
Openfilerの方が
若干性能が高いようなのでこちらを採用。
簡単な比較は以下の通り。
|
Openfiler |
FreeNAS |
|---|
ベースOS |
Linux(rPath Linux?) |
FreeBSD 6.4 |
|---|
RAID |
0,1,5,6 |
0,1,5 |
|---|
プロトコル |
NFS,SMB,iSCSI |
NFS,SMB,AFS,iSCSI |
|---|
ソフトウェア
OpenfilerはHDDインストールが前提となっているため、USBメモリへインストールする場合は工夫が必要。
ここと
ここを参照。以下はそれらの情報をパクったもの。
インストール
- OpenfilerのインストールCDを作成する。
- インストール前にBIOS画面でSATAをdisableする。これによりUSBメモリに/dev/sdaが割り当てられる。
- インストールCDからブート。
- ブートプロンプトで "expert" と入力。USBメモリを認識させるため。
- USBメモリにインストール。進行が遅いがフラッシュメモリなので仕方ない。
- インストール終了後にリブートするが、次もインストールCDからブートさせる。
- ブートプロンプトで "rescue" と入力。
- USBメモリをマウントする。今回は sda1: /boot, sda2: swap, sda3: / としたため、以下のようにした。
# mount /dev/sda3 /mnt/source
# mount /dev/sda1 /mnt/source/boot
- vi等を使えるようにするため、USBメモリ上のファイルシステムへchrootする。
# chroot /mnt/source
- initrdの中身を展開し、initスクリプトを変更する。
# cp /boot/initrd-2.X.X.img /tmp/initrd.gz
# gunzip /tmp/initrd.gz
# mkdir /tmp/a
# cd /tmp/a
# cpio -i < /tmp/initrd
# vi init
initスクリプトには下記の行を追記する。
今回はecho "Loading jbd.ko module"の前に入れてみた。
> insmod /lib/scsi_mod.ko
> insmod /lib/sr_mod.ko
> insmod /lib/sd_mod.ko
> insmod /lib/ehci-hcd.ko
> insmod /lib/ohci-hcd.ko
> insmod /lib/uhci-hcd.ko
> sleep 10
> insmod /lib/usb-storage.ko
> sleep 12
- カーネルモジュールのコピーを行う。
# cd /lib/modules/`uname -r`/kernel/drivers
# cp scsi/scsi_mod.o /tmp/a/lib
# cp scsi/sd_mod.o /tmp/a/lib
# cp scsi/sr_mod.o /tmp/a/lib
# cp usb/storage/usb-storage.o /tmp/a/lib
# cp usb/host/ehci-hcd.ko /tmp/a/lib
# cp usb/host/ohci-hcd.ko /tmp/a/lib
# cp usb/host/uhci-hcd.ko /tmp/a/lib
- initrdの作成。
# cd /tmp/a
# find . | cpio -c -o | gzip -9 > /boot/usbinitrd.img
- grub.confの変更。既存のエントリをコピーし、initrd=の部分だけ変更する。
- リブート。rescureシェルをexitすると自動的にリブートする。
- USBメモリからブートする
Openfiler設定
https://(Openfilerに割り当てられたIP):446/に接続すると管理画面が開く。
俺様証明書なので、Firefox3だと文句を言われるが気にしない。
管理用のユーザ・パスワードはopenfiler, passwordとなっているが、インストール時に設定したrootでも入れてしまう。rootで入った場合はquota設定しかできないので注意が必要。
RAID作成
いまいち使い方が判らなかったので、今回はコンソールからログインしてRAID6のボリュームを作成してしまった。参考にしたのは
ここ。やったことはそのままなので省略。
Volume Group作成
VGを作成しないとディスクを割り当てることすらできない。仕方ないのでRAID6デボリュームに対して手動でpvcreateを実行。Volume Group作成以降はOpenfilerの管理画面から設定。
iSCSIの設定
まずはTarget ConfigurationでiSCSI TargetのTarget IQNを登録。その後、LUN MappingでiSCSI領域を割り当てることになる。
iSCSI領域の確保はAdd Volume(Volumesタグを選択し、右側にあるVolumes Sectionからたどる)にて行う。
Network ACLは必ず作成すること。CHAPはよく判らないので放置した。
とりあえず全領域をiSCSI領域にしてイニシエータと接続させたところ、イニシエータ側で実行したpvcreateでは2TBしか領域確保ができなかった。
泣く泣く2TBのiSCSI領域を作成。残りは後程使う予定。
iSCSIイニシエータ側設定
openSUSEのyastにあるiSCSIイニシエータ設定をいじれば、簡単に接続できる。
CHAPまわりは判らなかったので放置。
fstab
ここを参考にして、
とりあえずこんな感じで書いている。(iSCSIデバイス/dev/sda1上にVolume Group: VG1, Logical Volume: LV1を作成したものと想定)
/dev/mapper/VG1-LV1 /data ext3 acl,user_xattr,_netdev 1 2
iSCSIの切断
ここを参考にする。LVMの処理も行ったほうが良い?(
このあたり)
Last updated
2008.12.25 00:06:43