VirtualBox에서 동적으로 성장하는 VDI 디스크를 어떻게 축소합니까?


35

Virtual Box의 다양한 Ubuntu 설치에서 동적으로 성장하는 VDI (가상 디스크)는 실제로 꾸준히 "성장"하고 있습니다.

가상 머신에서 파일을 삭제해도 VDI 파일이 호스트 하드 디스크 공간에서 가져온 공간을 비울 수 없습니다.

사용하지 않은 하드 디스크 공간을 호스트에 다시 제공하기 위해이 파일을 어떻게 축소합니까?

답변:


34

동적으로 증가하는 Virtual Box 가상 하드 드라이브 파일은 가상 머신의 요구에 따라이 파일을 설정할 때 정의한 최대 크기까지 확장 할 수 있습니다. 그러나 게스트 OS에서 삭제 한 파일 공간을 비우지 않습니다.

디스크가 너무 커지면 사용하지 않는 공간이 0으로 채워지고 드라이브가 VDI 형식 인 경우 다시 압축 할 수 있습니다.

ext2 ~ ext 4 파일 시스템의 경우 명령 줄 유틸리티 zerofree *로 Ubuntu 게스트에서이 작업을 수행 할 수 있습니다 .zerofree 설치

zerofree /dev/sdxX

드라이브를 사용하지 않고 마운트 해제해야 합니다. 따라서이 목적으로 생성 한 다른 VM에 임시로 바인딩하거나이 VM에서 Ubuntu 라이브 환경을 부팅해야합니다.

/dev/sdxXext2, ext3 또는 ext4 형식 파티션 으로 교체하십시오 .

둘 이상의 파티션 zerofree에서 각 파티션마다 반복 해야합니다. 0을 채우면 가상 파일이 일시적으로 최대 크기까지 커집니다.

사용되지 않은 모든 드라이브 공간이 0으로 채워지면 드라이브를 축소합니다.

VBoxManage modifyhd <name>.vdi --compact

이렇게하면 VDI 파일의 파일 크기가 상당히 줄어 듭니다.

* Windows 게스트에서는 사용하지 않는 공간을 유틸리티로 교체 할 수 있습니다 sdelete.


게스트 내에서 암호화 된 파일 시스템에서도 작동합니까?
smichak

확실한. 을 사용하는 경우 ecryptfs암호화 된 파일은 디스크 유틸리티에 대한 일반 파일처럼 보이며 작동합니다. 전체 디스크 암호화를 사용하는 경우 어쨌든 확장 포맷 파티션으로 인식되지 않습니다 :)
chronospoon

dm-crypt 블록 장치에서 ext4 파티션을 사용하고 있습니다 ... 방법을 시도했지만 압축 후 .vdi 파일이 더 작게 보이지 않습니다. 0 블록은 dm-crypt 아래의 블록 장치에 0이 아닌 블록으로 저장된다고 생각합니다.
smichak

2
@ smichak : 그것이 암호화 지점입니다. 파일 경계를 볼 수 없도록 모든 드라이브를 암호화합니다.
Takkat

3
VDI를 다른 시스템에 연결하지 않으려면 복구 모드로 부팅 mount -n -o remount,ro -t ext4 /dev/sda1한 다음 디스크를 읽기 전용으로 마운트 한 다음를 마운트하십시오 zerofree -v /dev/sda1.
Hamid Nazari

1

사용 가능한 디스크 공간을 0으로 만드는 대체 방법은 다음과 같습니다 (가장 시간이 오래 걸릴 수 있음). 이후에도 VBoxManage modifyhd <disk> --compact실제 디스크 파일을 압축하려면 계속 실행 해야합니다.


이 명령은 디스크가 마운트 해제되어있는 동안 디스크를 0으로 만들 수 있습니다.

apt-get install zerofree
zerofree -v /dev/sdxN


다음은 dd가 주기적으로 출력을 인쇄하는 방법의 예입니다.

dd if=/dev/zero of=temp-file-on-disk bs=20M

# run this to get the process ID of the dd command
pgrep -l '^dd$'
# then put the process ID on the command line to "kill -USR1"
# this will tell dd to print the current status (in another terminal)
kill -USR1 $(pgrep -l '^dd$' | awk '{print $1}')


다음 dd은 출력을 주기적으로 자동 인쇄 하는 유사한 프로그램입니다.

apt-get install dcfldd
dcfldd if=/dev/zero of=temp-file-on-disk bs=20M

1
zerofree마운트 된 파일 시스템에서 사용되었지만 읽기 전용으로 마운트 된 경우를 보았습니다 . 루트 FS의 경우에도 : sudo mount -o remount,ro /-GUI 세션에서는 루트가 사용 중이므로 실패합니다. 그러나 실행 수준 1 ( telinit 1)에서 가능하므로 라이브 CD로 부팅 할 필요가 없습니다.
Tomasz Gandor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.