allister2007さんのブログ
ブログ
覚書-ディスクレスPC
とりあえず、ストレージは束ねる価値があると思った。
各PCに散らばっているPCのディスク引っ張り出して、ひとつにまとめる。
途中から、新しくディスクを買い足していってしまって、なんかなという感じになったが。
束ねる価値があるのは、
・数多けりゃスペック上がるし
・管理?(一個人でそんなこと考えんが)楽だし
・バックアップも簡単だ(一個人でそんな複雑なバックアップが必要となる人に会って見たいが)
ということだからだ!
で、まとめた。
PCはディスクレスな環境になるためネットブートで対応することにした。
■確認した環境
・クライアント ubuntu10.04 desktop,server, ubuntu11.10desktop, windowsXP
・サーバ ubuntu10.04 server, desktop
■行ったこと
・サーバ
serverもdesktopも一緒
・apt-get install iscsitarget dhcp3-server tftp-hpa
・gpxeのダウンロード
・vi /etc/dhcp3/dhcp.conf
if gPXEじゃない (
gPXEを選択
) gPXE だ (
iSCSIブート(iscsi:::0:iqn...........みたいなやつ。iscsitargetの設定を行うときに決定する名前を記入)
)
のやつを設定。DHCPの設定だけど、MAC単位で各PCにたいして行った。
MACの設定は、どっかその辺のやつであるはず。
tftpはDEAMONのところだけconfigいじってたはず。
gPXEはtftpのルート/var/lib/tftprootにおいた。
・iscsitargetの設定
vi /etc/ietd.confを設定すると、ブート時に自動設定する模様。service ietadm restartでも反映可能
とりあえず、つけっぱ想定してる。restartはディスクレスPCに影響ありそうなので次で行う
ietadm --op new --tid=数字 --param Name 名前
(なぜか不思議な規定が叫ばれるiqn.うんたら。適当につける)
ietadm --op new --yid=数字 --lun=0 (以下共通のtidに対して複数のlunを加えていける) --param Path=/ddddd,Type=fileio(またはdiskio)
この/dddddのパスはこの後のクライアントの設定で行う処理の後得られるディスクイメージとうである。
fileioはファイルシステムを介して読みかき?とりあえずメモリキャッシュが聞いてるみたい
diskioは直接書き込み。(hdparm で -tがfileio -Tがdiskioとい認識でよいのだろうか)
基本的に読み速度はfileioのほうが出た。(iscsiを介す)
特に、fileioではランダム読み込み(先読み?のやつ)が強い。
このとき、iscsiで公開したディスクはサーバのファイルシステム上のimgディスク。imgディスクは
dd if=/dev/zero of=/img/test.img bs=4096 count=50000000とかのやつで作った。
こゆのは、fileioでしか設定できないみたい?
diskioで設定したけりゃ、上のPathで/dev/sdaとか/dev/md1とか設定すればよい。
CrystalDiskMarkでGbE上限付近(100MBps/250,000iops)までは確認。書き込みは遅い。
(数MBps)
ただし、iscsiで公開するimgディスクを乗っけてるファイルシステムをマウントするときに、
writebackのオプションをつけるとランダム書き込みが改善された。mount -t ext3 -o data=writeback
(以下普通 ※writebackおぷそんはext2以下ではサポートしていないのかな?)
メモリへの1次キャッシュである。この辺は/etc/sysconfigのvm.XXXXの項目でいじれる。
iscsi経由で、50MBps程度のランダム書き込みが可能となった。
・クライアント
各OSによって対応が異なる。詳しくはhttp://etherboot.org/wiki/sanboot
windows XPのとき
・ネットブートを行うPCで、一度ディスク取り付けて、そこに普通にインストール。
ただし、パーティションは10GB程度に収めて、先頭にあるようにする。(10GB程度に収める理由はなぞ、先頭にするのはイメージディスクとするときにMBRを含めるのが楽なため。むしろ、パーティションが後ろのほうにあったとき、自分はどうやってイメージ化するのかわからない)
・インストールしたディスクから起動して、以下をインストール
・iscsi initiator (上のページで、MS純正のものではない)
・sanboot config (上のページのリンクより。XP 64bitのほうは必要ない感じだった)
・(なぜか自分の場合、MACの設定を主導で行う必要があった)
・シャットダウン。
・UbuntuのライブCDから、PC起動
・ターミナルで
fdisk /dev/sda
:p
ユニット単位と、パーティションの終わりを確認する。
・dd if=/dev/sda of=/適当/イメージディスク名 bs=ユニット単位 count=パーティションの終わり
でディスクダンプ。
自分はこのとき、サーバ側で共有フォルダを設定し(cifs, samba)クライアントでsmbfs取得の
cifsでまうとの、そこに書き込みを行った。(サーバ側でiscsitargetの公開を行うときに少し楽)
以上でクライアントの設定終わりかな?この情報を持って、サーバ設定してやればネットブート。
ただし、BIOS設定で、ブート優先度をネットブートから始まるように設定する必要j。
・ubuntuの場合
・同じように、ディスレスを構築する環境にディスクをとりあえずくっつけてそこにubuntuインストール。
・インストールしたう分津に下記の設定
・etc/initramfs-tool/hooks/iscsi
・etc/initramfs-tool/script/local-top/iscsi
を上記のHPからこぴぺして設定
・apt-get install open-iscsi
・上三つが終わったら
update-initramfs -u
・適当なところで
vi /etc/network/interface の ethの設定をすべてマニュアルにする。ループバックはそのまま
・そのまま、サーバに綱っていれば上と同じようにddでイメージダンプを行う。
サーバの設定を行いリブートで設定終
・flashcashについて
facebookが開発したoss
導入してみて、いまいちスペックがあがってるのかなぞであるのだが、
とりあえず、キャッシュが行われていることは、hdparmとかのベンチを数回行うことで書くにできる。
回数をこなすほど、よいベンチ結果が得られる。
・インストールについて
linux-soruceの入手
・そのsrcフォルダで ・cp /boot/XXXXconfig ./.config
・make oldconfig
・make prepare
・make scripts
・flashcacheのsrcで ・make KERNEL_TREE=(linux-sourceのフォルダを書く)
・src/utilに実行ファイルがあると思う。
多分、こんなんかいていても、数年後これをみて構築しろっていわれたとき、構築できる自身はない
/usr/lib/postgresql/8.3/bin/initdb -D /var/lib/postgresql/8.3/main --encoding=UTF8 --no-locale
touch main/server.crt
usudo openssl genrsa -out server.key 1024
sudo openssl req -new -key server.key -x509 -days 1096 -out server.crt
cp -p /etc/postgresql/8.3/main/server.crt /var/lib/postgresql/8.3/main
cp -p /etc/postgresql/8.3/main/server.key /var/lib/postgresql/8.3/main
chmod 400 /var/lib/postgresql/8.3/main/server.crt
chmod 400 /var/lib/postgresql/8.3/main/server.key
chown postgres: server.*
su postgres
psql
psql> create user name with password 'password';
> create database name;
vi /etc/postgres/9.1/main/pg_hpa.conf
host all IP/24 md5
sudo apt-get install dhcp3-server tftpd-hpa nfs-common syslinux
vi /etc/dhcp/dhcp.conf
filename "/boot/pxelinux.0"
/usr/lib/syslinux/menu.32c
/usr/lib/syslinux/pxelinux.0
を使って次のように構築
/var/lib/tftpboot/ pxelinux.0
syslinux/menu.32c
pxelinux.conf/default
Fedora16x86_64-DVD/
vi pxelinux.conf/default
default syslinux/menu
label Fedora16x86_64-DVD
kernel Fedora16x86_64-DVD/vmlinz
append initrd=Fedora16x86_64-DVD/initrd.img netboot=nfs
nfsroot=192.168.3.20:/....
vmlinuzとinitrd.imgはFedora16x86_64-DVDのisoファイルから取り出す。
nfsrootにはisoファイル中のデータを丸々コピーしたものが含まれている。
http://docs.cslabs.clarkson.edu/wiki/SPICE
sudo apt-get install build-essential autoconf git-core
sudo apt-get install libtool liblog4cpp5-dev libavcodec-dev libssl-dev xlibmesa-glu-dev libasound2-dev libpng12-dev libfreetype6-dev \
libfontconfig1-dev libogg-dev libxrandr-dev kvm libgcrypt-dev libsdl-dev libnss3-dev libpixman-1-dev libxfixes-dev libjpeg8-dev \
libsasl2-dev python-pyparsing
get tar.gz and compile
spice-protocol
spice
celt
qemu-kvm
sudo vi /etc/default/grub
configure irqpoll
GRUB_CMDLINE_LINUX_DEFAULT="irqpoll"
sudo grub-install
https://wiki.ubuntulinux.jp/UbuntuTips/Others/BootOptions
dd if=/dev/zero seek=xx count=xx bs=xx >>
②パーティションを広げる。
sfdisk -d > diskDump
vi diskDump
パーティションを広げる。
sfdusk -f < diskDump
③ファイルシステムを広げる。
ループデバイスにマッピング
losetup /dev/loop[0-9]
これで、/dev/loop0とかがブロックデバイスとして振舞う。
パーティションごとにマッピング
kpartx -a /dev/loop0
これで /dev/mapper/loop0p1 とかにイメージファイルの中にあった
パーティションが個別に扱える。つまり
parted で見えた、p1が/dev/mapper/loop0p1と同じ。
ファイルシステムの拡張
e2sfck -f /dev/mapper/loop0p1
謎。調べてない。やれっていわれた。
resize2fs /dev/mapper/loop0p1
sudo vi /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:1f:93:3e", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
で固定
MAXアドレスは
dmesg | grep eth1
とかで引っ掛けて適当に見つける
Sometimes it's usefull to create sparse files on Linux. For example,
when you're creating Xen hard disk images, creating a sparse file will
take up much less space then creating a fully allocated file, and will
only start taking up space as it fills up
1dd if=/dev/zero of=filename.img bs=1k seek=128M count=1
This will create a sparse file of 128GB. Adjust the seek parameter to get the file size that you want.
If you need to find out the real space that the file is taking up, use du -lah
1# du -lah
220K ./filename.img
328K .
Using ls will only show you how big the file is supposed to beview p
1#ls -lah
2total 36K
3drwxr-xr-x 2 root root 4.0K Jun 5 13:59 .
4drwxr-xr-x 3 root root 4.0K Jun 5 13:59 ..
5-rw-r--r-- 1 root root 129G Jun 5 13:59 filename.img
Linux2.6以降では、mdadm --create /dev/md* で指定したのと同じデバイス番号で認識するとは限りません。また標準では /dev/md/* にエイリアスが作られここから参照することを推奨されます。
RAIDデバイスを/dev/md*として扱いたい場合これでは面倒なので、mdadm.confに情報を記録します。既に示した
# mdadm --detail --scan>>/etc/mdadm/mdadm.confが、そのための措置それです。mdadm.confは必ず手動で確認し、現在の構成と一致しているか確認してください。
mdadm.confにARRAYの設定が1つでもある場合、記述されたARRAYに構成情報と一致しないデバイスやそもそも記述されないデバイスはカーネル起動時にRAIDデバイスとして認識しません。ARRAYの設定が1つもない場合は、パーティションタイプfdになっているデバイスはすべて認識されます。
mdadm.conf はinitramfsに含まれますので、mdadm.confを書き換えたら initrd.img を更新します。Ubuntu/Debianでは次のコマンドです。
# update-initramfs -uRAIDの構成情報を変更した場合(mdadm --detail -sで表示されるUUIDが変更された場合)は、必ずmdadm.confを適切に書き換えinitrdを再生成することを忘れないでください。initramfs内のmdadm.confには既にARRAYの記述があるので、構成情報が異なる新たなRAIDデバイスを認識しなくなります。
また、この種のややこしい問題を避けたければmdadmにはARRAYの情報を書かないことです。mdデバイス名の変わることもありますが、すべてをUUIDやLABELで処理すれば問題はありませんし、それで済むならその方が良いかもしれません。
※initramfsで認識したRAIDデバイスは「Begin: Mounting root file
system...」よりも前に、通常のファイルシステムの/etc/mdadm/mdadm.confを参照して認識したデバイスはこの表示より後に出
力されます。initramfs等の詳細はLinux起動シーケンスについての記事を参考にしてください。
sudo su -
# check out the source from source forge (do an "apt-get install subversion" if you don't have the svn command)
ubuntu11.10にiscsitargetをいれる。
svnとかないよといわれれば逐次いんすと
svn co https://iscsitarget.svn.sourceforge.net/svnroot/iscsitarget/
# cd into the iscsitarget/trunk
cd iscsitarget/trunk
# build the package
make
# now install it
make install
And you're done. You will want to reboot the box to bring your iSCSI module online.
/etc/network/if-pre-up.d/iptableconf
iptables -A ..とかのシェルを置く
Usage:
sysv-rc-conf [ *options* ]
sysv-rc-conf --list [ *service* ]
sysv-rc-conf [ --level *levels* ] *service* <*on|off*>
chkconfig open-iscsi on
iscsiadm -m node -T iSCSI名 -p iSCSIホストのIPアドレス --op=update --name=node.startup --value=automatic
the case 2 or more NIC on server
vi /etc/default/tftpd-hpa.conf
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure -l"
TFTP_ADDRESS=":69" がひつよう
#
option space gpxe;
option gpxe-encap-opts code 175 = encapsulate gpxe;
option gpxe.priority code 1 = signed integer 8;
option gpxe.keep-san code 8 = unsigned integer 8;
option gpxe.no-pxedhcp code 176 = unsigned integer 8;
option gpxe.bus-id code 177 = string;
option gpxe.bios-drive code 189 = unsigned integer 8;
option gpxe.username code 190 = string;
option gpxe.password code 191 = string;
option gpxe.reverse-username code 192 = string;
option gpxe.reverse-password code 193 = string;
option gpxe.version code 235 = string;
# Other options that may be useful
#
option iscsi-initiator-iqn code 203 = string;
gccコンパルが可能になるということかな?とりあえず放置
sudo apt-get install build-essential libssl-dev
tar xzvf iscsitarget-1.4.20.2.tar.gz
cd iscsitarget-1.4.20.2/
make
sudo make instal
build-essentialってなんだ。。。。
sudo iscsiadm -m discovery -t st -p xxxxx
はもんだいだった。しゅうりょうがうまくいかない
iscsistart -i [initiatorName] -t [targetIqn] -g [Lun] -a [Address]
として、じっこう
then i can find target i want to mount without discovery.
maybe its problem that mounted target what is mounted at first boot
is remounted at discovery. os cant umount remounted target at shutdown
上記で作成したubuntuのディスクレスPCでは、
iscsidの実行権限がすべてにおいて与えられなくなるので
iscsiadm -m discovery -...
等のコマンドが使えなくなる。
解決として、次の手順を踏む
1. /etc/initramfs-tools/hooks/iscsiの内容にて、iscsidのdiscoveryはさせないよとコメントしてあるif ... fiブロックをコメントアウト
#if [ -x /sbin/iscsid ]; then
# chmod -x /sbin/iscsid # iscsid will interfere by re-discovering
#fi
2. sudo chmod a+x /sbin/iscsid
3. 起動時に、re-discoveringが実行される可能性をなくすため、/etc/iscsi/iscsid.confで、
# To request that the iscsi initd scripts startup a session set to "automatic".
# node.startup = automatic
#
# To manually startup the session set to "manual". The default is manual.
node.startup = manual
としておいた。
起動確認後
sudo iscsiadm -m discovery -t st -p xxxxx
を実行してみたが、特に問題なかった。
もし、OSが乗っているiscsi-targetが見つからなかった場合は、
動かなくなるのだろう。
しかし、どはまりしたー