리눅스 배포판과 마이크로소프트 윈도우를 함께 사용하는 듀얼부팅 사용자라면, 운영체제 간 저장 공간을 조절하기 위해 파티션 크기를 줄이거나 늘리는 작업을 종종 하게 됩니다. 이 과정에서 리눅스의 GParted나 윈도우의 chkdsk로부터 불량 섹터(bad sector) 경고 메시지를 받은 경험이 있을 수 있습니다. 리눅스만 단독으로 사용하는 경우에도 같은 경고가 나타날 때가 있습니다.
흥미로운 점은, 겉보기에 동일해 보이는 불량 섹터 경고에 실제로는 서로 다른 두 가지 유형이 있다는 사실입니다. 하나는 디스크 플래터의 물리적 구조나 NAND 메모리 셀에 문제가 생겼음을 알리는 전통적인 의미의 불량 섹터입니다. 대부분의 사람들이 '불량 블록'이라고 말할 때 이를 떠올리지만, 엄밀히 따지면 불량 섹터와 불량 블록 사이에는 미묘한 기술적 차이가 존재합니다. 다만 시스템이 섹터를 잘못 판별하는 경우는 매우 드뭅니다.
다른 하나는 '소프트 불량 섹터(soft bad sector)', 즉 소프트웨어 불량 블록으로, 단순한 파일 시스템 작업만으로도 해결할 수 있습니다. 하지만 불량 블록에 데이터를 기록하는 것은 위험할 수 있으므로, 내장 디스크를 다룰 때는 무엇보다 먼저 SMART 데이터 점검부터 시작하는 것이 좋습니다. 이 방식은 비파괴적이며, 물리적인 문제를 사전에 걸러낼 수 있습니다. SD 카드나 USB 메모리처럼 SMART를 지원하지 않는 장치라면 아래 두 번째 방법부터 진행하세요.
방법 1: SMART 데이터 확인하기
불량 섹터가 단순한 소프트웨어 오류인지 확신하기 어렵다면, SMART 데이터를 통해 디스크 자체의 펌웨어 정보를 직접 확인할 수 있습니다. 그놈 디스크 유틸리티(GNOME Disks)를 실행하세요. Unity 데스크톱이라면 Dash에서, Xfce4라면 Whisker 메뉴에서, LXDE라면 보조프로그램 메뉴에서, KDE라면 GNOME 응용 프로그램 메뉴에서 찾을 수 있습니다. 터미널을 열고 gnome-disks 명령을 입력해 실행할 수도 있습니다. 왼쪽 목록에서 점검할 하드 디스크를 선택한 뒤, 오른쪽 상단 창 컨트롤 옆의 메뉴 버튼을 클릭합니다. 대부분의 GNU/Linux 설치 환경에서 디스크 유틸리티는 기본적으로 주 하드 디스크를 표시합니다.
메뉴에서 'SMART 데이터 및 자가 진단(SMART Data & Self-Tests)' 항목을 선택합니다. Ctrl+S 단축키로도 이 창을 열 수 있습니다. 여기에는 드라이브의 현재 상태가 표시되며, 값이 비어 있다면 '자가 진단 시작(Start Self-test)' 버튼을 눌러 디스크가 스스로 점검하도록 강제할 수 있습니다. 창 상단의 '전체 평가(Overall Assessment)' 항목이 디스크 유틸리티가 판단한 드라이브 상태를 알려줍니다.
전체 화면 모드에서도 SMART 속성 목록을 스크롤해야 할 수 있습니다. 특히 '재할당 횟수(Reallocation Count)' 항목에 주목하세요. 이 값은 이미 재할당된 섹터의 수를 나타냅니다. 불량 섹터가 많다면, 드라이브가 완전히 고장 나기 전에 미리 교체하는 것이 현명합니다.
방법 2: 올바른 슈퍼블록 확인하기
SMART 데이터에는 이상이 없는데도 일부 디스크 유틸리티에서 'Bad Superblock' 오류가 발생하는 경우가 있습니다. SD 카드나 USB 메모리 등은 SMART 데이터를 읽을 수 없기 때문에 오류가 발생해도 원인을 바로 알기 어렵습니다. 이런 경우 소프트웨어 문제일 가능성이 높습니다. 예를 들어 다음과 같은 명령을 실행했다고 가정해 보겠습니다.
fsck.ext4 /dev/sda
이 명령은 아마도 불량 슈퍼블록 오류를 출력할 것입니다. 슈퍼블록은 파일 시스템의 마스터 블록을 가리킵니다. 하지만 이것은 실제 불량 블록이 아니라 CLI 입력 오류의 결과물입니다. /dev/sda는 드라이브 전체를 의미할 뿐 파티션이 아니기 때문에, fsck는 슈퍼블록이 존재하지 않는 위치를 찾다가 잘못된 판단을 내리는 것입니다. 다행히 이 명령은 파괴적이지 않으므로 걱정할 필요가 없습니다. 대신 다음과 같이 실행해 보세요.
sudo fsck.ext4 /dev/sda1
이제 파일 시스템이 정상(clean)이라는 메시지가 표시될 것입니다. ext 뒤의 숫자가 해당 볼륨의 ext 버전(ext2, ext3, ext4)과 일치하는지 반드시 확인하세요.
또한 FAT12/16/32, NTFS, HFS/HFS+ 볼륨에 ext2/3/4용 fsck를 실행하려고 하면 같은 오류가 발생할 수 있습니다. 일관성 검사 도구가 파일 시스템 유형이 기대와 맞지 않는다고 혼동하여 문제가 있다고 판단하는 것입니다. FAT 볼륨은 비트 버전과 관계없이 fsck.vfat 또는 dosfsck(일부 리눅스 버전에서는 fsck.msdos)를 사용해야 합니다. dosfsck나 fsck.vfat에 -t 옵션을 추가하면 읽을 수 없는 클러스터를 불량 블록으로 표시할 수 있습니다.
방법 3: NTFS 볼륨의 불량 블록 점검하기
윈도우와 리눅스를 듀얼부팅으로 사용 중이고 NTFS 볼륨에서 슈퍼블록 또는 불량 섹터 오류가 발생했다면, 윈도우로 재부팅한 후 명령 프롬프트에서 다음을 실행합니다. c:는 해당 NTFS 볼륨의 드라이브 문자로 바꿔 주세요.
chkdsk /r c:
윈도우는 표면 검사(surface scan)를 완료하기 위해 재부팅이 필요할 수 있습니다. 이 과정은 시간이 꽤 걸릴 수 있으므로, 운영체제가 응답하지 않는 것처럼 보여도 단순히 검사 시간이 길어서일 가능성이 큽니다. 권한 부족 오류가 발생한다면 시작 메뉴에서 명령 프롬프트를 우클릭한 후 '관리자 권한으로 실행'을 선택하고 진행하세요.
NTFS 볼륨을 리눅스에서만 사용한다면 chkdsk를 활용할 수 없지만, 불량 블록 오류가 단순한 유형 불일치에서 비롯된 것이라면 수정 방법이 있습니다. 다음 명령을 실행하고, /dev/sd 뒤의 문자와 숫자를 올바른 장치 및 파티션 식별자로 바꿉니다.
sudo ntfsfix /dev/sdb1
시스템에 연결된 모든 볼륨의 이름을 확인하려면 sudo fdisk -l 명령을 실행하거나, 설치되어 있다면 그놈 디스크 유틸리티를 다시 참조하면 됩니다. 더티 비트(dirty bit)를 확실히 지우고 싶다면 다음과 같이 -d 옵션을 추가할 수 있습니다.
sudo ntfsfix -d /dev/sdb1
NTFS 볼륨에 물리적 하드웨어 문제가 아닌 소프트 불량 블록이 있다고 확신하는 경우, 예를 들어 불량 섹터가 있는 오래된 디스크를 새 볼륨으로 클론한 경우라면, 불량 블록 표시 목록을 초기화하는 다음 명령을 실행할 수 있습니다.
sudo ntfsfix -bd /dev/sdb1
방법 4: 리눅스 badblocks 유틸리티 활용하기
라이브 ISO 리눅스로 부팅했거나 ext2, ext3, ext4 파일 시스템을 언마운트할 수 있는 상태라면, 읽기 전용 방식의 불량 블록 검사를 실행할 수 있습니다.
sudo fsck.ext4 -c /dev/sda1
물론 /dev/sd 뒤에는 올바른 볼륨 식별자를, fsck.ext 뒤에는 올바른 ext 버전 번호를 지정해야 합니다. 대신 -cc 옵션을 지정하면 더욱 철저한 비파괴 읽기-쓰기(read-write) 검사가 수행됩니다.
이것이 badblocks 유틸리티의 일반적인 사용법이지만, 단독으로 실행하는 것도 가능합니다. 장치 이름과 함께 다음 명령을 실행하면 결과가 터미널에 바로 출력됩니다.
sudo badblocks -n /dev/sdb1
-w 옵션을 사용하면 쓰기 모드 검사(write-mode test)를 수행할 수 있지만, -n과 -w는 서로 배타적이므로 함께 사용해서는 안 됩니다. 특히 -w 옵션은 데이터가 있는 볼륨에는 절대 사용하지 마세요. 모든 내용이 깨끗하게 지워집니다. 데이터를 보존하려면 속도가 느리더라도 -n 옵션을 사용하세요. 반면 지워도 상관없는 볼륨이라면 -w 옵션도 안전하게 사용할 수 있습니다. -v 옵션은 두 모드와 모두 조합할 수 있으며, 데이터 손상을 분석하는 데 유용한 상세 출력을 제공합니다. 또한 -o 옵션에 텍스트 파일 이름을 지정하면 결과를 파일로 저장해 나중에 검토할 수 있습니다.
실제 불량 블록이 많다면 방대한 정보가 출력되므로, 다음과 같이 로그 파일 형태로 기록해 두는 것이 좋습니다.
sudo badblocks -nv -o badblocks.log /dev/sdb1
저자 소개
케빈 애로우즈(Kevin Arrows)
케빈 애로우즈는 10년 이상의 업계 경력을 보유한 베테랑 기술 전문가입니다. MCTS(Microsoft Certified Technology Specialist) 자격증을 보유하고 있으며, 최신 기술 동향을 끊임없이 학습하는 것에 깊은 열정을 가지고 있습니다. 소프트웨어 개발, 사이버 보안, 클라우드 컴퓨팅 등 다양한 기술 분야에 대해 폭넓게 집필해 왔으며, 복잡한 기술 개념을 명확하고 간결하게 설명하는 능력으로 동료들에게 널리 인정받고 있습니다.