반응형
작성일: 2026년 5월 22일

 

VM 생성시 500GB 용량의 VM image file(예: abc.qcow2)을 생성했다고 하더라도

실제로 VM instance가 500GB 중에서 100GB만 파일을 사용하고 있다면

아래와 같이 qemu-img 명령을 통해서 Host OS에서는  100GB 용량의 qcow2 파일로 줄일 수 있다.

 

qemu-img convert -O qcow2 abc.qcow2 abc-shrunk.qcow2

 

그런데 위와 같이 qemu-img 명령을 사용한다고 해서 500GB Volume이 항상 100GB짜리로qcow2 파일로 줄어드는 것은 아니다.

일반적으로 VM instance 내부에서는 파일을 만들고, 삭제하는 과정을 반복할 것이다.

VM instance의 운영 시간이 길어지고 많은 일을 하면서 이런 file 생성과 삭제는 더 많이 발생할 것이다.

대부분의 OS에서는 File을 삭제한다고 해도 삭제된 파일이 진짜로 Storage volume에서 '0' 또는 'NULL'로 Clear되는게 아니고

File 내용은 온전하게 남아 있고, File system 관리 테이블에 File name과 Meta data 정도만 삭제하는 것이다.

(디지털 포렌식할 때, 기존 삭제된 데이터가 모두 복구되는 이유도 Filesystem의 이런 동작 방식 때문이다)

 

그렇기 때문에 현재 `df -h` 명령으로 File system의 용량을 조회했을 때, 100GB로 보이더라도 

Storage volume에는 기존에 삭제했던 File contents들이 그대로 남아 있어서 0x0 값이 아닌 뭔가 값이 채워진 Storage volume의 공간이 100GB보다는 훨씬 크다.

이것 때문에 `qemu-img convert` 명령으로 Volume의 빈공간을 줄이려고 해도 줄여지지 않는 것이다.

(실제로 Volume에는 빈 공간이 있는게 아니고, 기존에 지워진 File contents는 남아 있으니까)

 

그래서 아래와 같이 강제로 Storage volume에서 File system이 관리하는 영역이 아닌 모든 공간을 '0x00' 값으로 채우고

`qemu-img conver` 명령을 실행하면 아주 깔끔하게 qcow2 image file의 크기가 줄어든다.

 

## VM instance 내부에서 아래의 명령을 실행한다.

sudo dd if=/dev/zero of=/zero.fill bs=1M status=progress
sudo sync
sudo rm /zero.fill

 

(i) 주의할 점: 위 명령은 Storage volume의 bit 단위로 모두 0x0 값으로 바꾸는 작업을 하기 때문에 오랜 시간이 걸린다.

 

위 작업이 끝나고, Host OS에서 아래와 같이 qcow2 image file의 빈공간을 제거하는 작업을 한다.

qemu-img convert -O qcow2 abc.qcow2 abc-shrunk.qcow2

 

이렇게 하면, 500GB 짜리 QCOW2 파일의 크기가 많이 줄어들것이다.

(운이 좋으면, 7~8GB로 대폭 줄어들수도 있음~~ ^^)

 

+ Recent posts