FreeBSD で ZFS がデバイスを解放する時2014年07月12日 14時40分36秒

FreeBSD でサーバを運用しているわけではないので、FreeBSD は毎日 shutdown している。ZFS も外付けのディスクで使っていて、必要なときだけ繋げる運用方法だ。サーバではないが、毎日常用で使っている。

ZFS を外すときの一つの方法が zpool export。これは ZFS のプールをホストから切り離すときに使う。このコマンドを使うと、zpool history に残る。特に、別のホストに使う時使う。ZFS ではプールがどのホストに繋がっていたかが、記録されている為だ。zpool export をした後に、デバイスを抜き取っても問題ない。zpool import で繋ぎ直す。

zfs umount -a だと、ファイルシステムのマウントは解除されるが ZFS はまだデバイスを保持し続けている。昔は、これで間違って抜いてしまい何度かシステムを止めてしまった。二、三年前の事なので、今でもこの状態で抜くと panic を起こすか確かめてはいないが、geli detach 等は受け付けない。ZFS がまだデバイスを握っている証拠だ。

この状態から更に kldunload zfs を行うとカーネルから、ZFS モジュールが外され、それと共にデバイスも ZFS から解放される。この状態だと、デバイスを外したり、geli detach 等も有効だ。

最初は zpool export を使っていたが、zfs umount -a && kldunload zfs の方が余計な記録が zpool history に残らないし、カーネルから ZFS のメモリが完全に解放されて無駄もない。重要な記録を残してくれるのは嬉しい昨日ではあるが、余分なものが多過ぎると記録の価値も落ちる。