新年あけましておめでとうございます。のときにzfs遊び。
NetBSDのZFS(zpool)ではプール構築時にgptのラベル名での指定が できないのでzpoolには生の物理デバイス名が入ることになる。 もしくはgptで作成したパーティションに対するディスクの /dev/dkN が入る。 これ結構困って、接続デバイスやgptパーティションが増減して デバイス番号が変わると再起動時にzpoolを認識しなくなる。 どういうときにそうなって、どうすれば直せるのか実験。
前提: mirror化のzpoolの2つのデバイスが A と B だとする。 zpool名が pool だと仮定。
実際には A=/dev/wd2d, B=/dev/wd3d で実験。
リブート後: 認識する
リブート後: 認識せず
対策: zpool export pool; zpool import -f pool
ということで、1個でも元のデバイス名と同じならIDを比べてくっつけてくれ るようだが、以前のデバイス名とどれも一致しない場合は見つけてくれない。 そんな場合はこういう風になってとっても不安。
zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
pool - - - - - - - UNAVAIL -
statusを見ると一応記録は残っている。
zpool status
pool: pool
state: UNAVAIL
status: One or more devices could not be opened. There are insufficient
replicas for the pool to continue functioning.
action: Attach the missing device and online it using 'zpool online'.
see: http://illumos.org/msg/ZFS-8000-3C
scan: none requested
config:
NAME STATE READ WRITE CKSUM
pool UNAVAIL 0 0 0
mirror-0 UNAVAIL 0 0 0
2964961224200736063 UNAVAIL 0 0 0 was /dev/wd2d
17056533253814297529 UNAVAIL 0 0 0 was /dev/wd3d
残っているのでこのままだと元のpool名ではimportできない。 それゆえ export してから import -f する。export の代わりに destroy でもよい。