P4039246


ハードディスクが壊れる日は突然やってくるでハードディスクが壊れる時は磁気ヘッダの異常か磁気ディスクの磁気がおかしくなったかのどちらかであることがわかった。


前者は異常になった時点でハードディスク自体が使用できなくなるはずだけど、

後者は酸化鉄の粒子なので粒子毎におかしくなっていくからじわじわくるはずだよね。


そうなると日常的に徐々にデータの読み書きがおかしくなるはずなのに、

実際、パソコンを使用しているとそうはならない。


そうはならないから、

ある時突然読み書きの速度が落ちる。


この背景にはファイルシステムというものがあって、

そこである程度の障害であればどうにかする仕組みがあるらしい。




9784774154640

はじめてのOSコードリーディング ――UNIX V6で学ぶカーネルのしくみ:書籍案内|技術評論社


コンピュータを理解するにあたってOSの理解は大事だけど、

そんな中で実際のコードでOSを理解するというコンセプトの良書がある。


hdd_illst


ハードディスクの磁気ディスクには膨大なデータがセクタという単位で分けられていて、

データの読み書きはセクタで行う。


この時、コンピュータはハードディスクのどのセクタにどんな情報が入っているかを把握しなければ、

書き込まれたデータに対して読み込みを行う事が出来ない。


そのような問題に対して、

ファイルシステムというディスク内のどの位置にどのような情報があるかを管理する仕組みがある。

ファイルシステム - Wikipedia




例えば、ある時、ある箇所のセクタの磁気の保持がおかしくなったとする。

ファイルシステムはそのおかしくなった箇所(不良セクタ)を記憶して、

修復するなり、無視するなりして、

おかしくなった箇所の読み込みを何度も試すといったことを避け、

ディスクに対しての速度の低下を下げない仕組みがある。


というわけで、

Linuxのマシンで不良セクタを探してみることにした。


端末を開き、下記のコマンドを実行した。

# 接続されている外付けHDDのデバイスを調べる /dev/sdb5という値が返ってきた。
sudo fdisk -l

# fdiskでわかったデバイスに対して不良セクタがあるか調べるコマンドを実行
sudo badblocks -o badsectors.txt /dev/sdb5

Checking for bad blocks (read-only test): 0.00% done, 0:00 elapsed. (0/0/0 errors)
_ 5.98% done, 20:02 elapsed (92/0/0 errors)

こんな感じで不良セクタの検索が開始し、一日調べてみた。


結果は


16008040
16008041
16008042
16008043

こんな感じの数字の羅列がずらっと続いていて、

この結果を元に下記のコマンドを実行してみた。


fsck -l badsectors.txt /dev/sdb5

このコマンドの後、


fsck from util-linux 2.28.2

このような表示がされただけで正常に実行されたかわからないけど、

業者が取り出せなかった未回収のデータの一部を取り出すことができた。

fsck - Wikipedia


これをうまくいったと言えるのだろうか?

とりあえず諸々の知識は付いたし、データも回収出来たし良しとしよう。


追記

今回の処理は調べている間にハードディスクを劣化させる可能性があるので、

業者に依頼して専用の機械である程度データを救出してから行うことを薦めます。


関連記事

デジカメ内の写真を間違えて消してしまった時はPhotoRec!