障害対応

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

results matching ""

    No results matching ""