불량 섹터가 디스크 고장을 표시합니까?


16

내 Ubuntu 13.10 시스템은 지난 하루 동안 매우 성능이 떨어졌습니다. 커널 로그를 보면 <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파일 33메가바이트 주위에 반복 위의 오류의 대부분이 가득하고, 분야는 반복 메시지에 어떤 다르게 표시되지 않습니다.

현재 마운트 해제 된 디스크에서 다음 명령을 실행하여 디스크에있을 수있는 모든 문제를 테스트하고 정렬하려고합니다. 나는 약 12 ​​시간 안에 디스크가 너무 커서 24/48 시간이 더 걸릴 것으로 예상합니다.

e2fsck -c -c -p -v /dev/sdc1

내 질문은 :이 드라이브가 실패합니까, 아니면 일반적인 문제를보고 있습니까? 불량 섹터를 수리 또는 무시해야 할 시점이 있는지, 그리고 보증 기간 동안 디스크를 교체해야하는지 궁금합니다. 위의 명령에 대한 지식이 다소 부족하므로 도움이 될지 의심 스럽습니다.

빠른 업데이트!

e2fsck는 마침내 'inode의 다중 청구 블록 (multiply-claimed block (s))'으로 2 일 만에 끝났다. 파일 시스템을 마운트하려고하면 오류가 발생하여 파일을 읽기 전용으로 되돌려 놓았습니다.

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 %가 아니야


4
백업이 제대로 수행되었는지 확인한 다음 하드웨어를 확인하는 것이 거의 / 확실히 / 기호입니다.
— Shadur

흠. 그들은 약간 구식이지만 거기에 관계없이 있습니다. 이 드라이브가 다른 결함있는 드라이브를 교체했기 때문에 매우 실망 스럽습니다.
— MrNorm

디스크 고장, 진행 방법에 대해 다룬 다음 Q & A를 참조하십시오. unix.stackexchange.com/search?q=user%3A7453+hdat
— slm

2
...이 드라이브가 결함이있는 드라이브를 교체 한 경우 드라이브가 아닌 컨트롤러 일 가능성이 있습니다.
— Shadur

답변:


17

불량 섹터는 항상 HDD 고장을 나타냅니다. 실제로 이와 같은 I / O 오류가 발생하면 이미 일부 데이터가 손실 / 손상되었을 수 있습니다. 아직 백업하지 않은 경우 백업을 만들고 자체 테스트를 실행하고 smartctl -t long /dev/diskSMART 데이터를 확인하십시오 smartctl -a /dev/disk. 가능하면 교체하십시오.

불량 섹터는 수리 할 수 ​​없으며 예비 섹터로만 교체 할 수 있으며, 액세스 할 때마다 예비 섹터를 추가로 검색해야하기 때문에 HDD 성능을 저하시킵니다. 파일 시스템 계층에서 이러한 섹터를 불량으로 표시하면 액세스 할 수 없으므로 도움이됩니다. 그러나 어떤 섹터가 디스크에 의해 이미 재 할당되었는지 결정하기가 어렵 기 때문에 파일 시스템이 영향을받는 지역을 피할 수 없을 가능성이 있습니다.


감사. 그것이 항상 회색 영역 이었음을 아는 것이 정말 도움이됩니다. 보증 기간 내에 드라이브를 0으로 되돌려 보내겠습니다.
— MrNorm

1
별로. 불량 섹터는 단지 섹터에 대한 트래픽이 매우 높다는 것을 나타냅니다. 대부분의 경우 디스크 고장을 나타냅니다. 느린 응답을 나쁜 것으로 표시하기 위해 탐색 속도를 조정할 수 있습니다 ... 항상 말하기에는 너무 복잡합니다.
— RobotHumans

2
또한 어떤 이유로 실제 디스크보다 큰 파일 시스템에서 읽기 오류가 나타날 수 있습니다.
— Thorbjørn Ravn Andersen은

@frostschutz의 의미는 Get a replacement if you can.무엇입니까? 디스크를 교체 하시겠습니까?
— 항공기

10

드라이브가 섹터를 재 할당하도록하려면 일반적으로 섹터에 무언가를 써야합니다. 그러나 dd( D isk D estroyer)가 항상 작동하는 것은 아니며 매우 안전하지 않습니다. skip및 seek옵션 을 혼동 하면 첫 번째 블록을 핑 하고 해당 블록의 "오프셋"에서 블록을 작성하여 쉽게 발을 쏠 수 있습니다 . 하드 디스크의 섹터 0skipN/dev/zero .

섹터를 0으로 덮어 쓰려고한다는 것을 정말로 알고 있다면 다음을 사용해야합니다 hdparm.

% sudo hdparm --read-sector 833192656 /dev/sda
/dev/sda:
reading sector 833192656: FAILED: Input/output error

예, 섹터 833192656은 스마트 테스트에서도 실패했습니다. 0을 쓰려면 다음을 사용하십시오 --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-doinghdparm

% 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

%

이것은 고대의 aswer이지만 "dd가 항상 작동하지는 않는다"는 것이 무엇을 의미하는지 궁금합니다. 지시에 따라 데이터를 쓰지 못할 수 있음을 제안하고 있습니까? 특히 오류가 발생하기 쉬운 것이 아니라 데이터를 복사하는 것입니다. 거의 모든 프로그래밍 언어에서 두 줄을 사용하여 동일한 결과를 얻을 수 있습니다.
— TooTea

7

아니요, 불량 섹터가 항상 드라이브 고장을 나타내는 것은 아닙니다 . 정전시 쓰기가 진행중인 경우 섹터의 데이터가 손상되어 읽을 때 오류가 발생하는 경우가 있습니다. 새로운 데이터를 섹터에 쓰려고 시도하는 것은 물리적으로 아무런 문제가 없으므로 제대로 작동 할 수 있습니다.

badblocks -n드라이브에서 실행 하여 모든 섹터를 읽고 다시 쓸 수 있으며, 문제의 섹터 수를 이미 알고 있으므로 dd0을 쓸 수 있습니다 . 로 SMART 통계를 확인할 수 있습니다 smartctl -a. 재 할당 된 계류 카운트는 읽지 못한 섹터 수를 나타내며, 섹터를 쓰려고 시도하면이 카운트가 내려갑니다. 재 할당 된 섹터 수는 증가 할 수 있으며,이 경우 물리적으로 나쁘고 스페어 풀로 다시 매핑되어 드라이브가 종료되고 있다는 신호일 수 있습니다. 그렇지 않다면, 그것은 단지 혼란에 빠졌고 지금은 괜찮을 것입니다.

먼저 섹터를 읽으십시오.

dd count=1 if=/dev/sda of=/dev/null skip=nnnn

그것이 실패하면, 당신은 숫자가 맞다면, 당신은 그것을 0으로 만들 수 있습니다 :

dd count=1 if=/dev/zero of=/dev/sda seek=nnnn

Enter 키를 누르기 전에 명령을 정확하게 입력했는지 다시 확인하십시오.


명령에 따라 흥미로운 정보를 얻었으므로 흥미 롭습니다. 위의 질문을 수정했습니다.
— MrNorm

어떤 이유로 드라이브가 SMART를 지원하지 않습니까? 아니면 아직 확인하지 않은 이유는 무엇입니까?
— frostschutz 10

1
@frostschutz "두 카운트에서 Reallocated_Sector_Ct 는 0으로 남아 있습니다." OP 가 SMART 를 확인한 것 같습니다 .
— CVn

@ MrNorm, smartctl -a질문에 전체 출력을 추가하십시오 .
— psusi

2
이것을 사용하지 마십시오 (항상 작동하는 것은 아닙니다) 내 답변
— Antti Haapala
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.