개요
디스크 장애를 사전에 방지하고 데이터 손실을 막기 위해 badblocks 명령어로 불량 섹터(배드섹터)를 점검하는 방법을 살펴봅니다. 안전한 가상 실습 환경 구성부터 읽기 전용, 진행률 표시, 결과 파일 저장 및 비파괴 쓰기 모드까지 핵심 옵션을 단계별로 실습합니다.
1. 실습 환경 준비 및 기본 읽기 전용 검사 (-v)
badblocks 도구가 포함된 e2fsprogs 패키지를 최신 상태로 설치하거나 점검하기 위해 sudo apt-get update -qq && sudo apt-get install -y e2fsprogs 명령어를 실행합니다.

실제 하드 디스크 대신 안전하게 불량 섹터 검사를 실습할 50MB 크기의 가상 디스크 이미지를 생성하기 위해 dd if=/dev/zero of=/tmp/disk_test.img bs=1M count=50 status=none 명령어를 실행합니다.

생성한 가상 디스크 이미지 파일을 블록 디바이스처럼 인식시키기 위해 사용 가능한 루프 디바이스에 연결하는 sudo losetup -f /tmp/disk_test.img 명령어를 실행합니다.

연결된 루프 디바이스 경로를 환경 변수에 저장하고 정상적으로 할당되었는지 확인하기 위해 LOOP_DEV=$(losetup -j /tmp/disk_test.img | cut -d: -f1) && echo "테스트 디바이스: $LOOP_DEV" 명령어를 실행합니다.

badblocks 명령어는 저장 장치의 블록을 스캔하여 손상된 불량 섹터(배드 섹터)의 유무를 점검합니다.
데이터 손실 위험이 없는 기본 읽기 전용 모드에 진행 상황을 상세히 출력하는 -v 옵션을 추가하여 검사를 수행합니다.
검사 완료 후 출력되는 불량 블록 번호가 없다면 디스크 상태가 정상임을 의미합니다.
⚙️ [주요 옵션]
-v : 검사 진행률 및 결과를 상세한 메시지로 화면에 출력합니다.-w : 디스크에 특정 패턴 데이터를 직접 쓰고 다시 읽어 검사하는 파괴적 쓰기 모드를 실행합니다(기존 데이터 삭제).-n : 기존 데이터를 임시로 보존하면서 읽기/쓰기 테스트를 수행하는 비파괴 읽기-쓰기 모드를 실행합니다.-s : 검사 진행 상황을 완료된 블록 수와 백분율(%) 형태로 실시간 표시합니다.-b : 검사할 블록의 크기를 바이트 단위로 지정합니다(기본값은 1024바이트).-o : 발견된 불량 블록 번호 목록을 화면 대신 지정한 텍스트 파일로 저장합니다.-p : 지정한 횟수만큼 검사 과정을 반복 수행하여 간헐적인 오류까지 정밀하게 탐지합니다.

2. 검사 진행률 표시 옵션 활용 (-s, -v)
가상 디스크 디바이스 경로를 확인하고 실시간 진행률을 확인하기 위해 -s 및 -v 옵션을 적용한 sudo badblocks -s -v $LOOP_DEV 명령어를 실행합니다.-s 옵션은 검사 완료율(%)과 처리된 블록 수를 실시간으로 보여주며, -v 옵션은 상세한 검사 과정과 최종 결과를 화면에 출력합니다.
대용량 저장 장치를 검사할 때 작업 진행 상태를 직관적으로 파악할 수 있으며, 불량 블록 번호 없이 검사가 완료되면 디스크가 정상 상태임을 나타냅니다.

3. 블록 크기 지정 및 검사 결과 파일 저장 (-b, -o)
가상 디스크 디바이스 경로를 가져와 현대 파일 시스템의 기본 단위인 4096바이트 크기로 검사하고, 결과를 텍스트 파일로 저장하기 위해 LOOP_DEV=$(losetup -j /tmp/disk_test.img | cut -d: -f1) && sudo badblocks -b 4096 -v -o /tmp/badblocks_report.txt $LOOP_DEV 명령어를 실행합니다.-b 4096 옵션을 지정하면 기본 블록 크기(1024바이트) 대신 파일 시스템에 맞춘 블록 단위로 정밀하게 스캔할 수 있습니다.-o 옵션은 검사 중 발견된 불량 섹터 목록을 지정한 파일에 기록하여 추후 복구나 마킹 작업에 활용할 수 있도록 지원합니다.

검사 결과가 저장된 리포트 파일의 내용을 확인하기 위해 cat /tmp/badblocks_report.txt 명령어를 실행합니다.
불량 섹터가 존재하지 않는 정상 디스크의 경우 파일 내에 기록된 블록 번호가 없어 빈 파일 형태로 표시됩니다.

4. 비파괴 읽기/쓰기 모드 검사 및 실습 정리 (-n)
기존 데이터를 안전하게 유지하면서 읽기와 쓰기 테스트를 병행 검사하기 위해 -n 및 -v 옵션을 적용한 LOOP_DEV=$(losetup -j /tmp/disk_test.img | cut -d: -f1) && sudo badblocks -n -v $LOOP_DEV 명령어를 실행합니다.-n 옵션은 원본 데이터를 백업한 뒤 테스트 패턴을 기록하고 다시 원래 데이터로 복원하므로 데이터 손실 없이 정밀한 읽기/쓰기 검사가 가능합니다.
검사 과정이 상세하게 출력되며 손상된 블록 번호가 나타나지 않으면 디스크 상태가 정상임을 확인할 수 있습니다.

실습에 사용했던 루프 디바이스 연결을 해제하고 임시 가상 디스크 이미지와 결과 파일을 삭제하기 위해 LOOP_DEV=$(losetup -j /tmp/disk_test.img | cut -d: -f1) && sudo losetup -d $LOOP_DEV && rm -f /tmp/disk_test.img /tmp/badblocks_report.txt 명령어를 실행합니다.

지금까지 우분투에서 badblocks 명령어를 사용해 디스크 불량 섹터를 검사하는 핵심 옵션들을 자세히 살펴보았습니다.
소중한 데이터를 보호하기 위해 정기적으로 디스크 상태를 점검하고 드라이브 고장을 사전에 예방해 보시기 바랍니다.