私のUbuntu 13.10システムは、過去1日ほどの間、非常にパフォーマンスが低下しています。カーネルログを見ると、1年未満の古い3TB SATAディスクに特定のセクターに関する問題があることがわかります。
Nov 4 20:54:04 mediaserver kernel: [10893.039180] ata4.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Nov 4 20:54:04 mediaserver kernel: [10893.039187] ata4.01: BMDMA stat 0x65
Nov 4 20:54:04 mediaserver kernel: [10893.039193] ata4.01: failed command: READ DMA EXT
Nov 4 20:54:04 mediaserver kernel: [10893.039202] ata4.01: cmd 25/00:08:f8:3f:83/00:00:af:00:00/f0 tag 0 dma 4096 in
Nov 4 20:54:04 mediaserver kernel: [10893.039202] res 51/40:00:f8:3f:83/40:00:af:00:00/10 Emask 0x9 (media error)
Nov 4 20:54:04 mediaserver kernel: [10893.039207] ata4.01: status: { DRDY ERR }
Nov 4 20:54:04 mediaserver kernel: [10893.039211] ata4.01: error: { UNC }
Nov 4 20:54:04 mediaserver kernel: [10893.148527] ata4.00: configured for UDMA/133
Nov 4 20:54:04 mediaserver kernel: [10893.180322] ata4.01: configured for UDMA/133
Nov 4 20:54:04 mediaserver kernel: [10893.180345] sd 3:0:1:0: [sdc] Unhandled sense code
Nov 4 20:54:04 mediaserver kernel: [10893.180349] sd 3:0:1:0: [sdc]
Nov 4 20:54:04 mediaserver kernel: [10893.180353] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Nov 4 20:54:04 mediaserver kernel: [10893.180356] sd 3:0:1:0: [sdc]
Nov 4 20:54:04 mediaserver kernel: [10893.180359] Sense Key : Medium Error [current] [descriptor]
Nov 4 20:54:04 mediaserver kernel: [10893.180371] Descriptor sense data with sense descriptors (in hex):
Nov 4 20:54:04 mediaserver kernel: [10893.180373] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
Nov 4 20:54:04 mediaserver kernel: [10893.180384] af 83 3f f8
Nov 4 20:54:04 mediaserver kernel: [10893.180389] sd 3:0:1:0: [sdc]
Nov 4 20:54:04 mediaserver kernel: [10893.180393] Add. Sense: Unrecovered read error - auto reallocate failed
Nov 4 20:54:04 mediaserver kernel: [10893.180396] sd 3:0:1:0: [sdc] CDB:
Nov 4 20:54:04 mediaserver kernel: [10893.180398] Read(16): 88 00 00 00 00 00 af 83 3f f8 00 00 00 08 00 00
Nov 4 20:54:04 mediaserver kernel: [10893.180412] end_request: I/O error, dev sdc, sector 2944614392
Nov 4 20:54:04 mediaserver kernel: [10893.180431] ata4: EH complete
kern.log
ファイルは約33MBで、上記のエラーが繰り返されており、セクターは繰り返しメッセージで何の違いもないように見えます。
現在、マウント解除されたディスクで次のコマンドを実行して、ディスクで発生する可能性のある問題をテストして整理しようとしています。私は約12時間で、ディスクが非常に大きいため、さらに24/48時間かかると予想しています。
e2fsck -c -c -p -v /dev/sdc1
私の質問は次のとおりです。このドライブは故障していますか、それともここで一般的な問題を見ていますか?不良セクターを修復または無視することに意味があるかどうか、また、保証対象のディスクを保証されたまま交換する必要があるかどうかを考えています。上記のコマンドについての私の知識はやや不足しているので、それが役立つかどうかについて私は懐疑的です。
クイックアップデート!
e2fsckは2日後にようやく「inodeに複数の要求されたブロック」がたくさんある状態で終了しました。ファイルシステムをマウントしようとするとエラーが発生し、強制的に読み取り専用に戻されました。
Nov 11 08:29:05 mediaserver kernel: [211822.287758] EXT4-fs (sdc1): warning: mounting fs with errors, running e2fsck is recommended
Nov 11 08:29:05 mediaserver kernel: [211822.301699] EXT4-fs (sdc1): mounted filesystem with ordered data mode. Opts: errors=remount-ro
セクターを手動で読み取ろうとしています:
Sudo dd count=1 if=/dev/sdc of=/dev/null skip=2944614392
dd: reading ‘/dev/sdc’: Input/output error
0+0 records in
0+0 records out
0 bytes (0 B) copied, 5.73077 s, 0.0 kB/s
それに書き込もうとしています:
Sudo dd count=1 if=/dev/zero of=/dev/sdc seek=2944614392
dd: writing to ‘/dev/sdc’: Input/output error
1+0 records in
0+0 records out
0 bytes (0 B) copied, 2.87869 s, 0.0 kB/s
両方の点で、Reallocated_Sector_Ct
は0のままでした。
ドライブはかなり頻繁にスリープ状態になります。これがファイルシステムの問題である可能性があると今思っていますか?私は100%ではありません。
不良セクターは、常にHDDの障害を示しています。実際、このようなI/Oエラーが発生した瞬間に、おそらくすでに一部のデータが失われたか破損しています。まだバックアップがない場合はバックアップを作成し、セルフテストを実行しますsmartctl -t long /dev/disk
およびチェックSMARTデータsmartctl -a /dev/disk
。できれば交換してください。
不良セクターは修復できず、予備セクターに置き換えられるだけです。これは、アクセスされるたびに予備セクターへの追加のシークが必要になるため、HDDのパフォーマンスを低下させます。ファイルシステムレイヤーでこのようなセクターにマークを付けると、アクセスできなくなるため、役立ちます。ただし、ディスクによって既に再割り当てされているセクターを特定するのは難しいため、影響を受ける領域を回避するためにファイルシステムが認識していない可能性があります。
セクターを再割り当てするドライブを作成するには、通常、セクターに何かを書き込む必要があります。ただし、dd
([〜#〜] d [〜#〜] isk [〜#〜] d [〜#〜] estroyer)は常に機能し、非常に安全ではありません。skip
オプションとseek
オプションを混同すると、skip
pingN
/dev/zero
の最初のブロックと、その「オフセット」からブロックをセクターに書き込むハードディスクの0。
セクタを強制的にゼロで上書きしたい場合は、hdparm
を使用する必要があります。
% Sudo hdparm --read-sector 833192656 /dev/sda
/dev/sda:
reading sector 833192656: FAILED: Input/output error
はい、セクター833192656もスマートテストで不合格でした。ゼロを書き込むには、--write-sector
を使用します。
% Sudo hdparm --write-sector 833192656 /dev/sda
/dev/sda:
Use of --write-sector is VERY DANGEROUS.
You are trying to deliberately overwrite a low-level sector on the media.
This is a BAD idea, and can easily result in total data loss.
Please supply the --yes-i-know-what-i-am-doing flag if you really want this.
Program aborted.
安全策として、hdparm
は、--yes-i-know-what-i-am-doing
スイッチをhdparm
に渡さない限り、実際には何も書き込みません。
% Sudo hdparm --yes-i-know-what-i-am-doing --write-sector 833192656 /dev/sda
/dev/sda:
re-writing sector 833192656: succeeded
% Sudo hdparm --read-sector 833192656 /dev/sda
/dev/sda:
reading sector 833192656: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
[ ... more zeroes here... ]
0000 0000 0000 0000 0000 0000 0000 0000
%
いいえ、不良セクターはalwaysではなく、ドライブの障害を示しています。停電時に書き込みが進行中の場合、セクター内のデータが破損し、読み取ろうとするとエラーが発生することがあります。セクターに新しいデータを書き込もうとしても、物理的には何も問題がないため、問題なく動作する可能性があります。
badblocks -n
ドライブですべてのセクターの読み取りと再書き込みを行うか、問題のセクターの数がすでにわかっている場合はdd
を使用してゼロを書き込むことができます。 SMART stats with smartctl -a
。保留中の再割り当てされたカウントが、読み取りに失敗したセクターの数を示していることを確認してください。セクターの書き込みを試みた後、このカウントは減少します。再割り当てされたセクターの数が増える場合があります。その場合、物理的に不良であり、スペアプールに再マップされています。これは、ドライブが外に出ていることを示している可能性があります。そうでなければ、それからそれはただスクランブルされただけで、今は大丈夫です。
最初にセクターを読んでみてください:
dd count=1 if=/dev/sda of=/dev/null skip=nnnn
それが失敗した場合、あなたは正しい数を持っています、そしてあなたはそれをゼロにすることができます:
dd count=1 if=/dev/zero of=/dev/sda seek=nnnn
Enterキーを押す前に、コマンドを正確に入力したことを再確認してください。