root@gw3:/# zpool status -v pool: bk1 state: ONLINE status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://www.sun.com/msg/ZFS-8000-8A scrub: none requested config: NAME STATE READ WRITE CKSUM bk1 ONLINE 0 0 0 ad1 ONLINE 0 0 0 errors: Permanent errors have been detected in the following files: /.backup/bsdsrv15/rsync/local/man/man1/mysqltest.1.gz bk1/bsdsrv15:<0xf740> /.backup/bsdsrv15/rsync/local/share/emacs/23.3/etc/images/mail/spam.xpm
ヽ(´д`;)ノ
修復は可能か!?
まずは、scrub をかけてみるところから。。。
★ 後日談:
問題のファイルを削除し、scrubをかけると、マシンが落ちて、リブートする(ログ無し) → 起動時、zpool importされ、応答が無くなる → 起動出来ない
という事態になりました。
zpool export されていれば、問題ないのでしょうか、異常終了して、再起動してしまったので、自動マウントされていまいます。
仕方なく、LiveUSBで起動した、OpenIndianaなマシンに、zpool import -af とし、強制マウント。
そうしたら、自動で、scrubが走り、エラーは消えましたが、そのまま使用するにしても、潜在的な問題が抱えていても
*1
怖いので、新しいHDDにzfs send | zfs recv してマイグレーション。`
バックアップディスクの容量がかなり厳しかったので、新しいHDD(1TB)に引っ越し。
zpool replace というコマンドや、mirror にして、古いHDDをdetachするという方法もありますが、今回は上記の理由により採用せず。
ただしいフローは、
Oracle Solaris ZFS 管理ガイド 破壊されたファイルまたはディレクトリを修復するを参照に、clear をしなさいってことです。。
@kfujieda さん、情報ありがとうございます。
上記には、ファイルが破損した場合、
ディレクトリまたはファイルのメタデータの中で破壊は発生している場合には、そのファイルを別の場所に移動するしかありません。任意のファイルまたはディレクトリを不便な場所に安全に移動することができ、そこで元のオブジェクトを復元することができます。
とありますが、その後のやり方を書いていません。
次のページにある
ZFS ストレージプール全体の損傷を修復するを参照すると、zpool import -F コマンドを使用して、プールの回復を試みます。
というのがあるので、そちらを使うのが正しいでしょう。
しかし、importを試みた段階で、scrubが走ったため、importする前に、zpool clear をするのが正しいのかもしれません。