障害対応
ディスクにエラーが発生すると,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