とあるエンジニアの備忘log
2013年6月6日木曜日
FreeBSD 入門中 その2: 壊して復旧する
[前回](/2013/06/freebsd-1-zfs-rootfs.html)、ZFS の RootFileSystem上に FreeBSD をインストールするところまでやりました。 インストールが無事終わったところで、さっそく壊しますか。(笑) せっかく ZFS にインストールしたのだから、試しに壊して復旧してみたくなりますね。(なりませんか?) 今回は、FreeBSD というよりも、ZFS の話題です。 Linux で ZFS を使おうとすると、 1. ZFS-FUSE: 機能が限定的 2. ZFS on LINUX: Kernel を更新するたびに、ZFSモジュールも再ビルドなので面倒 という欠点がありました。 ([Linux で ZFS を使ってみた](/2012/11/zfs.html) を参照) その点、FreeBSD では標準的にサポートされているのは良いですね。 ### 1台外してみる ### 今の構成は、HDD 4台で RAID-Z を構成しています。 ということは、HDD 1台壊れても起動できるはずです。 データが化けたくらいなら、 ZFS が scrub ですぐに直してくれますので、あまり面白くない。 HDDがうんともすんとも動かなくなって、もう取り外すしかないという状況になったという仮定でやってみます。 ernie0.vdi, ernie1.vdi, ernie2.vdi, ernie3.vdi という4台のHDDのうち、 図のように、 1台目の ernie0.vdi を取り外してみます。 [![Remove a hard drive](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrOtWJytN6efYndlKqf1Cpw7lTifwmWPJzQFHSISVIG-BlpE636iGKT6OIrARQZIgTukes5JfcazwyUDh6LnBbYEAS5RFr4cy9Y-9ClZjyBwhnaBs8FiTW_zs88MfhX6VPP3Klbd90v-8/s320/raidz_1drive_missing.png)](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrOtWJytN6efYndlKqf1Cpw7lTifwmWPJzQFHSISVIG-BlpE636iGKT6OIrARQZIgTukes5JfcazwyUDh6LnBbYEAS5RFr4cy9Y-9ClZjyBwhnaBs8FiTW_zs88MfhX6VPP3Klbd90v-8/s1600/raidz_1drive_missing.png) そして、起動させてみます。 なーんも問題なく起動しました。 これがうまく理屈としては、こうです。 前回のインストール時に、 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 となっていますが。 [![DEGRADED](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikUpO9BjfjRejp52TiviSexgv64v19nm1BkEvvc5g5tXZ3yt7WAh81cNFouVZkEQ6pwOm4x4rAptN4ZwbzgnzuaNvqSCY6cvw1Bt5QxE3rlygCJnNgBXIcgUecNke5-k1OYqEYQL34ZIA/s320/DEGRADED.png)](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikUpO9BjfjRejp52TiviSexgv64v19nm1BkEvvc5g5tXZ3yt7WAh81cNFouVZkEQ6pwOm4x4rAptN4ZwbzgnzuaNvqSCY6cvw1Bt5QxE3rlygCJnNgBXIcgUecNke5-k1OYqEYQL34ZIA/s1600/DEGRADED.png) ### 1台追加して復旧する ### このままでは、冗長性がなくて、心もとないので、新しいHDDを買ってきて接続したという想定にしましょう。 VirtualBox に新しく ernie4.vdi というディスクを追加しています。 [![add a new drive](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCEhj48_6S7wx7bcAvzNIZd0_yg72vose4_EFYjr7D8ylA7OgY7GPZ9Y8wW_ZqrIZMYGA7_6bm87dfJD387tofuOYRtDX3TtT0KMO9D8F2PW_XSjvF2IvhFUJQAkzgsl9TQWQORoDV1F8/s320/new_drive.png)](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCEhj48_6S7wx7bcAvzNIZd0_yg72vose4_EFYjr7D8ylA7OgY7GPZ9Y8wW_ZqrIZMYGA7_6bm87dfJD387tofuOYRtDX3TtT0KMO9D8F2PW_XSjvF2IvhFUJQAkzgsl9TQWQORoDV1F8/s1600/new_drive.png) 起動させて、他の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です。 [![resilvered](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUZCASEfwFnFjJM9_PMuR6PkcodpI45vQjsaF9bEgUJiMI-oXXIAOW6ZxOcEBaXIJDskw45Zh3IxgDpXXiUFdr3wyTt41PyEUxh-_PO_RaCdDI7BwuIy4iej8Wu9oyjIckBHCGZ-mZSCY/s320/resilvered.png)](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUZCASEfwFnFjJM9_PMuR6PkcodpI45vQjsaF9bEgUJiMI-oXXIAOW6ZxOcEBaXIJDskw45Zh3IxgDpXXiUFdr3wyTt41PyEUxh-_PO_RaCdDI7BwuIy4iej8Wu9oyjIckBHCGZ-mZSCY/s1600/resilvered.png) これで冗長性が確保されたので、またどれか1台取り外しても、何の問題なく起動します。 ZFS 素晴らしすぎる。 [次回](/2013/06/freebsd-3.html)は、まともに使えるようにいろいろとセットアップしていきます。
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿