本文 |
http://www.microsoft.com/downloads/details.aspx?familyid=12cb3c1a-15d6-4585-b385-befd1319f825&displaylang=en
http://funmoco.seesaa.net/article/51419020.html
http://ja.wikipedia.org/wiki/DRBD
http://www.atmarkit.co.jp/flinux/special/drbd02/drbd02b.html
http://sourceforge.net/project/showfiles.php?group_id=108475
http://as-is.net/blog/archives/001191.html
http://lab.hde.co.jp/2008/05/centos-iscsi.html
http://www.hijiki.net/archives/000255.html
http://mitty.jp/pc/networkboot/
http://bird-memo.seesaa.net/article/36362388.html
#
# 全体の流れ
#
# storage serverをsoftware RAID LVMにて作成。
# iscsiのtargetを作成。(storage)
# boot用のtftp serverとdhcp serverを構築。(storage)
# wmware serverの領域を作成。target公開。
# vmware server(vm.local)をiscsi経由でインストール。
# iscsi boot用のkernelとinitrdの修正と配置。
# vmwareのインストール。
#
#
# tftpのインストール
#
yum install tftp-server tftp
chkconfig tftp on
/etc/init.d/xinetd reload
#
# dhcpのインストール
#
yum install dhcp
cp -pi /usr/share/doc/dhcp*/dhcpd.conf.sample /etc/dhcpd.conf
>>> vi /etc/dhcpd.conf
# http://www.linux.or.jp/JM/html/dhcp2/man5/dhcpd.conf.5.html
ddns-update-style interim;
ignore client-updates;
subnet 192.168.1.0 netmask 255.255.255.0 {
filename "linux-install/pxelinux.0";
next-server "192.168.1.248"; # これがないとbootできなかった。
# --- default gateway
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option nis-domain "systemix.local";
option domain-name "systemix.ne.jp";
option domain-name-servers 192.168.1.3;
option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;
range dynamic-bootp 192.168.1.101 192.168.1.200;
default-lease-time 21600;
max-lease-time 43200;
# we want the nameserver to appear at a fixed address #host ns {
# next-server marvin.redhat.com;
# hardware ethernet 12:34:56:78:AB:CD; # fixed-address 207.175.42.254; #}
}
<<<
chkconfig dhcpd on
/etc/init.d/dhcpd start
#
# install用boot imageの配置
#
mkdir -p -m 755 /tftpboot/linux-install/{centos5.2,pxelinux.cfg}
cd /tftpboot/linux-install
cp -pi /usr/lib/syslinux/pxelinux.0 ./
cd centos5.2
wget ftp://ftp.riken.jp/Linux/centos/5.2/os/i386/images/pxeboot/vmlinuz
wget ftp://ftp.riken.jp/Linux/centos/5.2/os/i386/images/pxeboot/initrd.img
cd ../pxelinux.cfg
>>> vi default
default centos5.2
prompt 1
timeout 15
label centos5.2
kernel centos5.2/vmlinuz
append load initrd=centos5.2/initrd.img noipv6 devfs=nomount
<<<
#
# iSCSI対応boot imageの作成
#
# initiatorが入っていない場合はinstall
>>> yum install iscsi-initiator-utils
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
iscsi-initiator-utils i386 6.2.0.868-0.7.el5 base 550 k
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 550 k
Is this ok [y/N]: y
<<<
# 対象serverがPAE kernelのためインストール
>>> yum install kernel-PAE-2.6.18-92.el5.i686
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
kernel-PAE i686 2.6.18-92.el5 base 14 M
Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 14 M
Is this ok [y/N]: y
<<<
# インストールした先のkernelとinitrdをmountして持ってくる
# http://www.linux.or.jp/JM/html/GNU_cpio/man1/cpio.1.html
cp -pi <install dev mount> ./
cp -pi
mkdir -m 755 sysroot && cd sysroot
# typeの確認
gunzip -c ../initrd-2.6.18-92.el5PAE.img | file -
# 展開
gunzip -c ../initrd-2.6.18-92.el5PAE.img | cpio -ic
# 必要なコマンド
>>>
ip
インターフェイス操作用
dhclient
IPアドレス取得用
実際にはdhclient-scriptで設定
iscsid
NETLINKソケット経由でiSCSI制御用LKMと通信する。(嵌り所多いので以下にmemo)
以下のディレクトリが必要
/var/lock/iscsi /var/run /var/lib/iscsi/{ifaces,isns,nodes,send_targets,slp,static}
nss関連のライブラリも必要かも(間接的に呼ばれてる)
/etc/passwdが必要(rootエントリだけで良い)
/etc/iscsi/{iscsid.conf,initiatorname.iscsi} も必要
iscsiadm
iscsidとの通信用
<<<
# 依存ライブラリの判定
>>> ldd /sbin/ip /sbin/dhclient /sbin/iscsid /sbin/iscsiadm | sort | \
perl -ne 'if (/^\s+/) { s/\s+\(.+\)//; print; }' | uniq
/lib/ld-linux.so.2
/lib/libc.so.6
/lib/libresolv.so.2
linux-gate.so.1(with in kernel)
<<<
# 依存カーネルモジュール
>>>
# network
e1000.ko
# iSCSI
sd_mod.ko
scsi_mod.ko
scsi_transport_iscsi.ko
libiscsi.ko
iscsi_tcp.ko
# LKM(FS用)
# とりあえずext3で使いたい場合は以下
jbd.ko
ext3.ko
<<<
echo '/sbin/ip
/sbin/dhclient
/sbin/iscsid
/sbin/iscsiadm
/lib/ld-linux.so.2
/lib/libc.so.6
/lib/libresolv.so.2
/lib/modules/2.6.18-92.el5PAE/kernel/drivers/net/e1000/e1000.ko
/lib/modules/2.6.18-92.el5PAE/kernel/drivers/scsi/sd_mod.ko
/lib/modules/2.6.18-92.el5PAE/kernel/drivers/scsi/scsi_mod.ko
/lib/modules/2.6.18-92.el5PAE/kernel/drivers/scsi/scsi_transport_iscsi.ko
/lib/modules/2.6.18-92.el5PAE/kernel/drivers/scsi/libiscsi.ko
/lib/modules/2.6.18-92.el5PAE/kernel/drivers/scsi/iscsi_tcp.ko' | cpio -pmd .
# NETLINKソケット経由でiSCSI制御用LKMと通信する。(嵌り所多いので以下にmemo)
# 以下のディレクトリが必要
# nss関連のライブラリも必要かも(間接的に呼ばれてる)
mkdir -p -m755 var/lock/iscsi var/run var/lib/iscsi/{ifaces,isns,nodes,send_targets,slp,static}
# /etc/passwdが必要(rootエントリだけで良い)
echo 'root:x:0:0:root:/root:/bin/nash' > etc/passwd
# /etc/iscsi/{iscsid.conf,initiatorname.iscsi} も必要
echo '/etc/iscsi/iscsid.conf
/etc/iscsi/initiatorname.iscsi' | cpio -pmd .
# initの修正
cp -pi init init.orig
>>> vi init
# デバイス名の固定 http://www.jp.redhat.com/support/faq/data/rhel/0009.html
<<<
>>> diff -u init.orig init
--- init.orig 2008-10-21 19:43:20.000000000 +0900
+++ init 2008-10-21 19:50:04.000000000 +0900
@@ -80,7 +80,7 @@
echo Scanning and configuring dmraid supported devices
resume LABEL=SWAP-sda2
echo Creating root device.
-mkrootdev -t ext3 -o defaults,,ro sda3
+mkrootdev -t ext3 -o defaults,ro /dev/sda3
echo Mounting root filesystem.
mount /sysroot
echo Setting up other filesystems.
<<<
find . > ../lst
>>> vi ../lst
# . と 先頭の ./を取り除く
<<<
cat ../lst | cpio --quiet -c -o | gzip -c > ../initrd-2.6.18-92.el5PAE.img
chcon root:object_r:tftpdir_t ../initrd-2.6.18-92.el5PAE.img
cp -pi ../initrd-2.6.18-92.el5PAE.img /tftpboot/vm-boot/
#
# iscsi boot用tftp領域作成
#
find /tftpboot/vm-boot/
/tftpboot/vm-boot/
/tftpboot/vm-boot/vmlinuz-2.6.18-92.el5PAE
/tftpboot/vm-boot/initrd-2.6.18-92.el5PAE.img.orig
/tftpboot/vm-boot/pxelinux.0
/tftpboot/vm-boot/initrd-2.6.18-92.el5PAE.img.bk
/tftpboot/vm-boot/initrd-2.6.18-92.el5PAE.img.bk081021
/tftpboot/vm-boot/pxelinux.cfg
/tftpboot/vm-boot/pxelinux.cfg/default
/tftpboot/vm-boot/initrd-2.6.18-92.el5PAE.img.bk081021-2
/tftpboot/vm-boot/initrd-2.6.18-92.el5PAE.img
>>> cat /tftpboot/vm-boot/pxelinux.cfg/default
default centos5.2
prompt 5
timeout 15
label centos5.2
#kernel centos5.2/vmlinuz
#kernel vmlinuz-2.6.18-92.el5PAE ro root=LABEL=/
kernel vmlinuz-2.6.18-92.el5PAE
#append load initrd=centos5.2/initrd.img noipv6 devfs=nomount text
append load initrd=initrd-2.6.18-92.el5PAE.img
<<<
[参考] ========================================================
■[unix][tips] PXEでiSCSI boot
iSCSI SAN bootはHBAが高い、使用できるハードウェアが限られる等あるのでPXE経由でiSCSI BOOT出来るように頑張ってみた。
InitiatorとしてはLinux-iSCSIはもうメンテされてないし、色々面倒なのでOpen-iSCSIを使用。なお、CentOS5にはiscsi-initiator-utilsとして入っている。
iSCSI Target設定
iSCSI TargetはiSCSI Enterprise Target等を使って適当にでっち上げる。
モジュールをビルド、インストールはCentOS5等だと特に問題なく可能。
最終的には専用のストレージ使うにしろテストにはこれで十分。
設定は以下の様に /etc/ietd.conf に追記。
最低限の設定はIQNとブロックデバイスの割り当てを記述するだけ。
ブロックデバイスの代わりにファイルも使えたりもする。
Target iqn.sample.target0
Lun 0 Path=/dev/sdaXX
Target iqn.sample.target1
Lun 0 Path=/dev/sdaYY
で以下の通り起動、至ってシンプル。
# /etc/init.d/iscsi-target start
これでTargetは準備完了。
確認は以下の様な感じで可能。
loginした時点で/dev/sdXのブロックデバイスとして見えるはず。
# iscsid
# iscsiadm -m discovery -t sendtargets -p <target ip>
# iscsiadm -m node -T <target iqn> -p <target ip> --login
この領域にOSを入れる必要があるが、CentOS5はiSCSI領域に直接標準のインストーラからインストール可能。面倒な場合は
他のホストでmountしてrestoreしたりそのままddするのも良い。
iSCSI Initiator設定
こっちがメイン。
方針としてパッケージの再コンパイル等は行わずにディストリビューション(この場合CentOS)で配布されているバイナリだけを使用する。(sharedバイナリのまま使用)
システムは作ったら終わりというわけでは無いので、メンテナンスに掛かるコストは少なければ少ないほど良いし。
ということで起動用initrdの準備。昔はext2だったが最近はcpioで固めた物がgzipされている。
全部最初から作るよりは、既に入っているinitrdを展開して追加、変更した後再packするのが楽。要はmkinitrdのやっていることを代わりにやるだけ。
また、手の込んだことをやる場合はbusybox等を使っている人も居るようだが、最近はそこまで領域の節約をする必要が無いのと、上記理由でupdateに追従し易くするため、必要なライブラリ、バイナリを直接コピーして使うことにした。
必要なライブラリは使いたいバイナリをlddして特定。(LKMはlsmod等)巨大なlibc.soが間違いなくinitrdに入ることになるが気にしない。
最低限必要なバイナリは以下(ライブラリは適宜必要な物を追加)。
debugしたい場合はstraceやらbashなども入れておくと便利。
ip
インターフェイス操作用
dhclient
IPアドレス取得用
実際にはdhclient-scriptで設定
iscsid
NETLINKソケット経由でiSCSI制御用LKMと通信する。(嵌り所多いので以下にmemo)
以下のディレクトリが必要
/var/lock/iscsi /var/run /var/lib/iscsi/{ifaces,isns,nodes,send_targets,slp,static}
nss関連のライブラリも必要かも(間接的に呼ばれてる)
/etc/passwdが必要(rootエントリだけで良い)
/etc/iscsi/{iscsid.conf,initiatorname.iscsi} も必要
iscsiadm
iscsidとの通信用
LKM(Ether用)
e1000.ko,e100.ko 等々使ってるEther次第(ここではe1000を使用)
LKM(iSCSI用)
依存関係によってinsmodに転けるのでロードする順番に注意
sd_mod.ko
scsi_mod.ko
scsi_transport_iscsi.ko
libiscsi.ko
iscsi_tcp.ko
LKM(FS用)
とりあえずext3で使いたい場合は以下
jbd.ko
ext3.ko
initrd内部のinitは以下のような感じ。モジュールをロードし始める所より下を以下のスクリプトに置き換える。(echo "Loading xxxxx module"のあたり)
直接IPを記述するようにしているが、dhcpのオプションで色々なパラメータは渡せるので適当に使わなそうな物を使ってIQNやTargetのIPを渡すと、複数のホストで共通のinitrdが使用できる。
##Network初期化
insmod /lib/e1000.ko
ip -o link set dev eth0 up
dhclient -lf /var/run/dhcpc.lease -pf /var/run/dhcpc.pid
##iSCSI+FS初期化
insmod /lib/jbd.ko
insmod /lib/ext3.ko
insmod /lib/scsi_mod.ko
insmod /lib/sd_mod.ko
insmod /lib/scsi_transport_iscsi.ko
insmod /lib/libiscsi.ko
insmod /lib/iscsi_tcp.ko
iscsid
iscsiadm -m discovery -t sendtargets -p <target ip>
iscsiadm -m node -T <target iqn> -p <target ip> --login
##Rootマウント
stabilized --hash --interval 250 /proc/scsi/scsi
mkblkdevs
mkrootdev -t ext3 -o defaults,ro /dev/sda1
mount /sysroot
setuproot
switchroot
/dev/sdaに見えてる通り以降はローカルディスクから起動したのと何ら変わりなく使用可能。
ブロックサイズの性質上大きめのパケットが流れるので、Jumbo Frameが使える場合は有効にしておくとppsが格段に下がって良い感じになる。
DHCPとPXEの設定については色々な所で見かけるので割愛。
なおNFSROOTでのPXE BOOTも同様の方法で可能。iSCSIの代わりにNFSモジュールをロードしてmount.nfsでそのままmountするだけ。
カーネル組み込みのNFSROOTはあまりメンテされていないようでよく問題が起きてるし、updateのコスト考えるとこっちの方が楽な感じ。
|