2008年12月19日金曜日

vserver + aufs その後

vserverのディレクトリをaufsで共有することで複数のvserverを立ててもディスクへの圧迫が小さいようにする.

まずテンプレートとなるvserverをつくっておく.centos で

> vserver template build -m yum --hostname xxx --interface ech0:xxx.xxx.xxx.xxx/24 -- -d centos5
で,これをcloneする.
> vserver newone build -m clone --hostname xxx --interface ech0:xxx.xxx.xxx.xxx/24 -- --source /vservers/template
これでできたnewoneができたわけだがここでできたディスクは使わないで消す. で,/tmp/newone に空のディレクトリを作ってこれをtemplateのディレクトリにかぶせてマウントする
mount -t aufs -o br:/tmp/newone:/vservers/template=ro none /etc/vservers/newone/vdir
とやる.で起動すると起動するには起動するが,
WARNING: '/etc/vservers/newone/vdir/bin/cat' does not end on newline
こんなエラーが無限にでる.結構はまってしまったが,/etc/vservers/newone に直接vdirをマウントしてしまったのが良くなかったらしい.configurationファイルを探すスクリプトが,findでvdirの中身を全部スキャンしていた.だから一度別のところにマウントしてからsymlinkを張ればよい.
mount -t aufs -o br:/tmp/newone:vservers/template=ro none /mnt/newone
ln -s /mnt/newone /etc/vserver/newone/vdir
さらに既存の/usrや/homeをマウントしたいaufsでマウントするベースディレクトリにbindでマウントすればいいかなと思い,
mount --bind /usr /tmp/newone/usr
とやってみたが,うまく行かない.どうもaufsでマウントするともとのブランチのbindマウントされている点は全部無視されてしまうようだ.aufsのマニュアルにはこれを使ってブランチをaufsの外からいじれなくするハックが書かれている.

でどうしたかというと,aufsでマウントしたところに,あとからbindしてみた.こちらはうまく行く.

mount --bind /usr /mnt/newone/usr
ただしこの場合 vserver のなかで/usrに書き込むと,大本の/usrに書き込まれてしまう.これはうまくない.が今のところ解決法が見当たらない.

0 件のコメント: