ZFSでリハウス 完?

や、やっとできた。。。

これまでのあらすじ

1TBx2のZFS mirrorを2TBx2に交換すべく、HDDを片方ずつzpool replaceしてやればいいかと思えばさにあらず。

  • HDDの2台目(ad6)の方は、置き換えから同期まで、まあ順調にできた
  • HDDの1台目(ad4)を新品HDDに置き換えたら、起動しなかった
  • 8.1-BETA1のmemstickで起動して、Fixitで同期させた

朝起きたら、同期が終わってた。

続き

Fixitを抜けて、memstickを抜いて再起動したところ、loaderまではいくが、boot: の後でくるくる回った後で固まる。
直感的に、zpool.cacheを作り直さんといかんのかなぁと思い(結果的には関係なかった)、もいちどFixitで起動して

Fixit# kldconfig /dist/boot/kernel
Fixit# mkdir /boot/zfs
Fixit# zpool import -R /mnt -f pool1
Fixit# zpool set cachefile='' pool1
Fixit# mkdir /mnt3
Fixit# mount -t zfs pool1 /mnt3
Fixit# cp /boot/zfs/zpool.cache /mnt3/boot/zfs/

詳細は省く、というか、半日くらい試行錯誤した結果が上のだけど、詳細は忘れた。
で、リブート→気分的にくるくる回る時間が延びたような気がしたけど、結局固まる。
も一度リブートして、boot: のプロンプトでいろいろやってたら、やっぱり固まる。うー、そもそもZFS以前の問題か?ひょっとして4kセクタのアクセスがうまくいってなくて、固まってるんじゃなくて時間がかかってるだけ?とか考えて、しばらくほっといたけどやっぱりダメ。キーボードのNUMLOCKが反応しないし、フリーズ確定。
最後は、これでダメなら1TBに戻すかなぁと思いながら、memstickからでなく、同期済みの/bootにあるpmbrとgptzfsbootをad4に書き込んでリブートしたら。。。起動した!

何だったのか?

ad4を新しいのに取り替えて起動したら、ad6から起動しなかったので、手元にあったfreeNASのUSBイメージで起動して、ad4のGPTを切った。
そのときにbootcodeも書き込んだはずなので、FreeBSD-7ベースのpmbrとgptzfsbootで、そいつが古かったということ。。。かなぁ。。。

最終的に

無事に2TBになりました。OFFLINEとかUNAVAILとかは、ad4のreplaceが完了直後は見えていたけど、そこでリブートした後は消えていた。

$ zpool status
  pool: pool1
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        pool1       ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            ad6p2   ONLINE       0     0     0
            ad4p2   ONLINE       0     0     0

errors: No known data errors
$ zfs list
NAME          USED  AVAIL  REFER  MOUNTPOINT
pool1         877G   957G  55.6M  legacy
pool1/home    739G   957G   739G  /home
pool1/share  25.1G   957G  25.1G  /share
pool1/space  93.2G   957G  93.2G  /space
pool1/swap      2G   959G   134M  -
pool1/usr    17.2G   957G  14.6G  /usr
pool1/var    46.1M   957G  46.1M  /var

ついでに

パラメータいじってみた。これでbuildworldやportsの更新が早くなるといいのだけど。

# zfs set atime=off pool1/usr