ここのことはなかったことにするかもしれない

仕事がらみの記事を主として扱いますが、あくまで個人ブログです。2013年以前の記事は https://yellow-73.hatenablog.com/ にあります。

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