死ぬので。(@FreeBSD 13.0-RELEASE, 2021/07/13時点)
そもそも何故zpool removeしたのか
まずディスクを交換したかった。
大体の場合は、mirrorを作って古いディスクを外せばいい。(zpool attach + zpool remove)
ただ今回はboot領域にうっかりでっかいディスクを使ってしまっていて、SSDに交換しようとしたら容量が足りなかった。
調べたところ、最近のzpoolはzpool addしたあとremoveできて、これを使うと、poolのshrinkができる。
てきとーにやってみたら、簡単にできてしまった。(ぎりぎりに縮小することはできなくて、ものすごく余裕を持たせる必要はあったが)
感心&安心していた。数日後にrebootするまでは。
panicする
停電etc.でrebootすることもあるが、そのときに(今回みたいな)障害に遭いたくない。というわけで時間があるときにやる。
rebootしたら、こんなpanicが出てrebootループに入ってしまった。
余談1: その前にbootcodeの書き替え忘れもあった。
余談2: rebootが早すぎて読めなかったので、iPhoneで動画撮影して見る羽目になった。
Root mount waiting for: usbus0 uhub2: 4 ports with 4 removable, self powered panic: VERIFY(nvlist_lookup_uint64(configs[i], ZPOOL_CONFIG_POOL_TXG, &txg) == 0) failed
困る
ZFS絡みなのが分かったので、すぐに別のマシンに繋いでテストしたりしたが、まったく問題が見つからない。
zpool import
は正常だし、zpool scrub
しても何も出ない。
解決
実は大分前に、ZIL(log)を取り外したときに同じ現象だったことを(奇跡的に)思い出した。
このときにどうしたかは思い出せなかったが、つまりpoolが悪い。
どうするかは簡単で、zfs send
してzfs receive
すればいい。
boot用なので5GB程度しかなく、すぐに復旧できた。
余談3: cat ... | zfs receive
は遅い。dd if=... bs=262144 | zfs receive
がいい。