실제로 디스크의 불량 블록을 다시 매핑합니다.

실제로 디스크의 불량 블록을 다시 매핑합니다.

나는 SATA 드라이브를 가지고 있고 프로그램은 총 8개의 불량 블록을 식별했습니다 badblocks. 아마도 드라이브 펌웨어는 이를 다시 매핑하고 예비 부품을 교체할 수 있어야 합니다. 문제의 파티션을 다시 작성하고 e2fsck를 여러 번 실행하기 위해 모드 badblocks에서 실행 했습니다 . -n아무것도 변하지 않고 항상 동일한 8개의 불량 블록입니다.

실행하면 에 smartctl표시됩니다 .Reallocated_Sector_Ct0

8개의 불량 블록을 실제로 다시 매핑하도록 펌웨어를 얻으려면 어떻게 해야 합니까?

답변1

드라이브는 전체 섹터 쓰기 요청에 새 데이터가 제공되는 경우에만 읽을 수 없는 섹터를 다시 쓰거나 재할당하려고 시도할 수 있습니다. badblocks이렇게 하지 마세요. 아무것도 바뀌지 않습니다.

"비파괴" 읽기 및 쓰기 모드는 다음과 같이 작동합니다.

  1. 원시 데이터 읽기
  2. 테스트 패턴 작성
  3. 테스트 패턴 읽기
  4. 원시 데이터 쓰기

첫 번째 단계가 실패하면, 즉 데이터를 읽을 수 없으면 이후에 원본 데이터를 복구할 수 없으므로 해당 섹터에서 쓰기 작업을 수행할 수 없습니다. 이것은 파괴적인 쓰기가 될 것이지만 특별히 비파괴적인 변형을 요청했기 때문에 아직 완료되지 않았습니다.

"비파괴적" 방법은 다른 이유로 인해 원본 데이터를 복구하지 못할 수 있으므로 어떠한 경우에도 데이터를 보존하려는 드라이브에서 불량 블록을 실행해서는 안 됩니다.


어쨌든 이 작업을 수행하려면 쓰기 모드를 badblocks사용해야 합니다. 기본적으로 모든 데이터를 덮어쓰므로 선택적 인수를 사용하여 덮어써야 하는 특정 섹터 범위 형식 -w으로 범위를 좁히고 싶습니다 . badblocks -w device [last_block [first_block]]먼저 읽기 전용 불량 블록 테스트를 실행하여 이러한 섹터를 식별할 수 있습니다.

읽기 전용 테스트:

# badblocks /dev/foobar
1000

블록 1000에 결함이 있으므로 해당 블록은 구체적으로 다룹니다.

# badblocks -w /dev/foobar 1000 1000

하지만,이것은 여전히 ​​실패할 것이다. 왜? badblocks기본 블록 크기인 1024바이트가 사용되기 때문입니다 .

이는 섹터 크기가 512바이트인 장치의 경우 올바르지 않습니다. 불량 블록은 하나가 아닌 두 개의 섹터를 덮어 추가 손상을 초래합니다. 또한 섹터 크기가 4096바이트인 장치에도 해당됩니다. 잘못됨 - 불량 블록은 쓰기만 합니다. 부분 섹터에 대해서는 전체 데이터 블록을 작성해야 하므로 재할당에는 작동하지 않습니다.


따라서 위의 두 명령 모두 드라이브의 올바른 블록 크기(물리적 섹터 크기)(512 또는 4096 등)를 지정해야 합니다.

블록 크기가 변경되면 보고된 블록 번호도 그에 따라 변경됩니다.

# badblocks -b 512 /dev/foobar
2000
# badblocks -b 4096 /dev/foobar
250

그에 따라 쓰기 명령을 조정할 수 있습니다.

# badblocks -b 512 -w /dev/foobar 2000 2000
# badblocks -b 4096 -w /dev/foobar 250 250

이렇게 하면 드라이브에 문제가 있는 섹터를 재할당할 수 있는 기회가 제공됩니다.


여전히 실패하면 또 다른 가능성이 있습니다. 지정된 장치가 파티션이거나 다른 논리 드라이브이고 물리적 드라이브와 정렬되지 않은 경우 모든 쓰기가 정렬되지 않으므로 결국 4096 단어 섹션이 두 개에 기록됩니다. 부분 4096바이트 섹터.

대상 섹터를 재배치하지는 않지만 인접 섹터의 데이터를 부분적으로 손상시킵니다.

따라서 이 방법에는 추가 데이터 손실 위험이 있습니다.

답변2

가장 쉬운 방법은 문제를 완전히 의도적으로 무시하는 것입니다.

펌웨어는 다음 쓰기 시 각 섹터를 다시 매핑하므로 그때까지는 걱정할 필요가 없습니다.

다른 SMART 속성에 주의하세요. 백업이 잘 되어 있는지 확인하세요. 교체 디스크에 투자하는 것을 고려해보세요.

답변3

8개의 불량 블록을 실제로 다시 매핑하도록 펌웨어를 얻으려면 어떻게 해야 합니까?

손상된 섹터에 씁니다.

sudo hdparm --yes-i-know-what-i-am-doing --repair-sector SECTOR_NUMBER /dev/device

이는 손상된 섹터를 0( )으로 바꾸는 파괴적인 작업입니다 0x00.

SMART는 결국 그렇게 "스마트"하지 않으며 항상 실패하는 것을 봅니다. 즉, 대부분의 경우 손상된 섹터를 재할당할 수 없으며 수행할 작업을 지시해야 합니다.

관련 정보