zpool を破損し zpool clear では復旧できなかったが zpool import -F で直った2023年02月06日 12時32分28秒

Acer で FreeBSD 12.4-RELEASE の DRM を実験していた。どうもカーネルモジュールに問題があるようで、何度かパニックを起こす。zfs なので、問題ないだろうと実験を続けていたら、マウント出来なくなった。

まあ、これは作業用の zpool なので、基本的に一時作業用のファイルが多い。一応、DRM の動作が怪しいのは分かっていたので、zfs snapshot や重要なバックアップはすぐ直前まであった。それでも、復旧の手間と時間を考えると復帰したいところ。

最初に問題に出くわしたのは、クラッシュ後の zfs mount が失敗する。プールの名前は backup。まずは、zpool status で調べる。

$ zpool status backup
status: The pool metadata is corrupted and the pool cannot be opened.
action: Recovery is possible, but will result in some data loss. ... Recovery can be attempted by executing 'zpool clear -F backup'.  A scrub of the pool is strongly recommended after recovery
そこで、zpool clear -F で復旧を試みる様に指示がでる。
$ zpool clear -F backup
cannot clear errors for backup: I/O error
しかし、何度試しても復帰は出来なかった。12.4-RELEASE で試していたが、 13.1-RELEASE でも試してみた。13-RELEASE から zfs の実装の派生が変わったので、もしかしたらと期待を込めて試してみた。しかし、zpool clear -F は相変わらず失敗。

仕方が無いので、一度 export してから復帰できないかを試してみた。

$ zpool export backup
$ zpool import backup
cannot import 'backup': I/O error
  Recovery is possible...  Recovery can be attempted by executing 'zpool import -F backup'. A
$ zpool import -F backup
zpool import では同じエラーで失敗。しかし、import -F を試す様にと出来てた。zpool import -F を実行。こちらは成功し、一度は壊れたと認識できていなかったプールをマウント出来る様になった。

要約すると、zpool clear -F で復旧できなくても、zpool export と zpool import -F で復帰できるかも知れないので試す価値がある。