우분투 SSD 완전 초기화! blkdiscard 명령어 실무 활용 가이드

개요

blkdiscard는 SSD나 NVMe 드라이브의 블록을 빠르게 폐기(TRIM)하여 초기화하는 강력한 리눅스 유틸리티입니다. 본 글에서는 안전한 가상 루프백 디바이스를 생성하여 데이터 삭제 위험 없이 blkdiscard의 핵심 옵션과 동작 원리를 단계별로 실습합니다. 디스크 재사용 및 성능 최적화에 필요한 실무 활용 팁을 한눈에 익힐 수 있습니다.

1. 디스크 TRIM 지원 여부 및 블록 디바이스 확인

blkdiscard 명령어로 SSD를 초기화하기 전 스토리지 장치의 TRIM(discard) 기능 지원 여부와 파티션 정보를 확인하기 위해 lsblk --discard -o NAME,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,MOUNTPOINTS 명령어를 실행합니다.
출력 결과에서 DISC-GRAN과 DISC-MAX 항목이 0이 아닌 유효한 값(512B, 2T)으로 표시되면 해당 장치(nvme0n1)가 TRIM 기능을 정상적으로 지원함을 의미합니다.

lsblk –discard -o NAME,DISC-ALN,DISC-GRAN,DISC-MAX,DISC-ZERO,MOUNTPOINTS

2. 안전한 테스트를 위한 가상 루프백 블록 디바이스 생성

실제 물리 드라이브 대신 테스트에 사용할 64MB 크기의 가상 디스크 이미지를 생성하고 무작위 난수 데이터를 채우기 위해 dd if=/dev/urandom of=/tmp/test_disk.img bs=1M count=64 status=none 명령어를 실행합니다.

dd if=/dev/urandom of=/tmp/test_disk.img bs=1M count=64 status=none

생성한 디스크 이미지 파일을 블록 장치처럼 다룰 수 있도록 빈 루프백 디바이스에 연결하기 위해 sudo losetup -fP /tmp/test_disk.img 명령어를 실행합니다.

sudo losetup -fP /tmp/test_disk.img

연결된 루프백 장치 경로를 변수에 저장하여 이후 작업에서 간편하게 참조하기 위해 LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1) 명령어를 실행합니다.

LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1)

환경 변수 $LOOP_DEV에 할당된 가상 루프백 디바이스 이름을 터미널 화면에 확인하기 위해 echo "생성된 디바이스: $LOOP_DEV" 명령어를 실행합니다.
출력 결과를 통해 /dev/loop0 장치가 정상적으로 지정되었음을 확인할 수 있습니다.

echo “생성된 디바이스: $LOOP_DEV”

초기화 전 가상 디스크 내부에 무작위 난수 데이터가 정상적으로 채워져 있는지 첫 128바이트를 16진수로 확인하기 위해 sudo hexdump -C -n 128 $LOOP_DEV 명령어를 실행합니다.
출력 결과를 통해 데이터가 0이 아닌 임의의 값들로 채워져 있음을 확인할 수 있습니다.

sudo hexdump -C -n 128 $LOOP_DEV

3. blkdiscard 기본 실행 및 전체 블록 폐기 실습

실습을 진행할 가상 블록 디바이스의 경로를 변수에 다시 할당하기 위해 LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1) 명령어를 실행합니다.

LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1)

연결된 가상 블록 디바이스의 모든 섹터를 폐기하고 처리 과정을 자세히 확인하기 위해 sudo blkdiscard -v $LOOP_DEV 명령어를 실행합니다.
실행 결과 오프셋 0부터 디바이스 전체 크기에 해당하는 67,108,864바이트(64MB)의 블록이 모두 폐기되었음을 확인할 수 있습니다.

sudo blkdiscard -v $LOOP_DEV

블록 폐기 후 디바이스 내부 데이터가 완전히 초기화되었는지 확인하기 위해 sudo hexdump -C -n 128 $LOOP_DEV 명령어를 실행합니다.
출력 결과 아무런 내용도 표시되지 않거나 0으로 반환되며 이전의 무작위 데이터가 정상적으로 비워졌음을 확인할 수 있습니다.

sudo hexdump -C -n 128 $LOOP_DEV

4. 오프셋 및 크기 지정(-o, -l) 부분 초기화 실습

부분 초기화 실습에 사용할 가상 블록 디바이스의 경로를 변수에 다시 지정하기 위해 LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1) 명령어를 실행합니다.

LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1)

오프셋 및 크기 지정 폐기 동작을 검증하기 위해 가상 디스크의 시작 부분에 테스트 데이터를 새로 기록하는 echo "TESTDATA_RELOAD" | sudo dd of=$LOOP_DEV bs=1M count=10 status=none 명령어를 실행합니다.

echo “TESTDATA_RELOAD” | sudo dd of=$LOOP_DEV bs=1M count=10 status=none

가상 블록 디바이스의 시작 지점(오프셋 0)부터 지정한 10MB 크기 구간만 선택적으로 폐기하기 위해 sudo blkdiscard -v -o 0 -l 10M $LOOP_DEV 명령어를 실행합니다.
출력 결과를 통해 오프셋 0부터 정확히 10,485,760바이트(10MB) 용량의 블록이 정상적으로 폐기되었음을 확인할 수 있습니다.

sudo blkdiscard -v -o 0 -l 10M $LOOP_DEV

지정한 앞부분 10MB 구간의 데이터가 의도대로 초기화되었는지 첫 64바이트를 16진수로 확인하기 위해 sudo hexdump -C -n 64 $LOOP_DEV 명령어를 실행합니다.
출력 결과 데이터가 모두 비워져 아무런 내용도 표시되지 않음을 확인할 수 있습니다.

sudo hexdump -C -n 64 $LOOP_DEV

5. 실습 환경 정리 및 주의사항 확인

실습을 마친 가상 디스크 이미지와 연결된 루프백 디바이스 경로를 확인하여 변수에 저장하기 위해 LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1) 명령어를 실행합니다.

LOOP_DEV=$(losetup -j /tmp/test_disk.img | cut -d: -f1)

테스트에 사용했던 루프백 디바이스를 안전하게 연결 해제하기 위해 sudo losetup -d $LOOP_DEV 명령어를 실행합니다.

sudo losetup -d $LOOP_DEV

가상 블록 디바이스로 사용했던 임시 디스크 이미지 파일을 삭제하여 시스템 디스크 공간을 정리하기 위해 rm -f /tmp/test_disk.img 명령어를 실행합니다.

rm -f /tmp/test_disk.img

현재 시스템에 활성화된 루프백 디바이스 목록을 확인하여 실습에 사용한 가상 디스크가 완전히 제거되었는지 점검하기 위해 losetup -a 명령어를 실행합니다.
출력 결과 아무런 내용도 표시되지 않으며 생성했던 루프백 장치가 정상적으로 정리되었음을 확인할 수 있습니다.

losetup -a

지금까지 우분투에서 blkdiscard 명령어를 활용해 SSD를 빠르고 완벽하게 초기화하는 방법을 살펴보았습니다.
데이터 복구가 불가능할 정도로 깔끔하게 비워지는 만큼 대상 드라이브를 꼼꼼히 확인하고 안전하게 작업하시길 바랍니다.