2015/01/05

NASに殺されたHDD復活

NASに殺されたHDD。
Linux Mintでアレコレやってるうちに無事復活した。
xfs_repairがダメだったときはもう駄目だと思ったが、partedとtestdiskでパーティション再設定したらいけた。

HDDをSATAケーブルでPCに繋いでやってディスクマネージャを立ち上げると、ディスクマネージャからはパーティションは見えてたのだけれどマウントできない状態だったHDDと、パーティションすら見えてない状態のHDDがあった。
一応、HDDの存在がディスクマネージャから見えないということはなかった。
で、色々やってみた結果、どれともデータを読み出すことができた。

以下私がやったことの忘備録。
つまり以下は技術情報ではなく、記憶を頼りに書くので間違ってる可能性はあるし、コレをすればどんな場合でも全てまるっと解決するということではない。
因みにNASはBuffaloのLinkStationでパーティションテーブルがGPT、データ領域のフォーマットはXFSの場合。

先ずディスクマネージャからパーティション構成が見えてたHDD。
partedのmklabelで一旦パーティション情報を白紙にして、rescueでパーティションを復活させるという流れ。
パーティション構成とその容量を大体メモしておく。
端末で
>sudo parted /dev/sdb
でHDDを指定してpartedを起動して、
(parted) mklabel gpt
としてGPTでHDDのパーティションを再設定。
このときHDDの元々のパーティションは消えてしまう。
で、
(parted) rescue 0MB 3TB
として以前設定してあったパーティションを拾う。
「0MB」のとこは検索開始位置、「3TB」ってのは検索終了位置を設定する。
3TBのHDDなら「3.1TB」とか一寸多めにしてもOK。
で、一個目のパーティションが見つかったらその容量を覚えておく。
例えば1024MBぐらいだったら次は
(parted) rescue 1030MB 3TB
みたいに検索開始位置を前のパーティションの終わりの少し後ろからにする。
パーティションが多い場合は最初にとったメモが役立つという訳だ。
LinkStationの場合、途中で1MB程度の空きパーティションがあったりして検索開始位置を刻んで何回か検索しないといけなかったりする。
検索開始位置が次のパーティションの始まりより後ろだったり前のパーティションの最後より前だったりすると検索が失敗するので。
で、全てのパーティションが見つかったら
(parted) quit
でpartedを抜ける。
あとは目的のパーティションをマウントして、データを抜き出すだけ。

次に、パーティション情報がディスクマネージャから見えないHDDはtestdisk。
端末で
>sudo testdisk /dev/sdb
でHDDを指定してtestdiskを起動。
その後
「Analyse」→「Quick Search」でパーティションが見つかるが何もせず→「Deeper Search」で何時間か待つ。
で、パーティションが見つかったら矛盾が無いようにされらしくパーティションを設定して「Enter」。
あとは目的のパーティションをマウントしてデータ抜き出し。


あとデータ抜き出し後のHDDが何故か再フォーマットできなかったので、partedでmklabel gptしてからフォーマットしたらできたり、fdiskで一旦全部のパーティションを削除しなければならなかったりした。
まあ兎も角イッペン全部パーティションを白紙にしないと不可ないっぽい。