====== 空き容量0でZFSが壊れた?Input/Output errorが発生→再起動で直った ====== 不注意でProxmox VEのZFSプールを使い切り、空き容量がゼロという状態になってしまった。すべてのデータセットのAVAILが0という本物のゼロである。VMのディスクがthinで図らずもオーバーコミット状態となっており、VM内で物理容量以上のファイルコピーを行ってしまったのが原因。当然ながらVMは固まるわ、PVEもWebコンソールから何もできないわで超焦った…。 幸い物理コンソールは生きていたので、不要なZVOLを消して事なきを得たと思いきや、ファイル操作をするとInput/output errorが起きるようになってしまった。 root@myserver:/etc/pve/nodes/myserver/qemu-server# touch test touch: cannot touch 'test': Input/output error ファイル/ディレクトリの作成、削除がダメ。既存ファイルの読み込みは問題なさそうで、書き込み系がダメっぽい。それもすべての場所でダメというわけではなく、ルートディレクトリ直下は大丈夫だったりする。同じデータセットなのに。 もちろん''zpool scrub''でエラーが出ないことは確認済み。というわけで実に厄介というかヤバい状況なのであーる。どうすんのこれ… 関係しそうなバグチケ報告もあるにはある。 * [[https://github.com/openzfs/zfs/issues/10697|silent corruption gives input/output error but cannot be detected with scrub, experienced on 0.7.5 and 0.8.3 versions · Issue #10697 · openzfs/zfs · GitHub]] * [[https://github.com/openzfs/zfs/issues/11443|silent corruption for thousands files gives input/output error but cannot be detected with scrub - at least for openzfs 2.0.0 · Issue #11443 · openzfs/zfs · GitHub]] が、ほとんど関係ない気がしなくもない。うちはサイレントじゃないし。実は静かに壊れてて今回ので発現した可能性もあるが、ほんの数日前にVM追加してるしちょっと考えにくい。FreeBSDの方では何だかんだ10年ほどZFSを使っているが、データが壊れたのはそれなりに原因が分かっている2回しかない([[blog:2011:2011-10-21|1回目]]、[[blog:2017:2017-03-18|2回目]])。 容量ゼロをトリガーにLinux側とZFS側で何らかの齟齬が発生し、容量の回復がLinux側に伝わってないとかが原因なら再起動で直りそうなものの、シャットダウンしたが最後、完全に壊れてPVEが立ち上がらなくなる可能性もありそうで恐ろしい。この記事も書いているメイン環境は、そのPVE上で動いているのでPVEの死=メイン環境の死なので慎重にならざるを得ない。 ---- **(2021-11-24 追記)** 意を決してPVEマシンを再起動してみたら、Input/output errorは出なくなった。何事もなかったようにVMも動いている。 ZFSではCoWの関係上、一般的に空き容量がプール容量の10~20%((昨今の2桁テラバイト級のプールなら5%程度でも良さそうだが))を切ると危険水域とされている。予めプール全体にquotaをかけておけば、今回のようなヤベェ自体は予防できるだろう。