raidz1に根性試しをやったった
上述のファイルシステムを組んだので、とりあえず根性がどれだけあるか見てやろう、という悪趣味な言い回し。
ご注意
ホットプラグ対応機です。ホットプラグ非対応機はこの通りに動かないと思ってください。
根性試し#1 HDD0 を取り外してまた挿す
まずは状況確認を。
# zpool status pool: rpool state: ONLINE scan: resilvered 45K in 0h0m with 0 errors on (日時) config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 gpt/disk0 ONLINE 0 0 0 gpt/disk1 ONLINE 0 0 0 gpt/disk2 ONLINE 0 0 0 gpt/disk3 ONLINE 0 0 0 errors: No known data errors
では、HDD0 (gpt/disk0) をひっこ抜くためにpoolから外れてもらいましょう。
zpool offline rpool gpt/disk0
状況を見てみます。
# zpool status pool: rpool state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scan: resilvered 45K in 0h0m with 0 errors on (日時) config: NAME STATE READ WRITE CKSUM rpool DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 116328396479981598 OFFLINE 0 0 0 was /dev/gpt/disk0 gpt/disk1 ONLINE 0 0 0 gpt/disk2 ONLINE 0 0 0 gpt/disk3 ONLINE 0 0 0 errors: No known data errors
disk0が"OFFLINE"になりました。この状態になったら、抜いていいです。
再びさして、ボリュームがマウントされましたよ、とかコンソールに出た。
が、さすがにオートで"online"になりませんでした。まあそれはいいや。
再びdisk0に"ONLINE"になってもらいましょう。
zpool online rpool gpt/disk0
で、なにごもとなかったようになります。
根性試し#2 HDD0 を抜いてブートして挿してやる
いったんシャットダウンしたうえで HDD0 を抜いてブートしてみる。
ここで、すべてのHDDにブートコードを埋めたのが効いてきます。
HDD0だけのブートコードを入れてたらブートコードが読めないから起きてこない。
HDD1 のブートコードを読んでブートを始めると、ZFSは生きているわけですからブートプロセスが動いてくれる。理屈上できるのはわかるんですが、本当にブートできるものなんですね。ちょっと感動した。
挿さってない状態から、挿し直して、"ONLINE" にするのは 根性試し#1 と同じです。
根性試し#3 HDD2 を抜いた後ファイルを書き込んだ
HDD故障時をシミュレートしたようなものです。
ちょうどportsを取って来てなかったので、実験と実作業を兼ねています。
まずは"OFFLINE"にします。
zpool offline rpool gpt/disk2
で、portsをfetch。
portsnap fetch
終わったところで HDD2 を抜く。
さらにportsの展開。
portsnap extract
途中で zfs list で見ているが、rpool/root のUSEDが順調に増えていき、問題が無い。
# zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 981M 7.82T 46.4K none rpool/home 56.9K 7.82T 56.9K legacy rpool/root 981M 127G 981M legacy (時間をおいて) # zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 1.27G 7.82T 46.4K none rpool/home 56.9K 7.82T 56.9K legacy rpool/root 1.27G 127G 1.27G legacy
さて、挿し直そう。
さきほど同様、挿してコンソールにメッセージが出たあと
zpool online rpool gpt/disk2
で、disk2を戻しました。
自動的にresilveringとかいうのをはじめます。
# zpool status pool: rpool state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since (日時) 424M scanned out of 1.69G at 35.3M/s, 0h0m to go 106M resilvered, 24.45% done config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 gpt/disk0 ONLINE 0 0 0 gpt/disk1 ONLINE 0 0 0 gpt/disk2 ONLINE 0 0 0 (resilvering) gpt/disk3 ONLINE 0 0 0 errors: No known data errors
時間がたつと
NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 gpt/disk0 ONLINE 0 0 0 gpt/disk1 ONLINE 0 0 0 gpt/disk2 ONLINE 0 0 0 gpt/disk3 ONLINE 0 0 0
なにごともなかったようになりました。
根性試し#4 HDD3 をいきなり抜いてみた
根性試し#1 のような"OFFLINE"にしてから抜くとか、そんなのは甘えだ、いきなり引っこ抜く。まさに根性試し。
本当にやってみたところ、抜いた瞬間カーネルパニック起こしてリブートしましたorz