Linux 디스크에서 읽을 수없는 단일 블록을 쉽게 복구하려면 어떻게합니까? 블록 HOWTO 가 나타납니다. 복잡하고 오류가 발생하기

Linux 시스템이 syslog에 SMART 오류를 발생시키기 시작했습니다. 나는 그것을 추적하고 문제가 디스크의 단일 블록이라고 생각합니다. 디스크가 한 블록을 재 할당하도록하려면 어떻게해야합니까? 프로세스에서 어떤 파일이 손상되었는지 알고 싶습니다. (디스크에서 하나의 블록이 고장 나면 다른 블록이 뒤따를 수 있다는 것을 알고 있습니다. 백업이 잘 진행 중이며이 디스크를 계속 작동 시키려고합니다.)

웹을 검색하면 마운트 해제 된 디스크의 수동 프로세스를 설명하는 불량 블록 HOWTO 가 나타납니다. 복잡하고 오류가 발생하기 쉬운 것 같습니다. Linux에서이 프로세스를 자동화하는 도구가 있습니까? 다른 유일한 옵션은 제조업체의 진단 도구 이지만 파괴 된 내용에 대한보고없이 나쁜 블록을 방해한다고 가정합니다. 최악의 경우 파일 시스템 메타 데이터 일 수 있습니다.

해당 디스크는 기본 시스템 파티션입니다. ext3fs 및 LVM 사용 다음은 syslog의 오류 로그와 smartctl의 관련 비트입니다.

smartd[5226]: Device: /dev/hda, 1 Currently unreadable (pending) sectors

Error 1 occurred at disk power-on lifetime: 17449 hours (727 days + 1 hours)
... Error: UNC at LBA = 0x00d39eee = 13868782

pastebin에 전체 smartctl 덤프 있습니다.



답변

시도해 볼 수 hdparm --write-sector <LBA> /dev/ice있습니다.

나는 이것을하는 다른 방법을 모른다 .LBA를 파일 시스템 블록으로 수동으로 변환해야한다 (이미 찾은 것처럼)


답변

예전에는 WD 용 디스크 펌웨어를 작성했으며 불량 블록을 다시 할당 한 펌웨어를 작성했습니다.

첫째, 대부분의 불량 블록은 쓰기가 아닌 읽기에서 감지됩니다. 쓰기는 맹목적으로 수행되므로 데이터를 확인하지 않고 기록합니다. 따라서 미디어가 나쁜 경우 쓰기에서 호스트가 해당 섹터를 읽을 때까지 알 수 없습니다. 올바른 섹터를 찾기 위해 쓰기에서 읽은 섹터의 작은 부분 (섹터 헤더)이 있으므로 섹터 헤더를 읽는 데 오류가있는 경우 드라이브가 섹터를 다시 할당하고 수신 된 데이터로 기록합니다 쓰기 명령에서. 그러나 대부분의 불량 블록은 읽기에서 감지되며, 쓰기가 섹터에 성공한다고해서 미디어가 양호하거나 섹터가 재 할당되었음을 의미하지는 않습니다.

이제 불량 블록 재 할당 (재 할당이라고도 함)에 대해 설명합니다. 그렇습니다. 일반적으로 오류가 충분히 나쁘면 (즉, ECC 오류가 충분히 나쁘면) 드라이브가 섹터를 재 할당하려고 시도하지만 ECC 수정 후에도 드라이브가 여전히 데이터를 복구 할 수 있습니다. 일반적으로이 작업은 자동으로 수행됩니다. 유일한 예외는 호스트가 이전에 드라이브에 자동 재 할당을하지 말라고 지시했을 수 있지만 거의 수행되지 않습니다.

드라이브가 데이터를 읽고 데이터를 복구 할 수 없으면 어떻게됩니까? 아무것도. 오류는 호스트에보고되지만 재 할당은 수행되지 않습니다. 문제는 드라이브가 섹터를 재 할당 할 수 있지만 새로 재 할당 된 섹터에 어떤 데이터를 쓸 것인지 전혀 알지 못한다는 것입니다. 예를 들어 방금 0을 쓴 다음 섹터를 다시 읽은 경우 데이터가 유효하지 않다는 표시없이 모든 0을 반환합니다. 이것은 본질적으로 데이터 손상과 동일합니다. 드라이브는 다양한 이유로 오류를 추적하는 호스트를 계산할 수 없습니다 (예를 들어, 드라이브가 새 호스트로 이동 한 경우 어떻게됩니까?). 데이터를 처리 할 수 ​​없을 때는 아무 것도하지 않는 것이 가장 좋습니다. 복구되지 않습니다.

그러나 최신 드라이브는 재 ​​할당 할 수 없을 때 불량 섹터의 위치를 ​​저장합니다. 재 할당을 기다리는 불량 섹터의 수는 SMART 데이터에서 찾을 수 있습니다. 재 할당 대기중인 불량 섹터 중 하나에 대한 쓰기가 수행 된 경우, 재 할당 후 드라이브에 유효한 데이터를 쓸 수 있기 때문에 재 할당이 수행됩니다. 따라서 사람들이 나쁜 부문에 글을 쓰면 재 할당한다고 말할 때 그것은 실제로 절반에 불과합니다. 드라이브가 자동으로 재 할당 할 수없는 모든 불량 섹터를 발견 할 수 있도록 드라이브를 먼저 읽어야합니다. 따라서 전체 드라이브를 작성할 수 있으며 SMART 데이터는 재 할당 대기중인 불량 섹터가 없다고 말하지만 모든 불량 섹터의 드라이브를 반드시 지운 것은 아닙니다. 따라서 모든 불량 섹터의 드라이브를 정말로 지우려면

재 할당 할 수없는 불량 블록을 처리하는 다른 방법이 있습니다. 드라이브가 중복 RAID 구성 (예 : RAID 0 이외)의 일부인 경우 RAID 소프트웨어는 다른 드라이브에서 불량 섹터에 대한 데이터를 자동으로 복구하여 재 할당 된 섹터에 기록해야합니다. SCSI 디스크에는 블록에 쓸 유효한 데이터가없는 경우에도 호스트가 재 할당을 강제하기 위해 사용할 수있는 명시 적 재 할당 블록 명령이 있지만 사용 수준은 매우 낮습니다.


답변

당신이해야 할 일은 다음과 같습니다.

e2fsck -c /dev/hda1

/ dev / hda1이 (언 마운트 된) 파티션이라고 가정합니다. 또는:

e2fsck -c -c /dev/hda1

(느린) 비파괴 읽기 쓰기 테스트를 수행합니다. 여전히 마운트를 해제해야합니다. 그래도 이것이 손실 된 데이터에 대한 세부 정보를 제공하지는 않는다고 생각합니다.


답변

Michael은 정확하고 대부분의 경우 저렴한 드라이브를 교체한다고 말합니다. 그러나 백업이없고 드라이브에서 중요한 데이터를 얻지 못하거나 드라이브를 복구하려는 경우 spinrite를 사용 하여 최고 수준 으로 시도 할 수 있습니다.

몇 년 전에 소음이 들리기 시작한 랩톱 드라이브가있었습니다. 불량 블록은 드라이브에 최종 사용자가 볼 수있는 불량 블록이 118 개 정도 인 것으로 나타났습니다. SpinRite를 이미 가지고 있었으므로 새 드라이브를 구입하기 전에 시도해보기로 결정했습니다. 드라이브 불량 블록에서 spinrite를 실행 한 후 불량 블록이 0으로 표시되고 소음이 중지되었습니다. 드라이브는 그 이후로 2 년 넘게 작동했습니다.


답변

백업이 있고 이것이 실제 오류가 아니라 논리적 오류라는 것을 알고 있다면이 문제를 해결하는 가장 좋은 방법은 디스크를 0으로 만드는 것입니다.

MHDD를 사용하는 것은 상당히 사용하기 쉽고 Bios의 HDD를 IDE 에뮬레이션으로 설정 한 다음 작업이 완료되면 AHCI로 돌아가는 것을 기억하는 한 걱정할 필요가 없습니다.

MHDD로 부팅하면 ERASE 명령에서 드라이브 유형을 선택하고 선택을 확인하십시오.

시간이 걸릴 수있는 커피를 즐기십시오.

드라이브가 제로화되면 Remap을 ON으로 설정 한 상태에서 scan (f4)을 실행하십시오 (기본값은 꺼짐). 드라이브에 여전히 문제가있는 경우 (플래터에 심각한 손상이 있고 드라이브가 아래쪽으로 기울어 져 있음을 의미 함)이 옵션은 손상된 영역을 드라이브의 건강한 부분에 매핑하여 문제를 “고정”합니다.

UNC 오류가 없으면 축하합니다. 앞으로 몇 년 동안 드라이브가 여전히 친구가 될 수 있습니다.


답변

디스크가 손상되면 교체하십시오. 더 떨어져 나갈 위험은 없습니다.