FreeBSD 入門中 その2 壊して復旧する
前回、ZFS の RootFileSystem上に FreeBSD をインストールするところまでやりました。
インストールが無事終わったところで、さっそく壊しますか。(笑)
せっかく ZFS にインストールしたのだから、試しに壊して復旧してみたくなりますね。(なりませんか?)
今回は、FreeBSD というよりも、ZFS の話題です。
Linux で ZFS を使おうとすると、
- ZFS-FUSE: 機能が限定的
- ZFS on LINUX: Kernel を更新するたびに、ZFSモジュールも再ビルドなので面倒
という欠点がありました。 (Linux で ZFS を使ってみた を参照)
その点、FreeBSD では標準的にサポートされているのは良いですね。
1台外してみる
今の構成は、HDD 4台で RAID-Z を構成しています。
ということは、HDD 1台壊れても起動できるはずです。
データが化けたくらいなら、 ZFS が scrub ですぐに直してくれますので、あまり面白くない。
HDDがうんともすんとも動かなくなって、もう取り外すしかないという状況になったという仮定でやってみます。
ernie0.vdi, ernie1.vdi, ernie2.vdi, ernie3.vdi という4台のHDDのうち、 図のように、 1台目の ernie0.vdi を取り外してみます。
そして、起動させてみます。 なーんも問題なく起動しました。
これがうまく理屈としては、こうです。
前回のインストール時に、 4台すべての boot パーティションに、bootcode をインストールしてあります。
# 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
なので、ブートローダーは問題なし。
Swap領域については、
# 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
のように、認識された順に 3台だけ、使っています。
インストール時は
- ada0: ernie0.vdi
- ada1: ernie1.vdi
- ada2: ernie2.vdi
- ada3: ernie3.vdi
のように認識していたわけですが、ernie0.vdi を取り外したので
- ada0: ernie1.vdi
- ada1: ernie2.vdi
- ada2: ernie3.vdi
のように認識するのですが、ドライブ番号で指定しているので、何ら矛盾はない。
で、ルートパーティションは RAID-Z になっていて冗長性が確保されているので、1台失われても問題ない。 (ちなみに ZFS の方は、認識順でドライブ番号が変わっておかしくならないように、ラベルで指定するのでした。)
当然、status を表示させると DEGRADED となっていますが。
1台追加して復旧する
このままでは、冗長性がなくて、心もとないので、新しいHDDを買ってきて接続したという想定にしましょう。
VirtualBox に新しく ernie4.vdi というディスクを追加しています。
起動させて、他の3台と同じ構造で ernie4 にパーティションを切ります。
# gpart show -l
=> 34 33554365 ada0 GPT (16G)
34 122 1 ernie1_boot (61k)
156 1048576 2 ernie1_swap (512M)
1048732 32505667 3 ernie1_root (15G)
=> 34 33554365 ada1 GPT (16G)
34 122 1 ernie2_boot (61k)
156 1048576 2 ernie2_swap (512M)
1048732 32505667 3 ernie2_root (15G)
=> 34 33554365 ada2 GPT (16G)
34 122 1 ernie3_boot (61k)
156 1048576 2 ernie3_swap (512M)
1048732 32505667 3 ernie3_root (15G)
# gpart create -s gpt ada3
# gpart add -s 122 -t freebsd-boot -l ernie4_boot ada3
ada3p1 added
# gpart add -s 512m -t freebsd-swap -l ernie4_swap ada3
ada3p2 added
# gpart add -t freebsd-zfs -l ernie4_root ada3
ada3p3 added
# gpart show -l
=> 34 33554365 ada0 GPT (16G)
34 122 1 ernie1_boot (61k)
156 1048576 2 ernie1_swap (512M)
1048732 32505667 3 ernie1_root (15G)
=> 34 33554365 ada1 GPT (16G)
34 122 1 ernie2_boot (61k)
156 1048576 2 ernie2_swap (512M)
1048732 32505667 3 ernie2_root (15G)
=> 34 33554365 ada2 GPT (16G)
34 122 1 ernie3_boot (61k)
156 1048576 2 ernie3_swap (512M)
1048732 32505667 3 ernie3_root (15G)
=> 34 33554365 ada3 GPT (16G)
34 122 1 ernie4_boot (61k)
156 1048576 2 ernie4_swap (512M)
1048732 32505667 3 ernie4_root (15G)
という感じになります。
4台対称にするために、 bootcode もインストールしておきます。
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada3
bootcode written to ada3
あとは zpool replace
します。
# zpool replace rpool /dev/gpt/ernie0_root /dev/gpt/ernie4_root
Make sure to wait until resilver is done before rebooting.
zpool status
で resilvered になっていたら OKです。
これで冗長性が確保されたので、またどれか1台取り外しても、何の問題なく起動します。
ZFS 素晴らしすぎる。
次回は、まともに使えるようにいろいろとセットアップしていきます。
blog comments powered by Disqus