質問: お世話になります。 VMWARE仮想マシンとして利用しているCENTOSにて、ファイルシステムエラーがでており対応策をアドバイスいただけませんでしょうか。 エラーが出ているのは、仮想マシンに接続している外付けUSB接続のHDDです。(エラーメッセージは、最後に載せております。) 1 ファイルシステムのエラーで復旧できそうなのか。 2 ハードディスクの故障なのか。 アンマウントしてfsck チェックしたら改善できそうという情報もあったのですが、あまり操作したことのないコマンドなので、どなたかアドバイスいただけませんでしょうか。 どうぞ宜しくお願い致します。 ``` Aug 16 14:29:13 centos-svn kernel: sd 4:0:0:0: [sdc] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE Aug 16 14:29:13 centos-svn kernel: sd 4:0:0:0: [sdc] Sense Key : Medium Error [current] Aug 16 14:29:13 centos-svn kernel: sd 4:0:0:0: [sdc] Add. Sense: Unrecovered read error Aug 16 14:29:13 centos-svn kernel: sd 4:0:0:0: [sdc] CDB: Read(10): 28 00 06 b4 4d c0 00 00 08 00 Aug 16 14:29:13 centos-svn kernel: end_request: critical medium error, dev sdc, sector 112479680 Aug 16 14:29:13 centos-svn kernel: Buffer I/O error on device sdc1, logical block 14059952 Aug 16 14:29:13 centos-svn ntfs-3g[1054]: ntfs_attr_pread_i: ntfs_pread failed: Input/output error Aug 16 14:29:13 centos-svn ntfs-3g[1054]: ntfs_attr_pread error reading '/SVN/reps/contentShared/db/revs/553' at offset 4096: 4096 <> -1: Input/output error Aug 16 16:13:58 centos-svn ntfs-3g[1054]: ntfs_attr_pread_i: ntfs_pread failed: Input/output error Aug 16 16:13:58 centos-svn ntfs-3g[1054]: ntfs_attr_pread error reading '/SVN/reps/contentShared/db/revs/553' at offset 4096: 5165 <> -1: Input/output error Aug 16 16:13:58 centos-svn kernel: sd 4:0:0:0: [sdc] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE ```
回答: うかつに回答してファイルが消失しても責任は持てず、たいへん回答しにくい質問ではあるのですが......。 ログにある hostbyte, DRIVER_SENSE, Medium Error などの意味は、以下に載っていました。 このログからわかることは、少なくとも /SVN/reps/contentShared/db/revs/553 が記入された部分が損傷しているという事実です。原因が単なるファイルシステムのエラーなのかハードディスクの故障なのかは、他の部分も調査してみないとなんとも言えません。 まずはバックアップの確保 Subversion はそのデータ構造上、途中のリビジョンが破損しているとリカバリは非常に困難ですので、まず、553 のバックアップがないのであれば、早急に別ドライブにバックアップしてください。物理故障であれば、失敗しても何度かトライすると読める可能性があります。 一方、Subversionのバックエンドストアであるfsfsは、いったん生成されたリビジョンデータファイルは不変(プロパティは可変)なので、過去に一回でも取得したバックアップがあれば復旧にはそれが使えます。破損しかけた553のバックアップはさっさとあきらめてもよいです。 なお、故障範囲はそのパーティションを含んだドライブ全体である可能性があります。未バックアップなファイルがあれば、修復作業より前にバックアップを取得することをおすすめします。 回転軸などに故障があったりグリスが固まっている場合、いったん回転を止めると回りださなかったりすることがあるので、脱着は最小限にすべきです。また、ハードディスクは起動時に最も電力を使います。バスパワーで使っているなら外部電源をつなぐ、二股USBケーブルをつかってUSBを二口つかって給電する、太くて信頼できるUSBケーブルを使う、なども検討の余地があります。 他のエラーをチェック 少なくとも、sdc1 すなわち /SVN/reps/contentShared/db/revs/553 を含んでいるパーティションで読み出しエラーが起こっています。検知されたセクタはログから sdc, sector 112479680 ということが分かっています。 ディスクはそれ自身、不良セクタを検知すると、そのセクタを避けて代替セクタを使うように動作します。そのセクタが不良であるとマークされたあとは、そのセクタを踏んでいるファイルを編集した段階で代替セクタが使われます。今回のケースでは、553ファイルをバックアップから書き戻せば代替セクタが使われることが期待できます。 事前に用意した代替セクタを使い切ってしまうと、それ以上は対処できなくなります。smartctlコマンドが使えるようであれば、S.M.A.R.T関連で他にエラーが検知されていないか調べてみてください。大量に出ているようならディスクの寿命が近いので、リプレースをおすすめします。 追記: S.M.A.R.T情報の取り方や読み方は、この質問のsharowさんの回答がとても詳しく大変参考になるので参照してください。(追記ここまで) 修復 パーティションのフォーマットがntfsのようなので、エラーチェックや修復をするのに、fsckよりはWindowsのchkdskのほうが相性が良いかもしれません。バックアップが確保されていることを改めて確認したうえで、修復モードで実行することで、ディスクのエラーおよびファイルシステムの整合性がチェックされます。不整合があってみなしごだったファイルは、救出可能であればマウントポイントの lost+found とか FOUND.000 といったディレクトリに移されています。 救出できなかったファイルはどうしようもないので、バックアップから戻すなりしてください。上記のとおり、不良セクタにマーク済みであれば、553ファイルを上書きするだけで Subversionのリポジトリは復旧できているはずです。