FreeBSD 入門中 その1 ZFS RootFS にインストール
FreeBSD にはあまり興味はなかったのですが、仕事の都合で FreeBSDをインストールすることになりました。
というわけで、 Linux の知識はあれども、FreeBSD の知識は皆無な状態からスタートして、インストールや環境設定などやっていきます。
今回はインストールするところまでやってみます。
インストールメディア入手
現時点では 9.1 が最新。
以下からインストールメディアを入手できる。
http://www.freebsd.org/ja/
FreeBSD-9.1-RELEASE-amd64-dvd1.iso をダウンロードしてきた。
(やたらと時間かかった。BitTorrentとかないのかね。)
入門中といいつつ、通常のインストーラーをいきなり無視します。(笑)
理由は RootFileSystem をZFSにしたいから。
やり方は以下のサイトで詳しく書かれているので、参考になります。
FreeBSD 9.1-RELEASE で ZFS Root FileSystem 環境を構築する
このサイトをかなり参考にしているのですが、自分は HDD 4台で RAID-Z (いわゆるRAID 5) で組んでみました。
HDD 1台だと ZFS を使う意味の大半がなくなってしまいますから。。
それから、不要な手順をいくつかはしょって自分流にアレンジしてます。
マシン(VirtualBox) 設定
マシンですが、VirtualBox を使っています。
SATA に HDDを4台、IDE に CD/DVDドライブを1台つなぎました。
CD/DVDドライブ も SATAにすると、インストールメディアからブートできませんでしたので。
さらに、設定 → システム で 「ハードウェアクロックをUTCにする」にチェックを入れておきます。
FreeBSD は UTC で運用するので、これをチェックしておかないと、時刻が9時間ずれます。
以下の説明では、セットアップするマシンのホスト名は ernie とします。
余談ですが、自分の家ではホスト名に elmo, cookie, bigbird, oscar, zoe などと
Sesame Street のキャラクター名を付けていっています。
一定のネーミングルールを決めておくと、ホスト名がどんどん増えても名前に困りません。
インストール開始
インストールメディアからブートさせます。
Welcome to FreeBSD の画面で 「1. Boot (Enter)」を選択。
インストーラーが起動するので
パーティションテーブル作成
シェルに入るので、ここからインストーラー無視して、自分でセットアップします。
/dev
を見るとハードディスクは /dev/ada0
, /dev/ada1
, /dev/ada2
, /dev/ada3
として認識されています。
この4台にパーティションを作るところから始めます。
以下のように、GUIDパーティションテーブルを作る。
# gpart create -s gpt ada0
ada0 created
# gpart create -s gpt ada1
ada1 created
# gpart create -s gpt ada2
ada2 created
# gpart create -s gpt ada3
ada3 created
パーティション作成
ブートパーティション、スワップ領域、ZFS領域を作成します。
raidz (いわゆる RAID5)にするので、4台とも同じ構造でパーティション作るのがわかりやすそうです。
ラベル名はかぶらないようにしましょう。
# gpart add -s 122 -t freebsd-boot -l ernie0_boot ada0
ada0p1 added
# gpart add -s 122 -t freebsd-boot -l ernie1_boot ada1
ada1p1 added
# gpart add -s 122 -t freebsd-boot -l ernie2_boot ada2
ada2p1 added
# gpart add -s 122 -t freebsd-boot -l ernie3_boot ada3
ada3p1 added
# gpart add -s 512m -t freebsd-swap -l ernie0_swap ada0
ada0p2 added
# gpart add -s 512m -t freebsd-swap -l ernie1_swap ada1
ada1p2 added
# gpart add -s 512m -t freebsd-swap -l ernie2_swap ada2
ada2p2 added
# gpart add -s 512m -t freebsd-swap -l ernie3_swap ada3
ada3p2 added
# gpart add -t freebsd-zfs -l ernie0_root ada0
ada0p3 added
# gpart add -t freebsd-zfs -l ernie1_root ada1
ada1p3 added
# gpart add -t freebsd-zfs -l ernie2_root ada2
ada2p3 added
# gpart add -t freebsd-zfs -l ernie3_root ada3
ada3p3 added
# gpart show
=> 34 33554365 ada0 GPT (16G)
34 122 1 freebsd-boot (61k)
156 1048576 2 freebsd-swap (512M)
1048732 32505667 3 freebsd-zfs (15G)
=> 34 33554365 ada1 GPT (16G)
34 122 1 freebsd-boot (61k)
156 1048576 2 freebsd-swap (512M)
1048732 32505667 3 freebsd-zfs (15G)
=> 34 33554365 ada2 GPT (16G)
34 122 1 freebsd-boot (61k)
156 1048576 2 freebsd-swap (512M)
1048732 32505667 3 freebsd-zfs (15G)
=> 34 33554365 ada3 GPT (16G)
34 122 1 freebsd-boot (61k)
156 1048576 2 freebsd-swap (512M)
1048732 32505667 3 freebsd-zfs (15G)
# gpart show -l
=> 34 33554365 ada0 GPT (16G)
34 122 1 ernie0_boot (61k)
156 1048576 2 ernie0_swap (512M)
1048732 32505667 3 ernie0_root (15G)
=> 34 33554365 ada1 GPT (16G)
34 122 1 ernie1_boot (61k)
156 1048576 2 ernie1_swap (512M)
1048732 32505667 3 ernie1_root (15G)
=> 34 33554365 ada2 GPT (16G)
34 122 1 ernie2_boot (61k)
156 1048576 2 ernie2_swap (512M)
1048732 32505667 3 ernie2_root (15G)
=> 34 33554365 ada3 GPT (16G)
34 122 1 ernie3_boot (61k)
156 1048576 2 ernie3_swap (512M)
1048732 32505667 3 ernie3_root (15G)
間違いがないことを確認して次に進みます。
ブートコードインストール
各ドライブの1番目のパーティション(freebsd-boot)にブートコードをインストール。
とりあえず全ドライブにブートコードを書いておけば、どれかぶっ壊れても起動できると思う。
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
bootcode written to ada0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1
bootcode written to ada1
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2
bootcode written to ada2
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada3
bootcode written to ada3
ZFS 作成
zpool を作ります。 altroot は一時的なマウントポイントで、再起動するとこの情報は持ち越されない。
また、 /dev/ada0p2
のようにパーティションを指定すると、マウント順でドライブ番号が変わる可能性があるので、
一意に決まるラベルで指定するのがよいです。
cachefile を一時保存する領域を設けるため、 tmpfs をマウントしておく。
# mount -t tmpfs tmpfs /tmp
# zpool create -f -o altroot=/media -o cachefile=/tmp/zpool.cache rpool raidz \
/dev/gpt/ernie0_root /dev/gpt/ernie1_root /dev/gpt/ernie2_root /dev/gpt/ernie3_root
ZFS filesystem version 5
ZFS storage pool version 28
# zfs create rpool/root
# zfs create rpool/root/var
# zfs create rpool/root/home
# zpool set bootfs=rpool/root rpool
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 306K 45.3G 44.9K /media
rpool/root 133K 45.3G 46.4K /media/root
rpool/root/home 43.4K 45.3G 43.4K /media/root/home
rpool/root/var 43.4K 45.3G 43.4K /media/root/var
ちなみに、 zpool
コマンドを実行した時に
ZFS filesystem version 5
ZFS storage pool version 28
というメッセージが出ていますが、これは zfs module が自動的にロードされているからです。
pool 直下にもファイルは作れるが、やらないほうがいいそうです。
なので、以下のようにする。
# zfs set mountpoint=none rpool
# zfs set mountpoint=/ rpool/root
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 317K 45.3G 44.9K none
rpool/root 133K 45.3G 46.4K /media
rpool/root/home 43.4K 45.3G 43.4K /media/home
rpool/root/var 43.4K 45.3G 43.4K /media/var
インストールメディアから展開
# tar xzpf /usr/freebsd-dist/base.txz -C /media/
# tar xzpf /usr/freebsd-dist/kernel.txz -C /media/
# tar xzpf /usr/freebsd-dist/ports.txz -C /media/
# tar xzpf /usr/freebsd-dist/src.txz -C /media/
# tar xzpf /usr/freebsd-dist/doc.txz -C /media/
設定ファイル作成
自力で設定ファイルを作っていきます。 vi
などで以下のように記述します。
/media/boot/loader.conf
を作って以下のように記載
zfs_load="YES"
vfs.root.mountfrom="zfs:rpool/root"
/media/etc/rc.conf
を作って以下のように記載
zfs_enable="YES"
keymap="jp.106.kbd"
/media/etc/fstab
を作って以下のように記載
# Device Mountpoint FStype Options Dump Pass#
/dev/ada0p2 none swap sw 0 0
/dev/ada1p2 none swap sw 0 0
/dev/ada2p2 none swap sw 0 0
キャッシュファイルをコピー
# cp /tmp/zpool.cache /media/boot/zfs/
# zpool set cachefile="" rpool
最終チェック(いちおう)
ZFSで起動できるかチェックするスクリプトがあるらしいので、インストールして実行する。
# cd /media/usr/src/tools/tools/zfsboottest
# make
# make DESTDIR=/media install
install -s -o root -g wheel -m 555 zfsboottest /media/usr/bin
install -o root -g wheel -m 555 zfsboottest.sh /media/usr/bin/zfsboottest.sh
# env PATH=$PATH:/media/usr/bin zfsboottest.sh rpool
The "mountpoint" property of dataset "rpool/root" should be set to "legacy".
どうも、 rpool/root
のマウントポイントを /
から legacy
に変更せよ、と言っています。
ZFS は標準では、 /etc/fstab
を使わないのですが、 legacy
というのは、従来通り /etc/fstab
で管理するモードのこと。
で、せっかくの忠告ですが、無視します。(笑)
最初は忠告にしたがって、 zfs set mountpoint=legacy rpool/root
とかやっていたのですが、別にやらなくても問題なく起動できることがわかったので。
忠告無視して、そのまま電源OFFします。
# sync
# halt -p
インストール完了、そして再起動
CD/DVDドライブからインストールメディアを取り除いて、起動します。
さて、本当に起動するか、ドキドキですが。。無事起動しました。
ZFS が期待通りか確認。
# zfs get mountpoint
NAME PROPERTY VALUE SOURCE
rpool mountpoint none local
rpool/root mountpoint / local
rpool/root/home mountpoint /home inherited from rpool/root
rpool/root/var mountpoint /var inherited from rpool/root
# zfs get mounted
NAME PROPERTY VALUE SOURCE
rpool mounted no -
rpool/root mounted yes/ -
rpool/root/home mounted yes -
rpool/root/var mounted yes -
swap 領域を確認してみる。
# pstat -s
Device 1K-blocks Used Avail Capacity
/dev/ada0p2 524288 0 524288 0%
/dev/ada1p2 524288 0 524288 0%
/dev/ada2p2 524288 0 524288 0%
Total 1572864 0 1572864 0%
大丈夫そう。
次回、設定をしていきます。
blog comments powered by Disqus