読者です 読者をやめる 読者になる 読者になる

exFatのブート領域がosxに壊されたので直した話

コンピューター

移転しました。

exFatの外付けハードディスク1台目から、2台目へバックアップをしていたところ、i/oエラーを吐いてバックアップが止まりました。
再マウントしようとしたところ、ファイル・システムを認識せずマウントできません。ディスクユーティリティで見たところ、1台目も2台目も未フォーマットとなっていました。
調べてみたところosxでは、exFatをしばしば正しく扱えず、ブート領域を壊してしまうようです。osxではexfatは扱わないのが安全です。
google:osx exfat corrupt
google:exfat raw


windowsのchkDiskや、TestDiskでブート領域を調べたところ、1台目はRAW形式となっており、exFatであることすら認識していません。2台目は、exFatとは認識しますが、chkDiskだとブート領域が両方壊れていると出て修復できません。TestDiskでは、2台目のバックアップブート領域が生きていると出ましたので、それをメインブート領域へコピーしました。しかし、2台目は復旧しませんでした。バックアップブート領域以降のFat領域も壊れているようです。
ただ、2台目のバックアップブート領域をhexdump -Cで読むと、それ自体は完全な状態で保持されていることがわかりました。
1台目のブート領域をhexdumpで読むと、メインブート領域とバックアップブート領域の前半は全くこわれていますが、バックアップブート領域の終端のチェックサムは生きていることがわかりました。壊れたのは両ブート領域だけであることを期待して、2台目のバックアップブート領域をddで1台目にコピーしました。
すると、1台目が正常にマウントできるようになりました。


この経験から次の対策をすることにしました。

  • osxexFatを扱うのは壊れても良い場合のみにする。
  • ブート領域のバックアップをddで取っておく。


TestDiskの使い方 : http://www.cgsecurity.org/wiki/TestDisk_Step_By_Step
exfatのボリュームレイアウト: http://ntfs.com/exfat-volume-layout.htm