포맷 시 목록에서 불량 섹터 제외

포맷 시 목록에서 불량 섹터 제외

Pi와 함께 사용할 오래된 하드 드라이브를 준비하고 있습니다. 하지만 불량 섹터가 36개가 넘습니다(Avoce 임계값). 그래서 어떤 섹터가 영향을 받았는지 조사하기 위해 달려가서 badblocks파일에 저장했습니다.

이제 파일에는 기본적으로 줄 바꿈으로 구분된 영향을 받는 모든 섹터 목록이 포함됩니다.

mkfs.ext4이 주소에 데이터 블록을 할당하지 않도록 지금 이 정보를 어떻게 사용합니까 ?

답변1

그래서 실수를 저질렀습니다. 먼저 -c 옵션과 함께 mkfs.ext4를 사용하는 대신 badblocks 명령을 사용하여 하드 드라이브의 불량 섹터를 검색했습니다.

유일한 문제는 약 2일 정도 걸렸기 때문에 검색을 반복하고 싶지 않다는 것입니다.

디스크립터 파일 sda를 가리키는 명령을 실행했기 때문에 지금 가지고 있는 정보는 섹터(LBA 주소)인 것 같습니다.

섹터가 거의 같은 위치에 있기 때문에 두 개의 파티션을 계산하고 만들 수 있습니다.

  • 하지만 분할하지 않고 단일 파티션을 만드는 것이 더 좋습니다.

    --그렇게 교활한 사람이 있나요?그리고 예를 들어 블록 크기가 4K인 파티션을 생성하는 경우 명령에 필요한 정보 형식을 파악합니다. 누구든지 나를 도울 수 있다면 좋을 것입니다!

몇 가지 문제:

  • 정보를 변환할 때 파티션 시작 주소와 파티션 블록 크기는 어떤 방식으로 관련됩니까?

답변2

나는 이제 그것을 스스로 알아냈다. 기본적으로 파티션이 아닌 /dev/sda와 같은 장치를 가리킬 때 블록 크기 1k(1024)가 사용됩니다.

파티션(시작 및 끝 주소 포함) 대신 장치를 가리키는 mke2fs를 실행하면 MBR이 기록되지 않고 MBR이 덮어쓰여집니다.

$ sudo dd if=/dev/sda bs=512 count=1 | hexdump -C
1+0 레코드의 1+0 레코드
복사됨
512바이트(512B), 0.00240179초, 213kB/s
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |.... ......
*
00000200

그래서 주소를 4로 나누고 4k 블록 1개에 1k 블록이 4개 있다는 것을 기억하면 간단히 주소를 계산할 수 있습니다. 그런 다음 파일을 생성하고 새로 생성된 파일을 사용하여 mke2fs를 실행하여 불량 블록을 격리할 수 있습니다. 다음과 같습니다:
mke2fs -f ext4 -l badblocks_file /dev/sdX

관련 정보