HDDを救済するぞ(Windows+Cygwin+ddrescue編)
救済するぞ救済するぞ救済するぞ。
さて、録画ファイルをためていたドライブが物故割れました。
久々にエンコードでもするかと思ったら失敗続き、最初はエンコするGPUがおかしいのかと疑ったものの、
今度はファイルがなぜか読み出せたり読み出せなくなったりしたので「アレ?」と思いました。
SMARTを確認してみると、案の定やられてました。
これはいけませんねぇ。
というわけでもう大概ヤバいので救済します。
といってもWidnowsで救済する方法はもはやありません。
HDDをLinuxの入ったマシンにつないでサルベージ、をやってもいいのですが、
Linuxの入っているマシンが小さいものしかないので外付けHDDケースみたいなのを買ってこないといけません。
Windows上で直で救済できると良いですね。
というわけでCygwin。
まずとりあえず適当にCygwinを入れます。
適当で大丈夫です。多分。
次にddrescueを入れます。
その前にapt-cygを入れます。
(参考:
qiita.com)
Cygwinを管理者権限で起動して、
wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg chmod 755 apt-cyg mv apt-cyg /usr/local/bin/ apt-cyg -m ftp://ftp.iij.ad.jp/pub/cygwin/ update apt-cyg install ddrescue
こんな感じですね。
次に
cat /proc/partitions
でパーティションを把握します。
こうですね。
$ cat /proc/partitions major minor #blocks name win-mounts (中略) 8 2 7813894144 sda2 D:\ (中略) 8 50 7813894144 sdd2 G:\
今回はDドライブからGドライブに移動させます。
/dev/sda2から/dev/sdd2への移動というわけですね。
この順番は絶対に要チェックです。
なぜなら逆にしてしまうと「まっさらなディスクの内容をサルベージ元の方に書き込んでしまう」という結果になってしまうからです。
全滅しますね。
さて次はddrescueを動かします。
手順としては
の順番に進行させます。
まず
$ ddrescue -f -n -v /dev/sda2 /dev/sdd2 logfile.log
を実行して不良セクタを読み飛ばしつつコピーします。
不良セクタの箇所がlogfile.logに書き込まれます。便利ですね。
結果はこう。
$ ddrescue -f -n -v /dev/sda2 /dev/sdd2 logfile.log GNU ddrescue 1.22 About to copy 8001 GBytes from '/dev/sda2' to '/dev/sdd2' Starting positions: infile = 0 B, outfile = 0 B Copy block size: 128 sectors Initial skip size: 156288 sectors Sector size: 512 Bytes ipos: 8001 GB, non-trimmed: 0 B, current rate: 0 B/s opos: 8001 GB, non-scraped: 4761 GB, average rate: 102 MB/s non-tried: 0 B, bad-sector: 1024 B, error rate: 177 MB/s rescued: 3240 GB, bad areas: 2, run time: 8h 44m 30s pct rescued: 40.49%, read errors: 72648480, remaining time: n/a time since last successful read: 58m 7s Finished
次に読み飛ばした部分がlogfile.logに入っているので、そこを頑張って読み込んでもらいます。
コマンドは
$ ddrescue -f -d -r1 -v /dev/sda2 /dev/sdd2 logfile.log
です。では結果がこちら
$ ddrescue -f -d -r1 -v /dev/sda2 /dev/sdd2 logfile.log GNU ddrescue 1.22 About to copy 8001 GBytes from '/dev/sda2' to '/dev/sdd2' Starting positions: infile = 0 B, outfile = 0 B Copy block size: 128 sectors Initial skip size: 156288 sectors Sector size: 512 Bytes Press Ctrl-C to interrupt Initial status (read from mapfile) rescued: 3240 GB, tried: 4761 GB, bad-sector: 1024 B, bad areas: 2 ipos: 3950 GB, non-trimmed: 0 B, current rate: 0 B/s opos: 3950 GB, non-scraped: 4051 GB, average rate: 0 B/s non-tried: 0 B, bad-sector: 709923 MB, error rate: 2377 kB/s rescued: 3240 GB, bad areas: 2, run time: 17h 8m 13s pct rescued: 40.49%, read errors:1386570140, remaining time: n/a time since last successful read: n/a Scraping failed blocks... (forwards) Interrupted by user
って救済できてへんやないかーい!
不良箇所以外は救済できましたが、あまりに不良箇所がタチ悪いので、不良箇所からは全然読み出せませんでした。
ざんねん。
というわけで、救済計画は失敗しました。
なぜなんだ、ちくしょう!(不謹慎ゼロ年代オチ)(90年代では?)