とあるエンジニアの備忘log
2013年6月4日火曜日
FreeBSD 入門中 その1 : ZFS RootFS にインストール
FreeBSD にはあまり興味はなかったのですが、仕事の都合で FreeBSDをインストールすることになりました。 というわけで、 Linux の知識はあれども、FreeBSD の知識は皆無な状態からスタートして、インストールや環境設定などやっていきます。 今回はインストールするところまでやってみます。 ### インストールメディア入手 ### 現時点では 9.1 が最新。 以下からインストールメディアを入手できる。
FreeBSD-9.1-RELEASE-amd64-dvd1.iso をダウンロードしてきた。 (やたらと時間かかった。BitTorrentとかないのかね。) 入門中といいつつ、通常のインストーラーをいきなり無視します。(笑) 理由は RootFileSystem をZFSにしたいから。 やり方は以下のサイトで詳しく書かれているので、参考になります。 [FreeBSD 9.1-RELEASE で ZFS Root FileSystem 環境を構築する](http://kanjuku-tomato.blogspot.jp/2013/01/freebsd-91-release-zfs-root-filesystem.html) このサイトをかなり参考にしているのですが、自分は HDD 4台で RAID-Z (いわゆるRAID 5) で組んでみました。 HDD 1台だと ZFS を使う意味の大半がなくなってしまいますから。。 それから、不要な手順をいくつかはしょって自分流にアレンジしてます。 ### マシン(VirtualBox) 設定 ### マシンですが、VirtualBox を使っています。 SATA に HDDを4台、IDE に CD/DVDドライブを1台つなぎました。 CD/DVDドライブ も SATAにすると、インストールメディアからブートできませんでしたので。 [![VirtualBox settings](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiQtfTo4azn9zXzCKKwYqKvxLblt5m-5kAEhTrl3zKC2GybdVGa6oO6d7GCfipy62JvHaHqYYg6mmhLTrabHKlPAxZ38nkynQ_wh_8jByTKtycIKtQyaeu-fMT0Y92tsGHIEMJfd3agIE/s320/bsd_virtualbox.png)](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiQtfTo4azn9zXzCKKwYqKvxLblt5m-5kAEhTrl3zKC2GybdVGa6oO6d7GCfipy62JvHaHqYYg6mmhLTrabHKlPAxZ38nkynQ_wh_8jByTKtycIKtQyaeu-fMT0Y92tsGHIEMJfd3agIE/s1600/bsd_virtualbox.png) さらに、設定 → システム で 「ハードウェアクロックをUTCにする」にチェックを入れておきます。 FreeBSD は UTC で運用するので、これをチェックしておかないと、時刻が9時間ずれます。 以下の説明では、セットアップするマシンのホスト名は ernie とします。 余談ですが、自分の家ではホスト名に elmo, cookie, bigbird, oscar, zoe などと Sesame Street のキャラクター名を付けていっています。 一定のネーミングルールを決めておくと、ホスト名がどんどん増えても名前に困りません。 ### インストール開始 ### インストールメディアからブートさせます。 Welcome to FreeBSD の画面で 「1. Boot (Enter)」を選択。 インストーラーが起動するので 1. [Welcome]:
を選択 2. [Keymap Selection]:
を選択 3. [Keyboard Menu]: Japanese 106 を選択 4. [Set Hostname]: 適当に何か入れる (途中からインストーラ無視するので、どうせ /etc に反映されない。) 5. [Distribution Select]: そのまま
でよし 6. [Partitioning]:
を選択 ### パーティションテーブル作成 ### シェルに入るので、ここからインストーラー無視して、自分でセットアップします。 `/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% 大丈夫そう。 次回、設定をしていきます。
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿