7, 8年前くらいに動かなくなったと思しきハードディスクが出てきました。
結構前なので何が入っていたのかも朧げなのですが、せっかくなのでサルベージにチャレンジすることにしましたのでその備忘録です。
注意
この記事の内容は(自分で言うのもあれですが)上級者向けです。
あくまでも参考例に過ぎず、当記事に基づいた作業の結果を保証するものではないので、別にデータは取り出せなくても構わないという前提の自己責任でお願いします。
本当に救出する必要のある重要なデータは然るべき業者に復旧を依頼してください。
臨床診断と準備
動かなくなったのは東芝製のMK8032GAX(発売は10年以上前!)で、ケーブルを接続したときに「ジー、ジー」という音が一定間隔で鳴り続け、もちろんOSでは認識できないという状況になっていました。
手を触れても振動が感じられないのでモータは回っておらず、基板を見ても目立った損傷は見当たりません。
こうなると物理障害でほぼ決まりだろうというところで、いろいろとインターネットの海を彷徨いました。
とりあえず読み漁った文献がこのあたりです。
- http://0kb.blogspot.com/2015/06/hdd-hdd_27.html
- https://blog.aleajactaest.org/article_svvisrg2iva7lmmktrzgs3fk44.html
- https://ameblo.jp/i-loop/entry-11609612455.html
基板スワップはそもそもできなさそう
調べていくうちにハードディスクと駆動する基板は1対1対応となっていて、基板を交換する場合は固有の情報が書き込まれているEEPROMも移植する必要があるという情報を得ました。
が、東芝のHDD基板を見るとそれらしき素子がありません。おそらくプロセッサのROMに書き込まれていると思われるのでこの情報を抜き取るのは難しそうでした。
幸い基板が壊れているわけではなさそうなので内部について考えます
同じ型番のHDDを手に入れる
中身を見るまでは確実なことは言えないですが、HDD内部の物理障害である前提で同じ型番のHDDを探すこととしました。同じ型番でも生産国や細かいコードの部分まで同じものはなかなか見つかりませんでしたが、探し始めてから1週間ほどして幸いにもヤフオクでの出品があったので即決で購入。シリアルナンバー以外は生産国などが同一のHDDを3000円ほどで手に入れることができました。
そのついでで別の型番のHDDを2台メルカリで購入しました。こちらは2台で1000円ちょっとで、事前演習用に買ったものです。
工具を手に入れる
作業を行うにあたって持っていなかった以下の物品をAmazonで購入
- トルクスねじ用ドライバー
- ハンドブロアー(ホコリ除去用)
- IDE-USB変換ケーブル(SATAは持ってたのに……)
- ニトリルゴム手袋(プラッタに直接触れないように念のため購入)
確定診断
まずはメルカリで買ったほうのHDDを開け、HDD内の構成やヘッドの構造を確認する事前演習を行いました。この部分については割愛します。
いよいよ中身を見ていきます。
基板を外し、基板側にあるトルクスねじを少しだけ緩めておきます。
ラベル側の隠しトルクスねじも全て外してふたを開けると……
ヘッドがプラッタに吸着しとるやないかい!!!!
この状態で動かそうと電源繋いでいたのヤバいですね。よくヘッドが壊れなかったものだな……。
処置
とにかく原因が分かったのでデータを取り戻すための作業に入ります。
ヘッド退避
YouTubeで見た動画の見よう見まねでヘッドを退避させます。プラッタを反時計回りに回しつつアームをずらしていくらしい。
寿命が18時間くらい縮みました。
ヘッドを退避させましたが、手で動かすと引っかかりを感じる状況でした。
おかしいのではと思いスペアのHDDを開封し、明らかに滑り方が違うことを確認したのでヘッド交換をすることが確定しました。
ヘッド交換
事前に練習用のディスクでヘッド交換を練習していましたが、普通に失敗してヘッドをダメにしてしまったのでその点も踏まえて交換していきます。
ふたを開けてから、ヘッドを駆動するコネクタのねじと永久磁石を固定するねじをはずします。
次にヘッドの間の空隙を確保するために、お菓子のパッケージや名刺のような紙を小さく切ってから折って差し込みます。
続いて永久磁石を取り外します。勢いあまってプラッタに触れることがないように注意が必要です。
ヘッドの空隙が保たれていることを確認してアームをずらし、緩めておいた基板側のねじを外して取り出します。
同様にしてドナーHDDからヘッドを摘出し、反対の手順で移植します。ヘッドを押さえながらの軸ねじ止めが鬼門。
移植したヘッドを手で動かしてみると、滑らかに動いていたのでおそらく大丈夫そうです。
最後にハンドブロアーでプラッタに付着したホコリを飛ばしてふたをします。
ディスクイメージをクローンする
次はHDDをコンピュータに接続してデータを取り出します。今回はUbuntuを起動したマシンに接続し、ddrescueを使ってクローンを作成することにしました。
HDDを接続してから/var/log/kern.log
を覗くと無事/dev/sdd
として認識されていることがわかります。第一関門突破です。
userver kernel: [7324950.235477] usb 1-2: new high-speed USB device number 10 using xhci_hcd
userver kernel: [7324950.387134] usb 1-2: New USB device found, idVendor=152d, idProduct=2338, bcdDevice= 1.00
userver kernel: [7324950.387137] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=5
userver kernel: [7324950.387140] usb 1-2: Product: USB to ATA/ATAPI bridge
userver kernel: [7324950.387141] usb 1-2: Manufacturer: JMicron
userver kernel: [7324950.387143] usb 1-2: SerialNumber: 3BA27580321A
userver kernel: [7324950.388946] usb-storage 1-2:1.0: USB Mass Storage device detected
userver kernel: [7324950.389463] scsi host3: usb-storage 1-2:1.0
userver kernel: [7324951.404570] scsi 3:0:0:0: Direct-Access TOSHIBA MK8032GAX PQ: 0 ANSI: 5
userver kernel: [7324951.405094] sd 3:0:0:0: Attached scsi generic sg1 type 0
userver kernel: [7324951.405168] sd 3:0:0:0: [sdd] 156301488 512-byte logical blocks: (80.0 GB/74.5 GiB)
userver kernel: [7324951.405561] sd 3:0:0:0: [sdd] Write Protect is off
userver kernel: [7324951.405564] sd 3:0:0:0: [sdd] Mode Sense: 28 00 00 00
userver kernel: [7324951.405924] sd 3:0:0:0: [sdd] No Caching mode page found
userver kernel: [7324951.405929] sd 3:0:0:0: [sdd] Assuming drive cache: write through
userver kernel: [7324951.429364] sdd: sdd1
userver kernel: [7324951.431051] sd 3:0:0:0: [sdd] Attached SCSI disk
sdd1とパーティションも見えていますが、早速ddrescueを起動します。
# ddrescue -d /dev/sdd /mnt/hdd/{disk0.img,dd.log}
-d
でダイレクトアクセスを指定し、コピー元、コピー先、ログファイルの順にファイルを指定します。
ログファイルにはコピーの進捗状況が記録されるので、途中でコピーを中断しても同じコマンドラインから再開することができます。
今回前半は調子が良かったのですが、真ん中あたりで不良セクタが多発しており時間がかかる状況でした。
結果的に丸2日ほどかけて80GBのうち99.99%のデータを取り出すことができました。思ってたよりちゃんと取り出せたのでラッキー!
コピーしたディスクイメージをマウントする
前工程で取得したのはディスク全体のイメージなので、とりあえずパーティションがマウントできるかどうかを確かめてみます。
通常Linux上ではディスクデバイスをマウントする場合mount /dev/sda1 /mnt/mountpoint
のような形でマウントしますが、今回はディスクイメージのファイルからマウントしたいので、ループバックデバイスを使います。
ここではループバックデバイスを作成するためにlosetupコマンドを以下のように叩きます。
# losetup -Pf disk.img
-P
オプションではイメージ内のパーティションを自動検出し、-f
オプションでは空いているループバックデバイスを自動で割り当てます。
コマンドを実行してから、/var/log/kern.log
をtailすると以下のように作成されたループバックデバイスと、認識されたパーティションが出力されているのがわかります。
userver kernel: [7644050.585412] loop11: p1
このループバックデバイスをマウントします。
# mount -r /dev/loop11p1 /mnt/rescued
ここで、不用意に変更が加わらないように-r
を指定し読み取り専用でマウントします。
この時点でファイルシステムのメタデータが壊れていなければファイルが読み出せるはずなので、保存用のストレージにコピーしておきます。
今回はMFTの破損がなくほぼすべてのデータを読み出すことができました。黒歴史の嵐で気が狂いそうになりました
全てのファイルを見たわけではないので、不良セクタと判定された部分に書き込まれているデータがあるかどうかは確認していません。
最後にマウントしたデバイスをアンマウントし、losetup -d /dev/loop11p1
としてループバックデバイスを削除したら作業完了です。
今回はddrescueを使って99.99%のデータが読み出せたので文句なしだと思います。
おわりに
今回は1万円ちょっとで調達した物品でデータを吸い出すことができました。
データを救出したのは10年近く前のHDD製品でしたが、最近はプラッタあたりの記憶容量が増えたり、プラッタの枚数が増えたり、そもそも基板がより高度になっていたり?でデータの取り出しはさらに難しくなっていると思います。
悪いことは言わないので後悔する前に大事なデータは複製しておきましょう。本当に。