FreeBSD 9.0-RELEASEのインストール(zfs環境構築)

目標よりも遅れてしまいましたが,FreeBSD 9.0-Rへの移行を開始しました.

移行するにあたって,次の2つを目的としました.

bootをZFSにするかどうかは迷いましたが,すべてZFSで構築することにしています.

先達の報告を読むかぎり問題はなさそうです.

謝辞

分かりやすい手順を書いてくれていた,kinusatiさんとgkontosさんに感謝します.

このポストの後半はお2人の書かれた内容を併せた形になっています.

次の「参考資料」のリンク先も参照してください.

環境

準備

バックアップ

既存のデータで必要なものはバックアップしておく.

ホームディレクトリのファイル以外では,以下をバックアップしておいた.

  • /etc以下
  • /boot/loader.conf
  • pkg_infoの結果
  • Xorgの設定ファイル(/usr/local/etc/hal/fdi/policy以下にある)
インストールメディア

以下から,FreeBSD-9.0-RELEASE-amd64-memstick.imgをダウンロード.

ftp://ftp8.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.0/FreeBSD-9.0-RELEASE-amd64-memstick.img

他のミラーでもO.K. ただし,FreeBSD-8までとはパスが異なることに注意.

USBメモリFreeBSDマシンに指して,以下のコマンドを実行.

# dd if=FreeBSD-9.0-RELEASE-i386-memstick.img of=/dev/da0 bs=64k

/dev/da0は認識しているUSBメモリ

しばらく待つ.

インストール

起動

USBメモリを指して,PCを起動する.

"Welcome to FreeBSD"画面で,そのまま待つか"1"を押下.

Shellに入るまで

→ Japanese 106 → hoge(ここでは適当でO.K.) → "Distribution Select"で,そのままEnter → "Partitioning"で,選択

ここからは,コマンドラインでの操作となる.

/tmpを書き込み可能にする
# umount -f /dev/md1
# mdmfs -s 512M md1 /tmp
バイス名を調査
# dmesg | fgrep MB
ada0: 150.000MB/s transfers (SATA 1.x, UDMA6, PIO 8192bytes)
ada0: 305245MB (625142448 512 byte sectors: 16H 63S/T 16383C)
da0: 40.000MB/s transfers
da0: 15360MB (31457280 512 byte sectors: 255H 63S/T 1958C)

今回は,ada0が対象ディスク

パーティション作成
# gpart create -s gpt ada0
ada0 created
# gpart add -b 34 -s 94 -t freebsd-boot ada0
ada0p1 added
# gpart add -t freebsd-zfs -l disk0 ada0
ada0p2 added
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
bootcode written to ada0
poolの作成
# zpool create zroot /dev/gpt/disk0
bootfsの設定
# zpool set bootfs=zroot zroot
# zfs set checksum=fletcher4 zroot
# zfs set mountpoint=/mnt zroot
zpoolのエクスポートとインポート
# zpool export zroot
# zpool import -o cachefile=/var/tmp/zpool.cache zroot
パーティション作成
# zfs create zroot/usr
# zfs create zroot/usr/home
# zfs create zroot/var
# zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
# zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
# zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
# zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
# zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src
# zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
# zfs create -o exec=off -o setuid=off zroot/var/db
# zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
# zfs create -o exec=off -o setuid=off zroot/var/empty
# zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
# zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
# zfs create -o exec=off -o setuid=off zroot/var/run
# zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp
SWAP領域の確保
# zfs create -V 4G zroot/swap
# zfs set org.freebsd:swap=on zroot/swap
# zfs set checksum=off zroot/swap
シンボリックリンク,stickyビットの設定
# chmod 1777 /mnt/tmp
# cd /mnt ; ln -s usr/home home
# chmod 1777 /mnt/var/tmp
FreeBSDを展開(インストール)
# sh
# cd /usr/freebsd-dist
# export DESTDIR=/mnt
# for file in base.txz lib32.txz kernel.txz doc.txz ports.txz src.txz games.txz;
# do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); done
zpool.cacheをコピー
# cp /var/tmp/zpool.cache /mnt/boot/zfs/zpool.cache
ZFSの有効化
# echo 'zfs_enable="YES"' >> /mnt/etc/rc.conf
# echo 'zfs_load="YES"' >> /mnt/boot/loader.conf
# echo 'vfs.root.mountfrom="zfs:zroot"' >> /mnt/boot/loader.conf
# touch /mnt/etc/fstab
アンマウントして,マウントポイントを設定
# zfs set readonly=on zroot/var/empty
# zfs umount -af
# zfs set mountpoint=legacy zroot
# zfs set mountpoint=/tmp zroot/tmp
# zfs set mountpoint=/usr zroot/usr
# zfs set mountpoint=/var zroot/var
再起動
# sync;sync;sync
# reboot

USBメモリはここで抜く

ホスト名,ネットワークインタフェース,キーマップを設定
# vi /etc/rc.conf
hostname="hoge"
ifconfig_em0="DHCP"
keymap="jp.106"
rootパスワードとタイムゾーンの設定
# passwd
# tzsetup

完了
# sync;sync;sync
# reboot

再起動してあとは環境構築