읽을 수없는 보류 섹터는 읽기 오류를 반환했으며 첫 번째 가능한 기회에서 드라이브가 다시 매핑하도록 표시 한 섹터입니다. 그러나 다음 두 가지 중 하나가 발생할 때까지 다시 매핑을 수행 할 수 없습니다.
- 섹터는 성공적으로 다시 읽습니다
- 섹터가 다시 작성되었습니다
그때까지 섹터는 계속 보류 중입니다. 따라서이를 처리하는 두 가지 방법이 있습니다.
- 성공할 때까지 섹터를 다시 읽으십시오
- 해당 섹터를 새로운 데이터로 덮어 쓰기
분명히, (1)은 비파괴 적이므로 드라이브를 심각하게 실패하기 시작하면 나쁜 영역에서 지속적으로 읽는 것이 훨씬 빨리 실패 할 수 있음을 명심하지만 먼저 시도해야합니다. . 보류중인 섹터 및 기타 오류가 많고 드라이브의 데이터에 관심이있는 경우 서비스를 중단하고 우수한 도구 ddrescue 를 사용하여 가능한 많은 데이터를 복구하는 것이 좋습니다. 그런 다음 드라이브를 폐기하십시오.
해당 섹터에 관심이 없거나 백업에서 복원 할 수있는 데이터가 포함되어 있으면 덮어 쓰기가 가장 빠르고 간단한 솔루션 일 것입니다. 그런 다음 드라이브의 재 할당되고 보류중인 카운트를보고 섹터를 처리했는지 확인할 수 있습니다.
파일 시스템에서 해당 섹터가 무엇인지 어떻게 알 수 있습니까? smartmontools 웹 사이트에서 훌륭한 기사를 찾았 지만 여기는 상당히 기술적이고 ext2 / 3 / 4 및 reiser 파일 시스템에만 해당됩니다.
내가 소유 한 (Mac) 드라이브 중 하나에서 사용한 더 간단한 방법 find / -xdev -type f -print0 | xargs -0 ...
은 시스템의 모든 파일을 읽는 데 사용 하는 것입니다. 이를 실행하기 전에 보류중인 수를 기록해 두십시오. 섹터가 파일 안에 있으면 파일을 읽는 데 사용한 도구 (예 : md5sum)에서 오류 메시지가 표시됩니다. 그런 다음 성공적으로 읽을 때까지이 파일 만 다시 읽는 데주의를 집중할 수 있습니다. 자주 사용하지 않는 파일 인 경우 몇 번 다시 읽어야하는 경우 종종 문제가 해결됩니다. 오류가 사라지거나 모든 파일을 읽는 동안 오류가 발생하지 않으면 보류중인 수를 확인하여 감소했는지 확인하십시오. 그렇다면 문제를 읽고 해결했습니다.
여러 번의 시도 (예 : 20) 후에 파일을 읽을 수없는 경우 드라이브가 섹터를 재 할당 할 수 있도록 파일 또는 파일 내의 블록을 덮어 써야합니다. 파티션이 아닌 파일에서 ddrescue를 사용하여 임시 파일에 복사 한 다음 다시 복사하여 한 섹터 만 덮어 쓸 수 있습니다. 이 시점에서 파일을 제거하는 것은 나쁜 생각입니다. 불량 섹터는 찾기 어려운 목록으로 이동하기 때문입니다. 섹터를 다시 사용 가능 목록으로 이동하기 때문에 완전히 덮어 쓰기도 나쁩니다. 기존 블록을 다시 작성해야합니다. notrunc
의 옵션은 dd
이 작업을 수행 할 수있는 한 가지 방법입니다.
오류가 발생하지 않고 보류 카운트가 감소하지 않으면 섹터는 프리리스트 또는 파일 시스템 인프라의 일부 (예 : inode 테이블)에 있어야합니다. 모든 여유 공간을로 채우고 cat /dev/zero >tempfile
보류 카운트를 확인할 수 있습니다. 다운되면 문제가 무료 목록에 있었고 이제 사라졌습니다.
섹터가 인프라에있는 경우 더 심각한 문제가 있으며 디렉토리 트리를 걷는 것만으로 오류가 발생할 수 있습니다. 이 상황에서는 드라이브를 다시 포맷하고 필요에 따라 ddrescue를 사용하여 데이터를 복구하는 것이 현명한 해결책이라고 생각합니다.
드라이브를 주시하십시오. 섹터 재 할당은 탄광에서 매우 좋은 카나리아로, 고장난 드라이브에 대해 조기에 경고 할 수 있습니다. 조기 조치를 취하면 나중에 치명적이고 매우 고통스러운 산사태를 예방할 수 있습니다. 몇 개의 섹터 재 할당이 드라이브를 폐기해야한다는 표시는 아닙니다. 모든 최신 드라이브는 재 할당이 필요합니다. 그러나 드라이브가 오래되지 않았거나 (1 년 미만) 새로운 재 할당이 자주 발생하는 경우 (> 1 / 월) 최대한 빨리 교체하는 것이 좋습니다.
나는 그것을 증명할 경험적 증거는 없지만, 내 경험에 따르면 전체 디스크를 한 번에 한 번 dd
, 원시 디스크로 읽거나를 사용하여 모든 파일을 읽음으로써 디스크 문제를 줄일 수 있다고 제안합니다 find
. 지난 몇 년 동안 내가 경험했던 거의 모든 디스크 문제는 거의 사용하지 않는 파일이나 많이 사용하지 않는 시스템에서 처음 발생했습니다. 이것은 섹터를 자주 다시 읽는 경우 드라이브가 섹터를 완전히 읽을 수 없을 때까지 기다리지 않고 해당 섹터의 사소한 문제를 처음 감지 할 때 드라이브를 재 할당 할 기회가 있다는 점에서 발견 적으로도 의미가 있습니다. 호스트가 어떤 방식으로 읽거나 쓰거나 SMART 테스트 중 하나를 수행하여 액세스하지 않는 한 드라이브는 섹터에 대해 아무 것도 할 수 없습니다.
전체 디스크를 읽는 야간 또는 주간 크론 작업의 아이디어를 실험하고 싶습니다. 현재 저는 기계에 두 번째 하드 드라이브가있는 "가난한 사람의 RAID"를 사용하고 있으며 매일 밤 주 디스크를 백업합니다. 어떤면에서는 실수로 파일을 삭제하고 삭제하면 백업 디스크에서 어제 버전을 즉시 얻을 수 있기 때문에 실제로 RAID 미러링보다 낫습니다. 반면에, 하드웨어 RAID 컨트롤러는 디스크 문제가 발생할 때이를 모니터링,보고 및 수정하기 위해 백그라운드에서 많은 작업을 수행한다고 생각합니다. 현재 백업 스크립트는 rsync
변경되지 않은 데이터 복사를 피하기 위해 사용 하지만 모든 섹터를 다시 읽을 필요성을 고려하여 모든 것을 복사하거나 매주 전체 원시 디스크를 읽는 별도의 스크립트를 갖는 것이 좋습니다.