データをコピーするドライブがありますが、cp
毎回失敗して印刷されます。
cp: error reading 'path/to/always/same/file': Input/output error
出力には以下がdmesg
含まれます。
[72481.869510] ata2.00: configured for UDMA/133
[72481.874133] ata2.01: configured for UDMA/133
[72481.874145] sd 1:0:1:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[72481.874147] sd 1:0:1:0: [sdc] tag#0 Sense Key : Medium Error [current]
[72481.874149] sd 1:0:1:0: [sdc] tag#0 Add. Sense: Unrecovered read error - auto reallocate failed
[72481.874152] sd 1:0:1:0: [sdc] tag#0 CDB: Read(16) 88 00 00 00 00 00 f7 9f 4c 00 00 00 02 00 00 00
[72481.874154] print_req_error: I/O error, dev sdc, sector 4154412112
[72481.879316] ata2: EH complete
[72484.819205] ata2.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
[72484.824273] ata2.01: failed command: READ DMA EXT
[72484.829346] ata2.01: cmd 25/00:08:50:4c:9f/00:00:f7:00:00/f0 tag 0 dma 4096 in
res 51/40:00:50:4c:9f/40:00:f7:00:00/10 Emask 0x9 (media error)
[72484.849742] ata2.01: status: { DRDY ERR }
[72484.854836] ata2.01: error: { UNC }
オンラインでこの問題について読んだ後、これは不良ブロックを手動で表示する必要があることに気づきました。ただし、リードコマンドを実行しても「失敗」は返されません。
$ sudo hdparm --read-sector 4154412112 /dev/sdc
/dev/sdc:
reading sector 4154412112: SG_IO: bad/missing sense data, sb[]: 70 00 03 00 00 00 00 0a 40 51 10 00 11 04 00 00 a0 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00
succeeded
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
ここで何が起こっているのでしょうか?
答え1
hdparm
成功ドライブと会話1. それが「成功」を意味します。ドライブに「SG_IO:検出されたデータエラー/損失」が表示されます。これがまさに何を意味するのかはわかりませんが、確かに良いわけではありません。hdparm
そのセクタを正常に読み込めませんでした。。
hdparm
セクタの内容を含める必要がありますが、ゼロでいっぱいのメモリバッファを表示し続けます。これは明らかにドライブから読み取ったものではありません。
ブロックを不良としてマークすると、できるだけ早くドライブを交換する必要がありますが、しばらくドライブを使い続けるのに役立ちます。 (しかし、不良ブロックは自動的に表示される必要があります。なぜ手動で実行したいのかわかりません。)しかし、そのブロックからデータを読み取ることはできません。
1具体的に言えば、HDIO_DRIVE_TASKFILE
I/W制御0を返します。 ²ソースコードを
読むと、その時点でこの特定のメッセージが表示されたことがわかります。この数が何を意味するのかわかりません。hdparm
sb[0] != 0x72 || sb[7] < 14 || desc[0] != 0x09 || desc[1] < 0x0c
答え2
引用する
https://www.smartmontools.org/wiki/BadBlockHowto
そして
https://wiki.archlinux.org/index.php/Identify_damaging_files
より多くの情報を知りたいです。
つまり、debugfsやsleuthkitなどのツールを使用してどのファイルが破損しているのかを特定した後、詳細については、hdparm --read-sector
「指定されたセクタ番号にゼロを書き込む」と「ドライブから不良セクタを強制的に回復する(メディアエラー)」--repair-sector
(エイリアス--write-sector
)試してみることができます。 、hdparm のマニュアルページを参照してください。