zfs sync=disabledはどのくらい危ないのか

VMware ESXi用ストレージをZFS+NFSで運用していると必ず出てくる “sync=disabled” の件。
できればZIL(ZFS intent log)にSSDを使うなどして、安全にレイテンシを削るのが望ましいが、そうは言っていられないこともある。
仕方なく”zfs set sync=disabled”するとどれくらい危険かを少しだけ計ってみた。本当に少しだけ。

わざわざ調査用にシステムを組むのは面倒だったので、実験中のストレージをそのまま使った。
実験用のシステムはVMware ESXi→NFS+ZFS→iSCSIというやや面倒な構成をしている。
ESXi上のVMからは、常時NFS上のデータストア(の上のディスク)にddでzeroを書き続けさせて、電源を抜いたり電源ボタンを長押ししたりしていじめている。

結果は以下の通り。

  • NFS+ZFSなマシンの強制リブート
    10回実施して、特にこれといった異常は発生せず。zfs scrubでも異常は検知されなかった。
  • iSCSIストレージのリブート
    10回すべてでzpool scrubでチェックサムエラーを検知。mirrorだったのでそのまま回復。
    2台あるiSCSIストレージを両方ほぼ同時に停止した場合はmirrorでも修復できないケースが発生した。

metadataが壊れてアクセスすら不能になる、というようなケースは発生しなかったが、データ側の破損は(当然ながら)発生するようだ。
ちなみに、上の確認では”ESXiから見た整合性”は検証していない。つまりNFS/ZFS/iSCSIの異常時に”ESXi上のVMが安全に稼動を継続できるか”は怪しく、”一度VMを停止したのちに無事に起動できるか”を確認しただけであることに注意したい。