예전에는 WD 용 디스크 펌웨어를 작성했으며 불량 블록을 다시 할당 한 펌웨어를 작성했습니다.
첫째, 대부분의 불량 블록은 쓰기가 아닌 읽기에서 감지됩니다. 쓰기는 맹목적으로 수행되므로 데이터를 확인하지 않고 기록합니다. 따라서 미디어가 나쁜 경우 쓰기에서 호스트가 해당 섹터를 읽을 때까지 알 수 없습니다. 올바른 섹터를 찾기 위해 쓰기에서 읽은 섹터의 작은 부분 (섹터 헤더)이 있으므로 섹터 헤더를 읽는 데 오류가있는 경우 드라이브가 섹터를 다시 할당하고 수신 된 데이터로 기록합니다 쓰기 명령에서. 그러나 대부분의 불량 블록은 읽기에서 감지되며, 쓰기가 섹터에 성공한다고해서 미디어가 양호하거나 섹터가 재 할당되었음을 의미하지는 않습니다.
이제 불량 블록 재 할당 (재 할당이라고도 함)에 대해 설명합니다. 그렇습니다. 일반적으로 오류가 충분히 나쁘면 (즉, ECC 오류가 충분히 나쁘면) 드라이브가 섹터를 재 할당하려고 시도하지만 ECC 수정 후에도 드라이브가 여전히 데이터를 복구 할 수 있습니다. 일반적으로이 작업은 자동으로 수행됩니다. 유일한 예외는 호스트가 이전에 드라이브에 자동 재 할당을하지 말라고 지시했을 수 있지만 거의 수행되지 않습니다.
드라이브가 데이터를 읽고 데이터를 복구 할 수 없으면 어떻게됩니까? 아무것도. 오류는 호스트에보고되지만 재 할당은 수행되지 않습니다. 문제는 드라이브가 섹터를 재 할당 할 수 있지만 새로 재 할당 된 섹터에 어떤 데이터를 쓸 것인지 전혀 알지 못한다는 것입니다. 예를 들어 방금 0을 쓴 다음 섹터를 다시 읽은 경우 데이터가 유효하지 않다는 표시없이 모든 0을 반환합니다. 이것은 본질적으로 데이터 손상과 동일합니다. 드라이브는 다양한 이유로 오류를 추적하는 호스트를 계산할 수 없습니다 (예를 들어, 드라이브가 새 호스트로 이동 한 경우 어떻게됩니까?). 데이터를 처리 할 수 없을 때는 아무 것도하지 않는 것이 가장 좋습니다. 복구되지 않습니다.
그러나 최신 드라이브는 재 할당 할 수 없을 때 불량 섹터의 위치를 저장합니다. 재 할당을 기다리는 불량 섹터의 수는 SMART 데이터에서 찾을 수 있습니다. 재 할당 대기중인 불량 섹터 중 하나에 대한 쓰기가 수행 된 경우, 재 할당 후 드라이브에 유효한 데이터를 쓸 수 있기 때문에 재 할당이 수행됩니다. 따라서 사람들이 나쁜 부문에 글을 쓰면 재 할당한다고 말할 때 그것은 실제로 절반에 불과합니다. 드라이브가 자동으로 재 할당 할 수없는 모든 불량 섹터를 발견 할 수 있도록 드라이브를 먼저 읽어야합니다. 따라서 전체 드라이브를 작성할 수 있으며 SMART 데이터는 재 할당 대기중인 불량 섹터가 없다고 말하지만 모든 불량 섹터의 드라이브를 반드시 지운 것은 아닙니다. 따라서 모든 불량 섹터의 드라이브를 정말로 지우려면
재 할당 할 수없는 불량 블록을 처리하는 다른 방법이 있습니다. 드라이브가 중복 RAID 구성 (예 : RAID 0 이외)의 일부인 경우 RAID 소프트웨어는 다른 드라이브에서 불량 섹터에 대한 데이터를 자동으로 복구하여 재 할당 된 섹터에 기록해야합니다. SCSI 디스크에는 블록에 쓸 유효한 데이터가없는 경우에도 호스트가 재 할당을 강제하기 위해 사용할 수있는 명시 적 재 할당 블록 명령이 있지만 사용 수준은 매우 낮습니다.