ライン

ポイント:pure ZFSで使える

ライン

 はじめに

FreeBSD 8.1-RELEASE

 FreeBSD 8.1がリリースされました。早速ISOメディアを入手し試そうと思います。

 今回は、VMware ESXi 4.1 の環境が手元にありますので、これを使って導入することにします。
折角なので ZFS環境での構築という流れで作成してみようと思います。

 数日間、試行錯誤でしたが、以下の方法で導入できましたので備忘録を公開します。

 導入開始

ESXi の環境設定

 早速環境を準備しましょう。

 FTPサイトからイメージファイルを入手します。

このような流れで完了しました。

 今回もダウンロードを行ったのは、以下のサイトです。
ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ISO-IMAGES-i386/8.1/

 FreeBSD-8.1-RELEASE-amd64-dvd1.iso を入手しました。※配布は圧縮された形式です
これを、クライアントのディスクにおいたまま、導入を開始します。

「仮想マシンのパワーオン」をクリック。
コンソールタブをクリック。
その後、上部にあるCDのアイコンをクリックし、「ローカルディスクのISOイメージに接続」を選択する。
光学メディアのアイコン(「仮想マシンのCD/DVDデバイスの接続/切断」)をクリックし、「ローカルディスクのISOイメージに接続」を選択し、ダウンロードした ISOファイルを選択する。
ネットワークブートを試みている段階で、作業して設定ができた頃には、「Operating System not found」が出ているはず。
そのタイミングでエンターをしてみると、先のステップに進みます。
※CTRL + ALT + Insert キーで再起動させてもいいでしょう
ここまではいつもの流れ。
ここで、Fixitを選択。
これまでの FreeBSDのdisk1にはfixitが一緒に入っていたと思っていたのですが、今回試した時点ではNGでした。
liveイメージのISOも取得し、マウントし直しで使う方法も試しましたが、いまいちでしたので、今回はDVDのISOを使う例にしています。
RootOnZFS-GPTZFSBoot - FreeBSD Wiki の Installing FreeBSD Root on ZFS using GPT のページを参考に進めます。
以下のように入力を行います。
ブート用に64KB、スワップ用に4GB(メモリーを2GBなので、倍の値を指定)、残りをディスクは freebsd-zfsとして作成。
ZFSをロードして状態を確認。
Fixit# gpart create -s gpt da0
Fixit# gpart add -s 64K -t freebsd-boot da0
Fixit# gpart add -s 4G -t freebsd-swap -l swap0 da0
Fixit# gpart add -t freebsd-zfs -l disk0 da0

Fixit# gpart bootcode -b /mnt2/boot/pmbr -p /mnt2/boot/gptzfsboot -i 1 da0
Fixit# sysctl kern.geom.debugflags=0x10
Fixit# kldload /mnt2/boot/kernel/opensolaris.ko
Fixit# kldload /mnt2/boot/kernel/zfs.ko
Fixit# kldstat
ここまでは問題なし。
続きを行う。
Fixit# mkdir /boot/zfs
Fixit# zpool create zroot /dev/gpt/disk0
Fixit# zpool set bootfs=zroot zroot
ここまでで、「Creating a bootable ZFS Filesystem」の章は終わりです。
次の「Installing FreeBSD to the ZFS filesystem」を開始します。
導入に進もう。
Fixit# zfs set checksum=fletcher4 zroot
Fixit# zfs create -o compression=on -o exec=on -o setuid=off   zroot/tmp
Fixit# chmod 1777 /zroot/tmp
Fixit# zfs create zroot/usr
Fixit# zfs create zroot/usr/home
Fixit# cd /zroot ; ln -s /usr/home home

Fixit# zfs create -o compression=lzjb -o setuid=off  zroot/usr/ports
Fixit# zfs create -o compression=off  -o exec=off  -o setuid=off  zroot/usr/ports/distfiles
Fixit# zfs create -o compression=off  -o exec=off  -o setuid=off  zroot/usr/ports/packages
こんな細かい指定は不要とは思うけど、同じように操作していきます。
続いて操作をしていきます。
Fixit# zfs create -o compression=lzjb  -o exec=off  -o setuid=off  zroot/usr/src
Fixit# zfs create  zroot/var
Fixit# zfs create -o compression=lzjb  -o exec=off  -o setuid=off  zroot/var/crash
Fixit# zfs create -o exec=off  -o setuid=off  zroot/var/db
Fixit# zfs create -o compression=lzjb  -o exec=on  -o setuid=off  zroot/var/db/pkg
Fixit# zfs create -o exec=off  -o setuid=off   zroot/var/empty
Fixit# zfs create -o compression=lzjb  -o exec=off  -o setuid=off  zroot/var/log
Fixit# zfs create -o compression=gzip  -o exec=off  -o setuid=off  zroot/var/mail
Fixit# zfs create -o exec=off  -o setuid=off   zroot/var/run
Fixit# zfs create -o compression=lzjb  -o exec=on   -o setuid=off  zroot/var/tmp
Fixit# chmod 1777 /zroot/var/tmp
入力は間違えないように入れていきます。
間違えた時は、zfs destroy zroot/xxxxx のように一度削除して進めば混乱しないで良いかも。
導入を開始します。やっと来たという感じです。
Fixit# cd /dist/8.*
Fixit# export DESTDIR=/zroot
Fixit# for dir in base catpages dict doc games info lib32 manpages ports; \
          do (cd $dir ; ./install.sh) ; done
Fixit# cd src ; ./install.sh all
Fixit# cd ../kernels ; ./install.sh generic
Fixit# cd /zroot/boot ; cp -Rlp GENERIC/* /zroot/boot/kernel/
これでカーネルが入れ替わりました。
設定等を行う部分に入ってきます。
Fixit# zfs set readonly=on zroot/var/empty
Fixit# chroot /zroot tcsh
# echo 'zfs_enable="YES"' >> /etc/rc.conf
# echo 'hostname="freebsd81.example.jp"' >> /etc/rc.conf
# echo 'ifconfig_em0="DHCP"' >> /etc/rc.conf
# echo 'zfs_load="YES"' >> /boot/loader.conf
# echo 'vfs.root.mountfrom="zfs:zroot"' >> /boot/loader.conf
ESXi では、ネットワークが em0で見えてくるので、そのように指定。
※sysinstallで後に設定しますが…

vfs.root.mountfrom の行は重要。ミスしないように。
vfs.root.mountfrom.option も指定するのなら記述。
さて、やってきました。
昨日まで悩んでいた箇所。
「Install ZFS aware /boot/loader (Required for 8.0-RELEASE and 7.{0-2}-RELEASE)
ということで、今回はこの箇所をスキップ。Dec 7, 2009以降は不要ってことになっているので、8.1のリリースでは作業がいらないはず。
The ZFS zpool version has been updated to 14.
The zfsloader has been added.
This is a separate zfs(8) enabled loader.
Note that a ZFS bootcode (zfsboot or gptzfsboot) need to be installed to use this new loader.
とリリースの詳細にも書かれていますし。

ただし。/etc/src.confやmake.conf に今後のために入れておかないで大丈夫なものなのかは不明だな。
ということで、もろもろの先に進めてしまうことにしよう。
# passwd
# sysinstall
ユーザのアカウントを追加しておきましょう。
次はタイムゾーン。
そして、ネットワーク
ここは手動で作成していて不要なら割愛。
折角なので、SSHの設定も入れておく。
これでGUIで設定しておくものは終わり。
追加を入れます。
# cd /etc/mail
# make aliases

# echo 'powerd_enable="YES"' >> /etc/rc.conf

Fixit# exit
Fixit# cp /boot/zfs/zpool.cache /zroot/boot/zfs/zpool.cache
メールのaliasesのコマンドとと 3行の追加。viなどで入れても大丈夫。
chroot している状態から離れます。
その後、キャッシュをコピーしておきます。
「Finish install」の章に到着です。
fstabの設定などを行い、リブートする段階が近づきます。
Fixit# cat << EOF > /zroot/etc/fstab
 # Device                       Mountpoint              FStype  Options         Dump    Pass#
 /dev/gpt/swap0                 none                    swap    sw              0       0
 EOF
こんな感じ。
最終です。
Fixit# export LD_LIBRARY_PATH=/mnt2/lib
Fixit# zfs unmount -a
Fixit# zfs set mountpoint=legacy zroot
Fixit# zfs set mountpoint=/tmp zroot/tmp
Fixit# zfs set mountpoint=/usr zroot/usr
Fixit# zfs set mountpoint=/var zroot/var
終わりましたかね。
あとは、exitして、Fixitモードから抜けてリブートするだけ。
今回はどうでしょうか。

はい、あがってきました。一安心です。

 実際に作業してみるとあっさりですけど、ここまで何度繰り返したことか…。
(更新途中のページを参照して方はご存じの通りです)

エラーになっていた箇所の修正

 上記までの作業でミスしている箇所らしい、エラー箇所を直しておきます。

発生していた指定による部分は、上記の備忘録上の記述を削除してしまいました。
残っていたのは、以下のものでした。
ZFS NOTICE: Prefetch is disabled by default if less than 4GB of RAM is present to enable, add "vfs.zfs.prefetch_disable=0" to /boot/loader.conf.
と書かれています。

4GB未満のメモリーだし、loader.conf に "vfs.zfs.prefetch_disable=0" を指定しとけ、ってことみたいだ。

これは前回も出ていた vfs.zfs.arc_max 、vm.kmem_size 、vm.kmem_size_maxを指定については今回はなにもいってこないみたいだ。
その他の備忘録

 今までの使い勝手と違い、/etc/rc.conf の記述ミスでリブート途中で転けて、シングルユーザモードに落ちた際に驚いたこと。
mount の方法を忘れてしまった。 mount -u / は通っても、mount /usr はエラーになる。そうだった。zfs mount じゃないとダメなんだよね。

# zfs mount -a

なんですぐに思い出せないんだろうとは思うけど、慣れだけで使っているとそんなものかも。

 ports/emulators/open-vm-tools-nox11 の導入。
依存関係の連続で結構いろいろと導入されていく。…ってどんだけいれたら終わるんだろう。

 vmware_guest_kmod_enable="YES"
 vmware_guestd_enable="YES"
 vmware_guest_vmxnet_enable="YES"
 とか書かれているけど、ネットはこっちにするメリットってなんだろう。速いの?
時間かけていれたものの、何かいいことがあったのかさっぱりわからないまま。

ミラーリング

 未作成

まとめ

 なんとか動作するところまではいきつきました。
前回の作業(FreeBSD 8.0での実施:未公開)では、この先で別ディスクに作成している仮想ディスク上とミラー設定をしています。
Hyper-Vでの実施でしたが、同様をこっちでも試しておきたいとは思っています。

 現時点で気になっているのは、起動時に何かピタっと停まっているので、何が影響しているかを確認したいとは思っています。
ネットで検索すると同じ事象を経験している人が多いね。ソリューションが出ていそうな頃にまた検索してみようと思う。
同様の操作で導入している FreeBSD 8.0側では発生していないので、何がの差があるのだと思います。
※私は20秒ぐらいとまっているだけなんだけどな
 
※ブートローダーの差しか思いつかないけど


【改訂履歴】作成:2010/07/24
更新 2010/7/25 … 昨日までに導入がうまくいっていなかった記述から、導入できるまでの記述に変更。
   2010/7/27…ports導入を試すほかを更新

【参照ページ】※いつもありがとうございます

pure ZFS 環境の構築 (前編) Untitled Documents
FreeBSD-ZFS-ZFSboot - BugbearR's Wiki
FreeBSD 8.0RC2 amd64 pure ZFS install - PukiWiki
ZFSQuickStartGuide - FreeBSD Wiki

デル株式会社

Copyright © 1996,1997-2006,2007- by F.Kimura,