障害対応
ディスクにエラーが発生すると,zpool statusコマンドで表示されるステータスが DEGRADED になる.
エラーが多発している場合には対象のディスクのステータスが FAULTED,最悪の場合には OFFLINEになっていることもある.
Oracle Solaris ZFS 管理ガイド "トラブルシューティングとプールの回復"
http://docs.oracle.com/cd/E19253-01/819-6260/gavwg/index.html
$ sudo zpool status
pool: pool0
state: DEGRADED
status: One or more devices are faulted in response to persistent errors.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Replace the faulted device, or use 'zpool clear' to mark the device
repaired.
scan: none requested
config:
NAME STATE READ WRITE CKSUM
pool0 DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
zfs0 ONLINE 0 0 0
zfs1 ONLINE 0 0 0
zfs2 FAULTED 37 128 0 too many errors
zfs3 ONLINE 0 0 0
zfs4 ONLINE 0 0 0
raidz2-1 ONLINE 0 0 0
zfs5 ONLINE 0 0 0
zfs6 ONLINE 0 0 0
zfs7 ONLINE 0 0 0
zfs8 ONLINE 0 0 0
zfs9 ONLINE 0 0 0
errors: No known data errors
エラーのクリア
FAULTED の場合には,zpool clear コマンドでとりあえず一旦エラーカウントをクリアし,継続して利用することが可能である.
$ sudo zpool clear pool0
何度もエラーが起きる場合には後述の方法で交換することを推奨する.
ディスクの交換
故障により認識されなくなってしまった場合や,エラーが多発するディスクを交換するには,zpool replaceコマンドを利用する.
もし,まだ対象のディスクが OFFLINE になっていない場合には先に zpool offline プール名 デバイス名 コマンドでオフラインにしする.
$ sudo zpool offline pool0 /dev/disk/by-partlabel/zfs2
$ sudo zpool status
pool: pool0
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: none requested
config:
NAME STATE READ WRITE CKSUM
pool0 DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
zfs0 ONLINE 0 0 0
zfs1 ONLINE 0 0 0
zfs2 OFFLINE 0 0 0
zfs3 ONLINE 0 0 0
zfs4 ONLINE 0 0 0
raidz2-1 ONLINE 0 0 0
zfs5 ONLINE 0 0 0
zfs6 ONLINE 0 0 0
zfs7 ONLINE 0 0 0
zfs8 ONLINE 0 0 0
zfs9 ONLINE 0 0 0
errors: No known data errors
この状態で,ディスクを交換し,まず最初にプールを作成した時と同様に同じパーティション /dev/disk/by-partlabel/zfs2 を作成する.
ここまで準備しておいて,最後にzpool replace コマンドでディスクの入れ替えを通知する.
$ sudo zpool replace pool0 /dev/disk/by-partlabel/zfs2
$ sudo zpool status
pool: pool0
state: ONLINE
scan: resilvered 101K in 0h0m with 0 errors on Mon Dec 29 02:23:30 2014
config:
NAME STATE READ WRITE CKSUM
pool0 ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
zfs0 ONLINE 0 0 0
zfs1 ONLINE 0 0 0
zfs2 ONLINE 0 0 0
zfs3 ONLINE 0 0 0
zfs4 ONLINE 0 0 0
raidz2-1 ONLINE 0 0 0
zfs5 ONLINE 0 0 0
zfs6 ONLINE 0 0 0
zfs7 ONLINE 0 0 0
zfs8 ONLINE 0 0 0
zfs9 ONLINE 0 0 0
errors: No known data errors
zpool replaceコマンドはディスクの利用量にかかわらず,短時間で完了する.
この後,バックグラウンドで実際の再構築処理が行われるのである.
再構築中はzpool statusで進捗と推定残り時間が確認できる.上記の例のようにすべてONLINEになれば完了である.
データの整合性のチェック
zpool scrubコマンドを実行することで,全データのチェックサムの再確認ができる.
これにより,普段参照しない領域についてもエラー検出と訂正をすることができる.
$ sudo zpool scrub pool0
ディスクの再構築と同様に,zpool statusで進捗と結果を確認することができ,キャンセルする場合には -s をつけてコマンドを実行すればよい.
$ sudo zpool scrub -s pool0