개요
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 기능을 정상적으로 지원함을 의미합니다.

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

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

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

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

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

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

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

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

4. 오프셋 및 크기 지정(-o, -l) 부분 초기화 실습
부분 초기화 실습에 사용할 가상 블록 디바이스의 경로를 변수에 다시 지정하기 위해 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 명령어를 실행합니다.

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

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

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

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

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

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

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