badblocks 유틸리티가 계속 "마지막 블록이 유효하지 않습니다"라고 보고합니다.

badblocks 유틸리티가 계속 "마지막 블록이 유효하지 않습니다"라고 보고합니다.

badblocks단일 파티션이 있는 드라이브에서 실행하려고 합니다. 이 드라이브에는 FreeBSD 파일 시스템이 포함되어 있습니다.

Linux 라이브 USB 드라이브에서 부팅합니다. 드라이브가 마운트 해제되었습니다. 출력은 fdisk -l다음과 같습니다

   Device  Boot     Start          End    Id     System
/dev/sda1     *        63   976773167+    a5     FreeBSD

그래서 나는 다음을 실행합니다.

# badblocks -v /dev/sda1

그것은 말한다:

badblocks: invalid last block - /dev/sda1

이에 대한 유용한 정보를 찾을 수 없습니다. badblocks여기서 유틸리티를 올바르게 사용하고 있습니까 ? 아니면 드라이브에 문제가 있음을 의미합니까?

답변1

아니요, 이는 드라이브에 문제가 있음을 나타내지 않습니다. 이 오류가 발생하는 이유는 badblocks가 /dev/sda1을 장치로 받아들이는 대신 마지막 블록 매개변수로 받아들이기 때문입니다.

귀하의 질문에 구문이 올바른 것 같습니다. 장치 뒤에 마지막 블록 매개변수를 지정해 보십시오.
badblocks -v /dev/sda1 976773167

그래도 작동하지 않으면 첫 번째 블록도 추가해 보세요.
badblocks -v /dev/sda1 976773167 63

이것이 드라이브에 문제가 있음을 나타내지 않는다는 점을 확인하기 위해 유효하지 않은 마지막 블록 매개변수 "nope"를 추가했을 때의 출력은 다음과 같습니다.

sudo badblocks -v /dev/sdb1 아니요
badblocks: 마지막 블록이 유효하지 않습니다. - 아니요


다음은 내가 마지막으로 badblock을 사용한 bash 기록의 예입니다(내 시스템에서 이러한 드라이브에 액세스하려면 sudo 액세스가 필요합니다).
sudo badblocks -v /dev/sdb1

산출:


불량 블록을 확인하려면 블록 0~976751967을 확인하세요 (읽기 전용 테스트).

Ctrl+C를 사용하여 일정 시간이 지난 후 프로세스를 취소하면 출력은 다음과 같습니다.

블록 7470720에서 중단

프로세스를 재개하는 구문은 다음과 같습니다(참고자료 참조 man badblocks).
badblocks -v 장치 [마지막 블록] [첫 번째 블록]

"마지막 블록"은 장치에서 읽을 마지막 블록이고 "첫 번째 블록"은 읽기를 시작해야 하는 위치입니다. 예:
sudo badblocks -v /dev/sdb1 976751967 7470720

산출:

블록 7470720~976751967을 확인합니다. 불량 블록 확인(읽기 전용 테스트):

답변2

오늘날 최신 디스크 드라이브 하드웨어의 badblocks 명령은 노력할 가치가 거의 없습니다. 이는 드라이브 컨트롤러 보드가 내부적으로 불량 블록을 식별하고 자동 교체를 위해 원래 할당된 "예비" 블록에서 이를 교체하기 때문입니다. 이러한 예비 블록이 부족하고 불량 블록 문제가 있는 경우 하드웨어가 불량해지기 때문에 디스크를 교체하는 것이 좋습니다.

드라이브 상태를 알고 싶다면 대부분의 최신 드라이브는 SMART 드라이브 인터페이스를 지원하여 디스크 상태를 보고합니다. 디스크 상태를 표시하고 디스크 상태에 대한 정보를 제공할 수 있는 유틸리티가 많이 있습니다. 다음 중 하나를 시도해 보세요.

답변3

웹 페이지에서 명령을 복사했습니다. -v의 대시는 다른 대시 문자로 대체됩니다. (일반 대시보다 약간 깁니다.) 명령을 입력하거나 어떻게든 수정하세요.

답변4

올바른 구문을 사용했음에도 불구하고 이 오류가 발생하고 큰 디스크(예: 몇 TB)와 작은 블록 크기(예: 512바이트)를 사용하는 경우 badblocks32비트 블록 번호 사용에 제한이 있을 수 있습니다. .

해결 방법으로 더 큰 청크를 사용할 수 있습니다. badblocks사용할 수 있는 가장 작은 블록 크기를 찾으려면 badblocks다른 값( -b시작/끝 블록 유무에 관계없이)을 사용하여 실행하면 됩니다. 이런 오류가 발생하면

badblocks: 정의된 데이터 유형에 비해 값이 너무 큽니다. 잘못된 종료 블록: 32비트 값이어야 합니다.

그런 다음 작동할 때까지 블록 크기를 늘려보세요(예: -b 512또는 -b 1024) . -b 2048이를 통해 사용할 수 있는 몇 가지 솔루션이 있지만 아무것도 없는 것보다 낫습니다.

ddrescue이때 이를 사용하거나 관리자에게 문의하여 다음 badblocks버전에서 문제를 해결할 수도 있습니다.

관련 정보