2018年7月29日日曜日

HDDで不良セクターが発生しファイルがコピーできない時の対処法

HDDで不良セクターが発生しファイルがコピーできない
先日、不良セクターが発生しているHDDがあることを発見した。HDD自体は動いているしディスクユーティリティ上も「使用可能」と表示されていたので、しばらく放置していた。

不良セクターが発生しているHDDの代替のHDDを探していて、この前Amazonのタイムセールで目当てのHDDが安く売っていたので、購入してデータを移行することにした。

ちなみに、GNOMEのディスクユーティリティ上では以下のように「2096個の不良セクターがありますが、使用可能です」と表示されていた。今回不良セクターが発生したのは、SeagateのBarracuda ST3000DM001。


HDDの故障の症状が重い場合
HDDの故障の症状が重い(HDDが認識しない、異音がする)場合は、細心の注意が必要。

データリカバリの方面では、物理ディスクをそのまま使うのではなくディスクのイメージを使って作業するのがベストです。一般的に、故障しているディスクは時間の経過と共に状態が悪化します。ディスクが故障したらまず出来る限り早く出来る限り多くのデータを救出して、それからディスクを破棄するのが目標となるのが当然です。ddrescue や dd_rescue ユーティリティは、dd と違って、エラーからのリカバリを繰り返し試行してドライブを前から後ろに、そして後ろから前に読み取って、データのサルベージを試みます。これらのユーティリティはログファイルを残すため途中経過を見失うことなくリカバリを停止したり再開することができます。
「ファイルリカバリ - ArchWiki」より

以前、SSDが故障してArch Linuxが起動しなくなった時は今回より症状が重かった。参考に、その際の記事も載せておく。

2016年3月20日
SSDが故障してOSが起動しない | 普段使いのArch Linux

今回は、症状が軽かったため、以下の手順でデータの救出を行った。

不良セクターが発生したHDDからデータをコピー
まず、不良セクターが発生しているHDDからデータを救出するために、新たに購入したHDDへデータをコピーした。なお、新たに購入したHDDのフォーマットは以下の記事の手順で行った。

2015年1月11日
HDDを新たに追加 | GPTパーティショニング, XFSフォーマット, 4KiBセクタ, Advanced Format Technology | 普段使いのArch Linux

cpコマンドで、不良セクターが発生しているHDDから、新たに購入したHDDにファイルをコピーすると、「Input/output error」のエラーが発生し、コピーできないファイルがあった。
$ cp -arp /home/ユーザー名/不良セクターがあるHDD/* /run/media/ユーザー名/新たに購入したHDD/

cp: error reading '/home/ユーザー名/不良セクターがあるHDD/file1': Input/output error
cp: error reading '/home/ユーザー名/不良セクターがあるHDD/file2': Input/output error
...

HDDが認識できない場合や、cpコマンドによってHDDの状態がさらに悪化しそうな場合は、cpではなくddrescueなどのコマンドを使った方がよい。ただし、ddrescueだとどのファイルの読み込みでエラーが発生したかが、分かりにくい。)

コピーできなかったファイルを、ファイルブラウザ(Nautilus)上でコピーしても、「ファイルを...へコピーする際にエラーが発生しました。ファイルをspliceする際にエラー: 入力/出力エラーです」というエラーが発生してコピーできなかった。


ちなみに、この時dmesg上では以下のようなエラーが発生が出力されていた。
$ dmesg

...
[ 7693.409265] ata4.00: exception Emask 0x0 SAct 0x2000000 SErr 0x0 action 0x0
[ 7693.409273] ata4.00: irq_stat 0x40000008
[ 7693.409277] ata4.00: failed command: READ FPDMA QUEUED
[ 7693.409320] ata4.00: cmd 60/08:c8:f8:7b:a6/00:00:ee:00:00/40 tag 25 ncq dma 4096 in
                        res 41/40:08:f8:7b:a6/00:00:ee:00:00/00 Emask 0x409 (media error) <F>
[ 7693.409325] ata4.00: status: { DRDY ERR }
[ 7693.409329] ata4.00: error: { UNC }
[ 7693.429121] ata4.00: configured for UDMA/133
[ 7693.429139] sd 3:0:0:0: [sdd] tag#25 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 7693.429143] sd 3:0:0:0: [sdd] tag#25 Sense Key : Medium Error [current] 
[ 7693.429146] sd 3:0:0:0: [sdd] tag#25 Add. Sense: Unrecovered read error - auto reallocate failed
[ 7693.429150] sd 3:0:0:0: [sdd] tag#25 CDB: Read(16) 88 00 00 00 00 00 ee a6 7b f8 00 00 00 08 00 00
[ 7693.429153] print_req_error: I/O error, dev sdd, sector 4003888120
[ 7693.429188] ata4: EH complete
[ 7696.259414] ata4.00: exception Emask 0x0 SAct 0x2000 SErr 0x0 action 0x0
[ 7696.259421] ata4.00: irq_stat 0x40000008
[ 7696.259425] ata4.00: failed command: READ FPDMA QUEUED
[ 7696.259434] ata4.00: cmd 60/08:68:f8:7b:a6/00:00:ee:00:00/40 tag 13 ncq dma 4096 in
                        res 41/40:08:f8:7b:a6/00:00:ee:00:00/00 Emask 0x409 (media error) <F>
[ 7696.259438] ata4.00: status: { DRDY ERR }
[ 7696.259441] ata4.00: error: { UNC }
[ 7696.279288] ata4.00: configured for UDMA/133
[ 7696.279305] sd 3:0:0:0: [sdd] tag#13 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 7696.279309] sd 3:0:0:0: [sdd] tag#13 Sense Key : Medium Error [current] 
[ 7696.279312] sd 3:0:0:0: [sdd] tag#13 Add. Sense: Unrecovered read error - auto reallocate failed
[ 7696.279316] sd 3:0:0:0: [sdd] tag#13 CDB: Read(16) 88 00 00 00 00 00 ee a6 7b f8 00 00 00 08 00 00
[ 7696.279319] print_req_error: I/O error, dev sdd, sector 4003888120
[ 7696.279342] ata4: EH complete

コピーできなかったファイルをddrescueで救出
cpコマンドではコピーできなかったファイルを、ddrescueで救出することにした。cpコマンドは読み取りエラーが発生するとそのファイルの読み込みを中止してしまうが、ddrescueだとエラーが発生した箇所を読み飛ばして、読み込みを継続するためファイルのより多くの部分を救出できる。

ddrescueは、Arch Linuxの公式リポジトリからインストールできる。
# pacman -S ddrescue

コピーできなかったファイルを、適当な保存先に救出する。最後の、「/home/ユーザー名/適当なパス/ddrescue.log」で、ログの保存先を指定している。
$ ddrescue -n -v /home/ユーザー名/不良セクターがあるHDD/file1 /home/ユーザー名/適当なパス/file1 /home/ユーザー名/適当なパス/ddrescue.log

GNU ddrescue 1.23
About to copy 825924 kBytes from '/home/ユーザー名/不良セクターがあるHDD/file1' to '/home/ユーザー名/適当なパス/file1'
    Starting positions: infile = 0 B,  outfile = 0 B
    Copy block size: 128 sectors       Initial skip size: 128 sectors
Sector size: 512 Bytes

Press Ctrl-C to interrupt
     ipos:  284847 kB, non-trimmed:        0 B,  current rate:   18176 B/s
     opos:  284847 kB, non-scraped:    89088 B,  average rate:   5004 kB/s
non-tried:        0 B,  bad-sector:    13312 B,    error rate:     256 B/s
  rescued:  825822 kB,   bad areas:       26,        run time:      2m 45s
pct rescued:   99.98%, read errors:       40,  remaining time:          1s
                              time since last successful read:          0s
Finished                                      

「pct rescued: 99.98%」なので、ファイルの99.98%は救出できた。コピーできなかったファイルの中で、まだ救出したいファイルがある場合は、引き続きddrescueでファイルの救出を行う。


参考:
[1]ファイルリカバリ - ArchWiki

スポンサーリンク

スポンサーリンク


関連コンテンツ


この記事をシェアする

0 件のコメント:

コメントを投稿