하드 종료 후 하드 드라이브 오류 또는 컨트롤러 불량

하드 종료 후 하드 드라이브 오류 또는 컨트롤러 불량

백만 번째로 듀얼 모니터로 모든 것을 정지시킨 후 나는 내 맥북 프로(2010년 중반, 페도라 24, SAMSUNG HN-M500MBB 하드 드라이브)의 전원을 꺼야 했습니다. IO 무거운 작업을 수행하지 않았으며 단지 evince로 슬라이드를 보는 것뿐이었습니다.

재부팅하면 불량 섹터에 대한 오류가 발생하고 다음과 같은 오류가 발생하기 시작합니다.

blk_update_request: I/O error, dev sda, sector 969158669
ata1: EH complete
ata1.00: exception Emask 0x0 SAct 0x3c000000 SErr 0x0 action 0x6 frozen
ata1.00: failed command: READ FPDMA QUEUED
ata1.00: cmd 60/08:d0:08:30:c4/00:00:39:00:00/40 tag 26 ncq dma 4096 in
         res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata1.00: status: { DRDY }
ata1.00: failed command: READ FPDMA QUEUED
ata1.00: cmd 60/28:d8:c8:2f:c4/00:00:39:00:00/40 tag 27 ncq dma 20480 in
         res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata1.00: status: { DRDY }
ata1.00: failed command: READ FPDMA QUEUED
ata1.00: cmd 60/38:e0:88:2f:c4/00:00:39:00:00/40 tag 28 ncq dma 28672 in
         res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata1.00: status: { DRDY }
ata1.00: failed command: READ FPDMA QUEUED
ata1.00: cmd 60/78:e8:08:2f:c4/00:00:39:00:00/40 tag 29 ncq dma 61440 in
         res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata1.00: status: { DRDY }
ata1: hard resetting link
ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
ata1.00: configured for UDMA/133
ata1.00: device reported invalid CHS sector 0

가끔씩

sd 0:0:0:0: [sda] tag#19 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
sd 0:0:0:0: [sda] tag#19 Sense Key : Medium Error [current] 
sd 0:0:0:0: [sda] tag#19 Add. Sense: Unrecovered read error - auto reallocate failed
sd 0:0:0:0: [sda] tag#19 CDB: Read(10) 28 00 39 c4 30 08 00 00 08 00
blk_update_request: I/O error, dev sda, sector 969158669
Buffer I/O error on dev dm-2, logical block 1, async page read

그리고

ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000001
ata1.00: failed command: READ SECTOR(S) EXT
ata1.00: cmd 24/00:01:0d:30:c4/00:00:39:00:00/e0 tag 6 pio 512 in
         res 51/40:01:0d:30:c4/00:00:39:00:00/e0 Emask 0x9 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }

다음은 hdparm을 사용하여 잘못된 섹터 이후 몇 개의 섹터를 읽으려고 시도한 후의 smartctl 출력입니다.

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   100   100   051    Pre-fail  Always       -       469
  2 Throughput_Performance  0x0026   252   252   000    Old_age   Always       -       0
  3 Spin_Up_Time            0x0023   086   086   025    Pre-fail  Always       -       4463
  4 Start_Stop_Count        0x0032   092   092   000    Old_age   Always       -       8099
  5 Reallocated_Sector_Ct   0x0033   252   252   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   252   252   051    Old_age   Always       -       0
  8 Seek_Time_Performance   0x0024   252   252   015    Old_age   Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       19382
 10 Spin_Retry_Count        0x0032   252   252   051    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       980
 12 Power_Cycle_Count       0x0032   092   092   000    Old_age   Always       -       8214
181 Program_Fail_Cnt_Total  0x0022   097   097   000    Old_age   Always       -       66246139
191 G-Sense_Error_Rate      0x0022   100   100   000    Old_age   Always       -       3820
192 Power-Off_Retract_Count 0x0022   100   100   000    Old_age   Always       -       20
194 Temperature_Celsius     0x0002   064   051   000    Old_age   Always       -       32 (Min/Max 15/49)
195 Hardware_ECC_Recovered  0x003a   100   100   000    Old_age   Always       -       0
196 Reallocated_Event_Count 0x0032   252   252   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   100   100   000    Old_age   Always       -       15
198 Offline_Uncorrectable   0x0030   252   252   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0036   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x002a   100   100   000    Old_age   Always       -       255
223 Load_Retry_Count        0x0032   100   100   000    Old_age   Always       -       980
225 Load_Cycle_Count        0x0032   001   001   000    Old_age   Always       -       1583719

보류 중인 섹터에 유의하십시오. 단기 및 장기 자체 테스트 모두 커널과 동일한 불량 섹터를 보고합니다.

Hdparm은 이상하게도 모든 것을 성공적으로 읽었지만 (아래 편집 내용을 참조하세요) 일종의 중단 및 말한다

reading sector 969158769: SG_IO: bad/missing sense data, sb[]:  70 00 03 00 00 00 00 0a 00 51 e0 01 11 04 00 00 a0 71 00 00 00 00 00 00 00 00 00 00 00 00 00 00
succeeded

그리고 첫 번째 불량 섹터 이후 약 200개 섹터에 대해 그렇게 말합니다. 나는 hdparm --write-sector를 사용하여 몇 가지를 다시 썼고 그들은 불평을 멈췄습니다. 지금은 백업을 하고 있고 새 드라이브를 주문하고 있는데 그동안 무슨 일이 일어났는지 이해하고 이 문제를 해결해 보고 싶습니다.

몇 가지 잘못된 섹터를 다시 작성한 후에도 재할당된 섹터 수가 증가하지 않아 전체가 이상해집니다. 다시 쓴 후에는 아무 일도 일어나지 않은 것처럼 잘 읽고 쓰지만 펌웨어는 이를 불량 섹터로 다시 매핑하지 않는 것 같습니다.

어떤 아이디어? 드라이브를 그냥 버려야 할까요?

추신. 다른 파티션의 OSX는 여전히 꽤 잘 작동합니다.


편집 : 여파

백업 후 하드 드라이브로 약간의 실험을 시작했습니다.

첫 번째 불량 섹터 이후 동일한 문제가 있는 약 150개가 더 있었습니다. 나는 그것을 읽으려고 시도했지만 dd실패 dd_rescue했습니다. hdparm --read-sector작동했지만(위의 감지 오류와 함께) 일관성 없는 데이터를 반환했습니다(읽을 때마다 다름). hdparm --write-sector문제가 해결된 것 같아서 실패한 섹터를 모두 다시 썼습니다.

이제 smartctl보류 중인 섹터 0개와 재할당 0개를 보고하며, 단기 및 장기 자체 테스트 모두 오류 없이 완료됩니다. Linux가 정상적으로 부팅되고 모든 오류가 사라졌습니다.

나는 내가 죽인 ~70kb에 대해 약간 걱정됩니다. LVM에서는 실제로 포함된 내용을 이해하는 것이 약간 까다롭습니다. 해당 영역 주변에 몇 MB를 버렸는데 모두 0이므로 빈 공간이거나 스왑인 것이 확실합니다.

아직 축하하기에는 너무 이르지만 결과는 유망해 보이며 새로운 일이 발생하면 질문을 업데이트할 것입니다.

관련 정보