予備機がNTPで同期してなかったので修正しました。
yum install ntp
ntpdate ntp.asahi-net.or.jp
あと自動同期の設定など。
vi /etc/ntp.conf
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org
server -4 ntp.asahi-net.or.jp
/etc/rc.d/init.d/ntpd start
chkconfig ntpd on
ハードウェアクロックにも反映しとかないと、再起動のたびに狂っちゃうよ
hwclock --systohc
いじょう。
2009年9月13日日曜日
OpenXのアップデート
DL&解凍
# wget http://download.openx.org/openx-2.8.1.tar.gz
# tar zxvf openx-2.8.1.tar.gz
DBバックアップ
# /kfs/backup/mysqlsnapshot -u [ID] -p [PW] -l -v -s /kfs/backup/output
ディレクトリ入れ替え
# mv public_html openx26_200909012
# mv openx-2.8.1.tar.gz public_html
パーミッション切り替え
# chmod -R a+w /kfs/ad/public_html/var
# chown -R apache:apache /kfs/ad/public_html/var
# chown -R apache:apache /kfs/ad/public_html/var/cache
# chown -R apache:apache /kfs/ad/public_html/var/plugins
# chown -R apache:apache /kfs/ad/public_html/var/templates_compiled
# chown -R apache:apache /kfs/ad/public_html/plugins
# chown -R apache:apache /kfs/ad/public_html/www/admin/plugins
# chown -R apache:apache /kfs/ad/public_html/www/images
あとブラウザでアクセスして適当に進める。
本当は定期メンテとか切らないといけないんだけどね。
パーミッションで怒られたら、そのとおり対処する。
終わったらvarディレクトリ内を全部書き込み禁止にしておく。
# wget http://download.openx.org/openx-2.8.1.tar.gz
# tar zxvf openx-2.8.1.tar.gz
DBバックアップ
# /kfs/backup/mysqlsnapshot -u [ID] -p [PW] -l -v -s /kfs/backup/output
ディレクトリ入れ替え
# mv public_html openx26_200909012
# mv openx-2.8.1.tar.gz public_html
パーミッション切り替え
# chmod -R a+w /kfs/ad/public_html/var
# chown -R apache:apache /kfs/ad/public_html/var
# chown -R apache:apache /kfs/ad/public_html/var/cache
# chown -R apache:apache /kfs/ad/public_html/var/plugins
# chown -R apache:apache /kfs/ad/public_html/var/templates_compiled
# chown -R apache:apache /kfs/ad/public_html/plugins
# chown -R apache:apache /kfs/ad/public_html/www/admin/plugins
# chown -R apache:apache /kfs/ad/public_html/www/images
あとブラウザでアクセスして適当に進める。
本当は定期メンテとか切らないといけないんだけどね。
パーミッションで怒られたら、そのとおり対処する。
終わったらvarディレクトリ内を全部書き込み禁止にしておく。
2009年9月6日日曜日
FreeBSDにiTunesサーバを立てる
# cd /usr/ports/audio/mt-daapd
# make install clean
# vi /usr/local/etc/mt-daapd.conf
○パスワード変えとく
admin_pw mt-daapd
admin_pw admin
○ファイル保存先
mp3_dir /usr/local/share/mt-daapd
mp3_dir /mnt/kfs01/FreeNAS1/iTunesServer
○サーバ名
servername mt-daapd
servername KFS-iTunes
○自動起動
# vi /etc/rc.conf
mt_daapd_enable="YES"
○手動起動
# /usr/local/etc/rc.d/mt-daapd start
○Webインターフェース
http://kfs01.hoge.com:3689/
これでファイル保存先に適当にファイルを突っ込み、iTunesを起動すると自動的に接続される。
# make install clean
# vi /usr/local/etc/mt-daapd.conf
○パスワード変えとく
admin_pw mt-daapd
admin_pw admin
○ファイル保存先
mp3_dir /usr/local/share/mt-daapd
mp3_dir /mnt/kfs01/FreeNAS1/iTunesServer
○サーバ名
servername mt-daapd
servername KFS-iTunes
○自動起動
# vi /etc/rc.conf
mt_daapd_enable="YES"
○手動起動
# /usr/local/etc/rc.d/mt-daapd start
○Webインターフェース
http://kfs01.hoge.com:3689/
これでファイル保存先に適当にファイルを突っ込み、iTunesを起動すると自動的に接続される。
2009年9月2日水曜日
Xenイメージをストレージサーバに置く
今までXenのイメージファイルはローカルディスクに置いて運用していましたが、大規模なストレージサーバを導入して日が経っていることから、ストレージサーバに置くことにしました。
当面はNFS共有で行きます。将来的にZFS@FreeBSDでzVOL(iSCSI)がサポートされたら、また考えます。
…と思ったんだけど失敗しました。敗因は最後に。
■ストレージサーバ(kfs01)にボリューム作成、イメージ移動
○作成と移動
zfs create zen
zfs set sharenfs="-network 192.168.0.0 -mask 255.255.255.0 -maproot=root" kfs01/xen
mkdir /mnt/kfs01/xen/img
mkdir /mnt/kfs01/xen/conf
mv /mnt/kfs01/kfs/xen/* /mnt/kfs01/xen/img
○設定書き換え
Xenの設定ファイルのファイルパスを書き換えます。
>> disk = [ "tap:aio:/kfs_alpha/xen/ad01.img,xvda,w" ]
<< disk = [ "tap:aio:/kfs_xen/img/ad01.img,xvda,w" ]
○スナップショット作成
ここらでセーブしとくか。
zfs snapshot kfs01/xen@`date +%Y%m%d%H%M%S`
■AlphaとBetaにマウントポイント作成
# mkdir /kfs_xen
# mount -t nfs kfs01.hoge.com:/mnt/kfs01/xen /kfs_xen
# vi /etc/fstab
kfs01.hoge.com:/mnt/kfs01/xen /kfs_xen nfs rw 0 0
○設定ファイルはシンボリックリンク共有にしちゃう
ln -s /kfs_xen/conf/* /etc/xen/
■一気に起動
省略。
■参考:メンテナンス方法
○スナップショット閲覧
zfs list -t all
○スナップショット作成
zfs snapshot kfs01/xen@`date +%Y%m%d%H%M%S`
○スナップショット削除
zfs destroy kfs01/xen@hogehoge
■どうなったか
ストレージサーバのアクセスランプが点灯しっぱなし。パフォーマンスめちゃ悪い(1MB/sとか)。
起動にも時間かかるし、DBなんかまともに動いちゃいない。想定外の事態である。
○原因を考える
ストレージサーバへの転送速度測定では80MB/sくらい出ている。ローカルのRAID1と同じくらいなので、単体アクセス時の速度面は問題なし。複数同時アクセスするとパフォーマンスが激しく落ちるのだろうか。ZFSではキャッシュが盛大に効いているようなので、むしろ速くなるのではないかと期待していたのだが。。
ディスクイメージをNFSで共有しているのが問題なんだろうか。ファイルを部分的に読み書きする場合のNFS+ZFSのパフォーマンスは未確認である。ここかしら。
アクセスランプが点灯しっぱなしであるが、zpool iostatでは10MB/sくらいしか読み書きしていないようである。ってかまず10MB/sも何をしているんだろうか。そんなに盛大にローカルディスクにアクセスする機会、ないんですけど。ファイルの一部分だけを書き換える操作にNFS+ZFSが向いていなくて、広範囲を読み書きしてしまって速度が低下しているんだろうか。
○対策
しかしZFSのsnapshot機能は、サーバのディスクイメージを保管するのにもってこいの機能ではないですか。無停止で取れるし、無駄な容量食わないし。なんとしても活用したい。
というわけでサービス上の最大のボトルネックはDBの読み書きであると判断し、DBサーバだけローカルディスクで稼働するように再変更しました。
これにより、相変わらずアクセスランプは激し目に点滅しているものの、一応サービス提供に問題ないレベルまで速度向上したと思います…。なんか納得いかない。。
気がつけばOpenSolarisの新バージョンが出ているようなので、どこかの段階で、改めてSolaris導入を検討したいと思います。NFS共有がダメなんだとすれば、SolarisでZFSでzVOLでshareiscsi使えば問題なさそうな気がするので。大改造ですけども。
当面はNFS共有で行きます。将来的にZFS@FreeBSDでzVOL(iSCSI)がサポートされたら、また考えます。
…と思ったんだけど失敗しました。敗因は最後に。
■ストレージサーバ(kfs01)にボリューム作成、イメージ移動
○作成と移動
zfs create zen
zfs set sharenfs="-network 192.168.0.0 -mask 255.255.255.0 -maproot=root" kfs01/xen
mkdir /mnt/kfs01/xen/img
mkdir /mnt/kfs01/xen/conf
mv /mnt/kfs01/kfs/xen/* /mnt/kfs01/xen/img
○設定書き換え
Xenの設定ファイルのファイルパスを書き換えます。
>> disk = [ "tap:aio:/kfs_alpha/xen/ad01.img,xvda,w" ]
<< disk = [ "tap:aio:/kfs_xen/img/ad01.img,xvda,w" ]
○スナップショット作成
ここらでセーブしとくか。
zfs snapshot kfs01/xen@`date +%Y%m%d%H%M%S`
■AlphaとBetaにマウントポイント作成
# mkdir /kfs_xen
# mount -t nfs kfs01.hoge.com:/mnt/kfs01/xen /kfs_xen
# vi /etc/fstab
kfs01.hoge.com:/mnt/kfs01/xen /kfs_xen nfs rw 0 0
○設定ファイルはシンボリックリンク共有にしちゃう
ln -s /kfs_xen/conf/* /etc/xen/
■一気に起動
省略。
■参考:メンテナンス方法
○スナップショット閲覧
zfs list -t all
○スナップショット作成
zfs snapshot kfs01/xen@`date +%Y%m%d%H%M%S`
○スナップショット削除
zfs destroy kfs01/xen@hogehoge
■どうなったか
ストレージサーバのアクセスランプが点灯しっぱなし。パフォーマンスめちゃ悪い(1MB/sとか)。
起動にも時間かかるし、DBなんかまともに動いちゃいない。想定外の事態である。
○原因を考える
ストレージサーバへの転送速度測定では80MB/sくらい出ている。ローカルのRAID1と同じくらいなので、単体アクセス時の速度面は問題なし。複数同時アクセスするとパフォーマンスが激しく落ちるのだろうか。ZFSではキャッシュが盛大に効いているようなので、むしろ速くなるのではないかと期待していたのだが。。
ディスクイメージをNFSで共有しているのが問題なんだろうか。ファイルを部分的に読み書きする場合のNFS+ZFSのパフォーマンスは未確認である。ここかしら。
アクセスランプが点灯しっぱなしであるが、zpool iostatでは10MB/sくらいしか読み書きしていないようである。ってかまず10MB/sも何をしているんだろうか。そんなに盛大にローカルディスクにアクセスする機会、ないんですけど。ファイルの一部分だけを書き換える操作にNFS+ZFSが向いていなくて、広範囲を読み書きしてしまって速度が低下しているんだろうか。
○対策
しかしZFSのsnapshot機能は、サーバのディスクイメージを保管するのにもってこいの機能ではないですか。無停止で取れるし、無駄な容量食わないし。なんとしても活用したい。
というわけでサービス上の最大のボトルネックはDBの読み書きであると判断し、DBサーバだけローカルディスクで稼働するように再変更しました。
これにより、相変わらずアクセスランプは激し目に点滅しているものの、一応サービス提供に問題ないレベルまで速度向上したと思います…。なんか納得いかない。。
気がつけばOpenSolarisの新バージョンが出ているようなので、どこかの段階で、改めてSolaris導入を検討したいと思います。NFS共有がダメなんだとすれば、SolarisでZFSでzVOLでshareiscsi使えば問題なさそうな気がするので。大改造ですけども。
2009年6月8日月曜日
FUPPESを導入する
FreeBSD8-CURRENTにFUPPESを入れる。
cd /usr/ports/audio/lame
make && make install
cd /usr/ports/audio/twolame
make && make install
cd /usr/ports/multimedia/ffmpeg
make && make install
cd /usr/ports/devel/pcre
make && make install
cd /usr/ports/databases/sqlite3
make && make install
cd ~
fetch http://ncu.dl.sourceforge.net/sourceforge/fuppes/fuppes-SVN-578.tar.gz
tar -xvzf fuppes-SVN-578.tar.gz
cd fuppes-SVN-578
./configure --enable-video-transcoding --disable-gnome-panel-applet --disable-libnotify
make && make install
…が、こんなのが出て止まっちゃう…。。。
lib/HTTP/HTTPMessage.cpp:781: error: 'atoll' is not a member of 'std'
ググると解決策は見あたるが、めんどいし、どうせなら最新版を入れちまえ。。
依存関係は多分おなじようなもんではないかと。
cd /usr/ports/devel/subversion
make && make install
cd ~
/usr/local/bin/svn co https://fuppes.svn.sourceforge.net/svnroot/fuppes/trunk fuppes
cd fuppes/
autoreconf -vfi
./configure
make && make install
…おいおい、こっちもエラーかよorz ※SVN636
vi src/plugins/ffmpeg/ffmpeg.cpp
#if LIBAVCODEC_VERSION_MINOR >= 11
av_freep(subtitle_to_free->rects[i]->pict.data[0]);
av_freep(subtitle_to_free->rects[i]->pict.data[1]);
av_freep(subtitle_to_free->rects[i]);
#else
av_free(subtitle_to_free->rects[i].bitmap);
av_free(subtitle_to_free->rects[i].rgba_palette);
#endif
to
//#if LIBAVCODEC_VERSION_MINOR >= 11
// av_freep(subtitle_to_free->rects[i]->pict.data[0]);
// av_freep(subtitle_to_free->rects[i]->pict.data[1]);
// av_freep(subtitle_to_free->rects[i]);
//#else
av_free(subtitle_to_free->rects[i].bitmap);
av_free(subtitle_to_free->rects[i].rgba_palette);
//#endif
これでmake && make installすると
/usr/local/bin/fuppes
に本体が入る。やれやれ。
/usr/local/bin/fuppes
でスタンドアロン版を起動すると、設定画面のURLが表示されるのでアクセスする。
共有ディレクトリを適当に指定して(あとついでにポートも固定して)
rebuild databaseする。
デーモン起動はこちら。
/usr/local/bin/fuppesd
cd /usr/ports/audio/lame
make && make install
cd /usr/ports/audio/twolame
make && make install
cd /usr/ports/multimedia/ffmpeg
make && make install
cd /usr/ports/devel/pcre
make && make install
cd /usr/ports/databases/sqlite3
make && make install
cd ~
fetch http://ncu.dl.sourceforge.net/sourceforge/fuppes/fuppes-SVN-578.tar.gz
tar -xvzf fuppes-SVN-578.tar.gz
cd fuppes-SVN-578
./configure --enable-video-transcoding --disable-gnome-panel-applet --disable-libnotify
make && make install
…が、こんなのが出て止まっちゃう…。。。
lib/HTTP/HTTPMessage.cpp:781: error: 'atoll' is not a member of 'std'
ググると解決策は見あたるが、めんどいし、どうせなら最新版を入れちまえ。。
依存関係は多分おなじようなもんではないかと。
cd /usr/ports/devel/subversion
make && make install
cd ~
/usr/local/bin/svn co https://fuppes.svn.sourceforge.net/svnroot/fuppes/trunk fuppes
cd fuppes/
autoreconf -vfi
./configure
make && make install
…おいおい、こっちもエラーかよorz ※SVN636
vi src/plugins/ffmpeg/ffmpeg.cpp
#if LIBAVCODEC_VERSION_MINOR >= 11
av_freep(subtitle_to_free->rects[i]->pict.data[0]);
av_freep(subtitle_to_free->rects[i]->pict.data[1]);
av_freep(subtitle_to_free->rects[i]);
#else
av_free(subtitle_to_free->rects[i].bitmap);
av_free(subtitle_to_free->rects[i].rgba_palette);
#endif
to
//#if LIBAVCODEC_VERSION_MINOR >= 11
// av_freep(subtitle_to_free->rects[i]->pict.data[0]);
// av_freep(subtitle_to_free->rects[i]->pict.data[1]);
// av_freep(subtitle_to_free->rects[i]);
//#else
av_free(subtitle_to_free->rects[i].bitmap);
av_free(subtitle_to_free->rects[i].rgba_palette);
//#endif
これでmake && make installすると
/usr/local/bin/fuppes
に本体が入る。やれやれ。
/usr/local/bin/fuppes
でスタンドアロン版を起動すると、設定画面のURLが表示されるのでアクセスする。
共有ディレクトリを適当に指定して(あとついでにポートも固定して)
rebuild databaseする。
デーモン起動はこちら。
/usr/local/bin/fuppesd
2009年5月28日木曜日
Kingmax U-DriveをFreeBSD7.1で使う
多分FreeBSD7.2でも同様だと思う。
Kingmax U-Drive 8GBとやらが安かったので買ってきたが、FreeBSDではこいつがUSBデバイスとして定義されていないので、ZFSで使用する時に盛大にエラーが出る。kernelを再構築すれば使える。
vi usbdevs
(追加)
vendor KINGMAX 0x1687 Kingmax
product KINGMAX UDRIVE 0x6211 Kingmax U-Drive
(追加)
vi umass.c
{ USB_VENDOR_KINGMAX, USB_PRODUCT_KINGMAX_UDRIVE, RID_WILDCARD,
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
NO_GETMAXLUN | NO_SYNCHRONIZE_CACHE
},
多分これだけ。ちゃんちゃん。
…と思ったらmakeが通らない… めんどくさい。やっぱやーめた。。
Kingmax U-Drive 8GBとやらが安かったので買ってきたが、FreeBSDではこいつがUSBデバイスとして定義されていないので、ZFSで使用する時に盛大にエラーが出る。kernelを再構築すれば使える。
vi usbdevs
(追加)
vendor KINGMAX 0x1687 Kingmax
product KINGMAX UDRIVE 0x6211 Kingmax U-Drive
(追加)
vi umass.c
{ USB_VENDOR_KINGMAX, USB_PRODUCT_KINGMAX_UDRIVE, RID_WILDCARD,
UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
NO_GETMAXLUN | NO_SYNCHRONIZE_CACHE
},
多分これだけ。ちゃんちゃん。
…と思ったらmakeが通らない… めんどくさい。やっぱやーめた。。
2009年5月5日火曜日
エラーの多いUSBメモリ対策
USBメモリがよく壊れる。
USBメモリから起動させて数日経つと、フリーズしてしまう。原因は、どうやらUSBメモリのデータ破損らしい。ZFSのCKSUMがうなぎ登り。やはり激安USBメモリではムリがあったか。
対策としては、信頼性の高いストレージを導入することだが、いまさらHDDに切り替えも困難。物理的に搭載できる限界に達してしまっている。USBメモリで何とかするしかない。
SLCのUSBメモリを買えば信頼性は向上するだろうが、今のメモリが無駄だし高いし、そもそも所詮USBメモリなので、根本的解決にはならないだろう。MLCだって1万回程度の書き換え耐久はある(と言われているようだが、どう考えても2~3回くらいしか書き換えてないが…)はずで、それが10倍になったところでこの現象が収まるとは思えない。2~3日で壊れるのが、20~30日で壊れるようになっても、ねぇ。
今回はZFSのミラーリングを利用し、データが破損すること前提で、対策を打ってみる。ZFSが全ブロックチェックサムでデータ破損を検知し、正常なミラーブロックのデータで上書きして動き続ける仕組みを活用する。
バッドノウハウですけれども。。
■ディスク構成
・1GBのUSBメモリ 1本(da0)
・4GBのUSBメモリ 1本(da1) こいつが腐ってるUSBメモリ。
■構築方法
1. da0にFreeBSDをインストールする。
2. da0のFreeBSDでkernelを再構築する(da1が腐っているので、その対策のため設定改変)
3. da1を4分割し、ZFSミラープールを構築する(rpoolという名前にした)。
4. /boot以外のデータをrpoolにコピーする。
5. 起動時にrpoolをrootとしてマウントするように設定する。
■問題点
・2本1セットでないと運用できない(目をつぶる)
・bootパーティションはミラー化されていない(ddでバックアップしておくことにする)
ミラーを3本にすれば1本のUSBメモリで何とかなる気もするが、なにせ信用ならないUSBメモリなので、bootパーティションが破壊された時のために分割しておくことにします。da0のほうはわりと運用実績あるので、信用する。
■やりかた要旨(基本、3つ前のエントリーに沿って作業する)
da0にFreeBSDをインスコして、kernel再構築する。
…と思ったら1GBメモリでは容量不足で再構築できなかったので、腐ったUSBメモリで再構築した/boot以下を上書きコピーしちゃう。
○シングルモードで起動
mount -w /
mkdir /mnt/temp
mount /dev/da1s1a /mnt/temp
rm -rf /boot
cp -a /mnt/temp/boot /
umount /mnt/temp
rmdir /mnt/temp
reboot
○マルチユーザモードで起動
sysinstall->fdiskでスライスを同容量で4つ確保する(da1)
7843838/4 = 1960959
sysinstall->labelでそれぞれパーティションを1つづつ作る
da1s1d/da1s2d/da1s3d/da1s4d
ミラープール作成
zpool create rpool mirror /dev/da1s1d /dev/da1s2d /dev/da1s3d /dev/da1s4d
ZFSパーティション作成。読み書き速度が1/4になる&容量ちょっと足んないので、全部圧縮しちゃう。
zfs create rpool/root
zfs set compress=gzip rpool/root
zfs set atime=off rpool/root
zpool export rpool
reboot
○シングルユーザモードで起動
mount -w /
zpool import rpool
da0のデータをrpoolにコピーしてboot時にマウントされるようにする。
find -x / | cpio -pmd /rpool/root
rm -rf /rpool/root/boot
mkdir /rpool/root/bootdir
cd /rpool/root
ln -s bootdir/boot boot
echo 'vfs.root.mountfrom="zfs:rpool/root"' >> /boot/loader.conf
vi /rpool/root/etc/fstab
(変更前)/dev/da0s1a / ufs rw 1 1
(変更後)/dev/da0s1a /bootdir ufs rw 1 1
cd /
zfs set mountpoint=/ rpool/root
zfs set mountpoint=legacy rpool
zpool export
reboot
これだけ。ナイスだZFS。
安定性はまた後日レポします。
--追記(2009/5/15)--
極めて安定している。嘘のように安定している。エラーが出ない・・・orz
4組ミラーはさすがに無駄が多いので、2組ミラーのストライピングに切り替えちゃいました。
zpool detach rpool da1s3d
zpool detach rpool da1s4d
zpool add rpool mirror /dev/da1s3d /dev/da1s4d
うーん、再起動不要。ナイスだZFS。
USBメモリから起動させて数日経つと、フリーズしてしまう。原因は、どうやらUSBメモリのデータ破損らしい。ZFSのCKSUMがうなぎ登り。やはり激安USBメモリではムリがあったか。
対策としては、信頼性の高いストレージを導入することだが、いまさらHDDに切り替えも困難。物理的に搭載できる限界に達してしまっている。USBメモリで何とかするしかない。
SLCのUSBメモリを買えば信頼性は向上するだろうが、今のメモリが無駄だし高いし、そもそも所詮USBメモリなので、根本的解決にはならないだろう。MLCだって1万回程度の書き換え耐久はある(と言われているようだが、どう考えても2~3回くらいしか書き換えてないが…)はずで、それが10倍になったところでこの現象が収まるとは思えない。2~3日で壊れるのが、20~30日で壊れるようになっても、ねぇ。
今回はZFSのミラーリングを利用し、データが破損すること前提で、対策を打ってみる。ZFSが全ブロックチェックサムでデータ破損を検知し、正常なミラーブロックのデータで上書きして動き続ける仕組みを活用する。
バッドノウハウですけれども。。
■ディスク構成
・1GBのUSBメモリ 1本(da0)
・4GBのUSBメモリ 1本(da1) こいつが腐ってるUSBメモリ。
■構築方法
1. da0にFreeBSDをインストールする。
2. da0のFreeBSDでkernelを再構築する(da1が腐っているので、その対策のため設定改変)
3. da1を4分割し、ZFSミラープールを構築する(rpoolという名前にした)。
4. /boot以外のデータをrpoolにコピーする。
5. 起動時にrpoolをrootとしてマウントするように設定する。
■問題点
・2本1セットでないと運用できない(目をつぶる)
・bootパーティションはミラー化されていない(ddでバックアップしておくことにする)
ミラーを3本にすれば1本のUSBメモリで何とかなる気もするが、なにせ信用ならないUSBメモリなので、bootパーティションが破壊された時のために分割しておくことにします。da0のほうはわりと運用実績あるので、信用する。
■やりかた要旨(基本、3つ前のエントリーに沿って作業する)
da0にFreeBSDをインスコして、kernel再構築する。
…と思ったら1GBメモリでは容量不足で再構築できなかったので、腐ったUSBメモリで再構築した/boot以下を上書きコピーしちゃう。
○シングルモードで起動
mount -w /
mkdir /mnt/temp
mount /dev/da1s1a /mnt/temp
rm -rf /boot
cp -a /mnt/temp/boot /
umount /mnt/temp
rmdir /mnt/temp
reboot
○マルチユーザモードで起動
sysinstall->fdiskでスライスを同容量で4つ確保する(da1)
7843838/4 = 1960959
sysinstall->labelでそれぞれパーティションを1つづつ作る
da1s1d/da1s2d/da1s3d/da1s4d
ミラープール作成
zpool create rpool mirror /dev/da1s1d /dev/da1s2d /dev/da1s3d /dev/da1s4d
ZFSパーティション作成。読み書き速度が1/4になる&容量ちょっと足んないので、全部圧縮しちゃう。
zfs create rpool/root
zfs set compress=gzip rpool/root
zfs set atime=off rpool/root
zpool export rpool
reboot
○シングルユーザモードで起動
mount -w /
zpool import rpool
da0のデータをrpoolにコピーしてboot時にマウントされるようにする。
find -x / | cpio -pmd /rpool/root
rm -rf /rpool/root/boot
mkdir /rpool/root/bootdir
cd /rpool/root
ln -s bootdir/boot boot
echo 'vfs.root.mountfrom="zfs:rpool/root"' >> /boot/loader.conf
vi /rpool/root/etc/fstab
(変更前)/dev/da0s1a / ufs rw 1 1
(変更後)/dev/da0s1a /bootdir ufs rw 1 1
cd /
zfs set mountpoint=/ rpool/root
zfs set mountpoint=legacy rpool
zpool export
reboot
これだけ。ナイスだZFS。
安定性はまた後日レポします。
--追記(2009/5/15)--
極めて安定している。嘘のように安定している。エラーが出ない・・・orz
4組ミラーはさすがに無駄が多いので、2組ミラーのストライピングに切り替えちゃいました。
zpool detach rpool da1s3d
zpool detach rpool da1s4d
zpool add rpool mirror /dev/da1s3d /dev/da1s4d
うーん、再起動不要。ナイスだZFS。
登録:
投稿 (Atom)