NetBSD Advent Calendar 2025 15日目の記事です。今日はZFSまわりの障害対応メモを紹介しようと思います。
概要
長らくZFSに触れる機会がなかったのですが、将来的な自宅サーバの置き換えを見据え、試験的にZFSを運用しつつ運用ノウハウを集めています。今回はZFSストレージプールがSUSPENDEDになる障害に見舞われた際の対応手順を備忘録的に残しておこうと思います。
障害発生時の状況
- ZFSストレージプールからZFSファイルシステムを作成して運用していた。
- USBメモリを2本使用し、ミラーリング構成でZFSストレージプールを構築。
- いつの間にやら zfs list でZFSファイルシステムが参照できなくなっていた。
- zppl status で確認すると、stateが SUSPENDED になっていた。
$ zfs list
no datasets available
$
$ zpool status -v
pool: upool
state: SUSPENDED
status: One or more devices are faulted in response to IO failures.
action: Make sure the affected devices are connected, then run 'zpool clear'.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-HC
scan: scrub repaired 0B in 00:00:53 with 0 errors on Mon Apr 17 16:07:22 2023
config:
NAME STATE READ WRITE CKSUM
upool ONLINE 0 0 0
mirror-0 ONLINE 4 256 0
gpt/hub00-DISK-0022CFF6BD8EC5C01322B17E ONLINE 3 261 0
gpt/hub01-DISK-0022CFF6BD70C5B1E321258E ONLINE 4 261 0
errors: List of errors unavailable: pool I/O is currently suspended
原因
- PCにUSBハブを接続し、そこにUSBメモリを2本差してストレージとするもUSBハブの品質が悪く、接続断した状態になっていた。
- そのためストレージが参照できず、I/O errorによりZFSストレージプールがSUSPENDEDとなっていた。
対応手順
- USBメモリ内のデータはそのままなので、ZFSストレージをインポートすることで対応した。
- まずはインポートできるストレージプールを確認する。
$ # この段階では、ZFSストレージプールが利用不可になっている状態。
$ zpool list
no pools available
$
$ # インポート可能なZFSストレージプールを確認。
$ sudo zpool import
pool: upool
id: 16979329446999820469
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
upool ONLINE
mirror-0 ONLINE
gpt/hub00-DISK-0022CFF6BD8EC5C01322B17E ONLINE
gpt/hub01-DISK-0022CFF6BD70C5B1E321258E ONLINE
$ # ZFSストレージプールをインポート。
$ # もしストレージプール名が重複している場合は、 `zppol import upool upool2` のように、
$ # ストレージプール名を変更してインポートすることも可能。
$ sudo zpool import upool
$
$ # ZFSストレージプールがONLINEになった。
$ zpool list -v
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
upool 14G 466M 13.5G - - 0% 3% 1.00x ONLINE -
mirror-0 14G 466M 13.5G - - 0% 3.24% - ONLINE
gpt/hub00-DISK-0022CFF6BD8EC5C01322B17E 14.4G - - - - - - - ONLINE
gpt/hub01-DISK-0022CFF6BD70C5B1E321258E 14.4G - - - - - - - ONLINE
$
- 無事に障害から復帰できた。
$ # ZFSファイルシステムも参照できており、障害から復帰できた。
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
upool 466M 13.1G 24K /upool
upool/sample01 465M 13.1G 465M /upool/sampl01
upool/sample02 101K 13.1G 101K /upool/sampl02
まとめ
ZFSストレージプールがSUSPENDEDになってしまった場合の対応手順を紹介しました。今回のケースではZFSの運用ノウハウを蓄積するという側面もあり、結果的に知見が得られて良かったのですが、障害の発生要因である「USBハブの品質が悪い」は実運用上リスクになる要素であるため、品質の良いUSBハブを使いましょう(それはそう…)。