서버 운영/버추얼박스(VirtualBox)

버추얼박스 vdi 파일 용량 축소하기

씨실과 날실 2019. 9. 5. 09:00

지난 번 글에서 vdi 파일의 가상 디스크 용량 확장을 다루어보았습니다.

이번에는 필요 이사으로 커진 vdi 파일을 축소해보도록 하겠습니다.

버추얼박스의 vdi 파일의 저장 방식은 고정 크기과 동적 할당으로 나뉘게 됩니다.

고정 할당은 가상 머신이 실제로 사용되는 용량과는 상관 없이 사용자가 정한 크기만큼 실제 디스크 용량을 차지하게 됩니다. 그만큼 가용 디스크 용량이 줄어들게 됩니다. 대신 이 고정 크기 vdi는 가상 머신의 속도에서 이점이 있습니다. 따라서 가상 머신 폴더를 외장하드에 두는 등의 작업을 통해 용량이 충분하다면 고정 크기 방식을 하는 것도 고려해봄직 합니다.

동적 할당은 가상 머신이 실제 사용하는 크기만큼만 실제 디스크 용량을 점유하는 방식입니다. 이렇게 한다면 당연히 불필요하게 큰 용량을 가상 머신이 차지하지 않아 가용 디스크 용량 관리 측면에서 이점이 있습니다. 그러나 가상 머신의 실행 속도가 고정 크기 vdi 파일에 비해 느립니다. 그렇지만 제가 사용해보면서 느끼지만 호스트 컴퓨터의 성능과 가상 머신에 할당한 시스템 자원만 충분하다면 속도 는 큰 문제가 되지 않습니다.

동적 할당 vdi에서 사용자가 보다 눈여겨 볼 부분은 바로 가상 머신 속 작업(즉 게스트 컴퓨터 내 작업)에서 파일을 삭제했다고 해서 한 번 늘어난 vdi 파일이 다시 줄어들지는 않는다는 점입니다. 보통 컴퓨터를 쓰면 깔았던 프로그램을 지우거나 백업 자료를 정리하는 등 실제 사용 용량이 줄어들기도 하지만 컴퓨터를 계속 쓰면 결국 사용 용량은 계속 늘어나게 됩니다. 가상 머신도 사용 패턴은 비슷할 것이므로 보통 vdi 파일의 크기는 신경쓰지 않아도 됩니다만 가용 용량의 부족 등 여러 이유로 불필요하게 늘어난 vdi 파일을 실제 용량으로 줄여할 때가 있습니다.

이번에는 이 vdi 파일 크기 축소 작업에 대해 알아보도록 하겠습니다.

[작업환경]

가상머신 : VirtualBox 6.0.10

Host OS : Windows 10 1903

Guest OS : Ubuntu 18.04.2

Apache2 : Apache/2.4.29 (Ubuntu)

PHP7 : PHP 7.2.19-0ubuntu0.18.04.1

MariaDB : mysql  Ver 15.1 Distrib 10.4.7-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

phpMyAdmin : phpMyAdmin 4.9.0.1

작업 환경은 위와 같습니다.

제글을 찾아 오신 분들 중에는 호스트OS 게스트OS



vdi 파일 축소를 위한 작업 환경 조성

실험용 대용량 파일 다운로드

테스트로 대용량을 다운받기 위해 허블 우주망원경 사이트(https://www.spacetelescope.org/)에 방문해 대용량 이미지 파일을 받았습니다. 위 그림은 아래 링크의 페이지 화면입니다.

해당 페이지 우측 하단에서 이미지를 사이즈별로 다운받을 수 있습니다. 저는 Fullsize Original과 Publication TIFF 40K 두 파일을 받았습니다.

터미널에서 바로 다운받으시려면 아래 명령을 이용하시면 됩니다.

study@study-VirtualBox:~/다운로드$ wget https://www.spacetelescope.org/static/archives/images/original/heic1502a.psb

study@study-VirtualBox:~/다운로드$ wget https://www.spacetelescope.org/static/archives/images/publicationtiff40k/heic1502a.tif

위 두 명령을 실행하면 아래와 같이 진행됩니다.

study@study-VirtualBox:~/다운로드$ wget https://www.spacetelescope.org/static/archives/images/original/heic1502a.psb
--2019-08-31 11:02:33--  https://www.spacetelescope.org/static/archives/images/original/heic1502a.psb
Resolving www.spacetelescope.org (www.spacetelescope.org)... 134.171.75.33
접속 www.spacetelescope.org (www.spacetelescope.org)|134.171.75.33|:443... 접속됨.
HTTP request sent, awaiting response... 200 OK
Length: 4637379310 (4.3G) [application/octet-stream]
Saving to: ‘heic1502a.psb’

heic1502a.psb       100%[===================>]   4.32G  9.05MB/s    in 8m 32s 

2019-08-31 11:11:07 (8.64 MB/s) - ‘heic1502a.psb’ saved [4637379310/4637379310]

study@study-VirtualBox:~/다운로드$ wget https://www.spacetelescope.org/static/archives/images/publicationtiff40k/heic1502a.tif
--2019-08-31 11:12:20--  https://www.spacetelescope.org/static/archives/images/publicationtiff40k/heic1502a.tif
Resolving www.spacetelescope.org (www.spacetelescope.org)... 134.171.75.33
접속 www.spacetelescope.org (www.spacetelescope.org)|134.171.75.33|:443... 접속됨.
HTTP request sent, awaiting response... 200 OK
Length: 1816560956 (1.7G) [image/tiff]
Saving to: ‘heic1502a.tif’

heic1502a.tif       100%[===================>]   1.69G  8.65MB/s    in 3m 15s 

2019-08-31 11:15:36 (8.90 MB/s) - ‘heic1502a.tif’ saved [1816560956/1816560956]

 

우분투의 파일 관리자인 노틸러스를 열어 다운받은 두 이미지 파일을 확인한 모습입니다.

tif(= tiff)

tif 파일은

psb

psb파일은

저장된 것을 확인한 다음 우분투를 꺼서 가상머신 실행을 중지합니다.

초고용량 이미지 파일 다운 후 vdi파일 용량 확인

두 대용량 이미지 다운 받은 다음 vdi파일 크기입니다. 19.6GB이군요.

다운받은 대용량 이미지 삭제

study@study-VirtualBox:~/다운로드$ rm -f heic1502a.tif heic1502a.psb cf01.txt cf02.txt

가상 머신을 다시 실행해 터미널을 열어 위 명령을 실행하여 다운받았던 두 초고용량 이미지 파일을 삭제해줍니다. 그 후 다시 우분투를 종료하여 실행 가상 머신을 끕니다.

초고용량 이미지 파일 삭제 후 vdi파일 용량 확인

보시면 아시다시피 파일 삭제 전과 삭제 후 파일 크기가 변화가 없음을 알 수 있습니다. 이것으로 게스트 컴퓨터에서의 삭제 작업은 vdi 파일에 영향을 끼치지 ㅇ낳은 ㅍ것을 혹인할 수 있습니다.

vdi 파일 축소 작업

가상 머신 저장소에 우분투 순정 ISO 파일 등록

위 주소에서 우분투의 순정 ISO 파일을 다운받습니다. 이 순정 ISO 파일은 라이브 부팅 기능과 우분투 설치 기능을 동시에 가지고 있습니다.

가상머신의 설정에 들어가 저장소 항목에서 컨트롤러:IDE 부분에서 광디스크 추가 아이콘을 누릅니다.

그러면 위 그림처럼 질문창이 뜹니다. 디스크 선택하기 버튼을 눌러줍니다.

추가 버튼을 눌러 위 그림처럼 우분투 순정 ISO파일을 등록 해줍니다. (예 : ubuntu 18.04.3-desktop-amd64.iso) 파일이 등록되면 해당 ISO 파일을 마우스로 클릭하고 선택 버튼을 눌러줍니다.

우분투 ISO 파일이 가상 머신 저장장치에 연결되면 위 그림처럼 표시됩니다. 확인 버튼을 눌러 설정 내용을 저장해줍니다.

우분투 라이브 부팅

가상머신을 실행하여 우분투를 실행해줍니다. 실행하면 Try Ubuntu와 Install Ubuntu가 메뉴로 있는데 Try Ubuntu를 선택해 라이브 부팅해줍니다.

라이브 부팅하면 위 그림처럼 바탕화면에 Install Ubuntu 아이콘이 나타납니다. 우리는 우분투를 설치하는 것이 아니므로 내버려둡니다.

zerofree 패키지 설치

이제 zerofree 패키지를 설치해줍니다. zerofree는 리눅스 파일시스템의 할당되지 않은 빈 공간을 0값으로 채워주는 프로그램입니다.

study@study-VirtualBox:~$ sudo apt install zerofree
[sudo] study의 암호:
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다      
상태 정보를 읽는 중입니다... 완료
다음 새 패키지를 설치할 것입니다:
  zerofree
0개 업그레이드, 1개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
8,112 바이트 아카이브를 받아야 합니다.
이 작업 후 25.6 k바이트의 디스크 공간을 더 사용하게 됩니다.
받기:1 http://kr.archive.ubuntu.com/ubuntu bionic/main amd64 zerofree amd64 1.0.4-1 [8,112 B]
내려받기 8,112 바이트, 소요시간 0초 (31.6 k바이트/초)
Selecting previously unselected package zerofree.
(데이터베이스 읽는중 ...현재 167635개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../zerofree_1.0.4-1_amd64.deb ...
Unpacking zerofree (1.0.4-1) ...
zerofree (1.0.4-1) 설정하는 중입니다 ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
study@study-VirtualBox:~$

기존 주 파티션 마운트

ubuntu@ubuntu:~$ sudo mkdir /mnt/tmp
ubuntu@ubuntu:~$ sudo mount -o ro /dev/sda2 /mnt/tmp

이제 라이브 부팅 전에 사용하던 리눅스 주 파티션을 마운트해주어야합니다.

sudo mkdir /mnt/tmp

가장 먼저 위 명령을 실행하여 리눅스 마운트 디렉토리에 임시 디렉토리를 생성해줍니다.

sudo mount -o ro /dev/sda2 /mnt/tmp

그 다음 위 명령을 실행하여 임시로 생성한 마운트 디렉토리에 실제 사용 주 파티션을 마운트해줍니다. 이때 옵션 내용은 가래 상자를 참고하시기 바랍니다.

-o ro : read only 즉 읽기 전용으로 마운트한다는 뜻입니다.

읽고 쓰기 모두 가능하게 하려면 -o rw로 설정해주시면 됩니다.

/dev/sda2 : 이 부분은 리눅스 주 파티션 설정입니다.

일반적으로 하드가 2테라 이하면 /dev/sda1이고, 2테라를 초과하는 대용량 디스크라면 /dev/sda2가 주 파티션입니다.


마운트가 제대로 되었는지 확인해봅시다. 우분투의 파일 관리자 프로그램인 노틸러스를 열어 /mnt/tmp를 열어봅니다. 제대로 마운트되었다면 위 그림처럼 기존 리눅스 시스템 내용이 보일 겁니다.

zerofree 실행

ubuntu@ubuntu:~$ sudo zerofree -v /dev/sda2

위 명령을 실행해줍니다. -v 옵션을 사용하면 진행률을 퍼센트로 보여줍니다.

작업 완료 후 우분투를 종료하여 가상머신을 꺼줍니다.

언마운트 방법

umount /mnt/tmp
rm -rf /mnt/tmp

vdi 파일 축소 작업

vdi 파일 크기를 축소하는 실제 작업이자 마무리 작업입니다.

윈도 cmd창을 관리자 권한으로 실행하여 버추얼박스 폴더로 이동해 크기 축소 명령을 실행해줍니다.

C:\WINDOWS\system32>cd C:\Program Files\Oracle\VirtualBox
C:\Program Files\Oracle\VirtualBox>VBoxManage modifyhd -compact "크기를 축소할 vdi 파일 경로"

버추얼박스 설치 폴더는 보통 C:\Program Files\Oracle\VirtualBox입니다.

vdi 파일 크기 춗5ㅗ 명령어는 VBoxManage modifyhd -compact "파일 경로"입니다.

Microsoft Windows [Version 10.0.18362.295]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\admin>cd C:\Program Files\Oracle\VirtualBox

C:\Program Files\Oracle\VirtualBox>VBoxManage modifyhd -compact "F:\VirtualBox\VirtualBox VMs\wnw1005/LCVD/LCVD.vdi"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

C:\Program Files\Oracle\VirtualBox>

위는 실행 예시입니다.

cmd창을 관리자 권한으로 실행하지 않은 채 축소 명령을 실행하면 오류가 발생힙니다. 그러니 cmd창은 꼭 관리자 권한으로 실행해줍시다.

위 예시에선 여러분들의 보다 빠르고 편한 명령 실행을 위해  modifyhd를 적었습니다만 이것이 기본 명령어는 아닙니다.

Note

For compatibility with earlier versions of Oracle VM VirtualBox, the modifyvdi and modifyhd commands are also supported and mapped internally to the modifymedium command.

위 영문 안내는 아래 링크에서 발췌한 내용입니다.

해석하자면 다음과 같습니다.

알림

이전 버전의 Oracle VM VirtualBox와의 호환성을 위해 modifyvdi 및 modifyhd 명령도 지원되며 내부적으로 modifymedium 명령에 매핑됩니다.

즉 제가 예시에는 VBoxManage modifyhd 명령을 사용했지만 현재 버추얼박스의 해당 기능 기본 명령값은 VBoxManage modifymedium이고 이전 버전과의 호환성을 위해 modifyvdi 및 modifyhd 명령을 사용하면 자동으로 modifymedium으로 연결되도록 설정해두었다는 내용입니다.


--compact 옵션에 대한 자세한 설명 역시  위의 동일한 링크에서 확인할 수 있습니다.

해당 부분의 원문은 다음과 같습니다.

The --compact option can be used to compact disk images. Compacting removes blocks that only contains zeroes. Using this option will shrink a dynamically allocated image. It will reduce the physical size of the image without affecting the logical size of the virtual disk. Compaction works both for base images and for differencing images created as part of a snapshot.

For this operation to be effective, it is required that free space in the guest system first be zeroed out using a suitable software tool. For Windows guests, you can use the sdelete tool provided by Microsoft. Run sdelete -z in the guest to zero the free disk space, before compressing the virtual disk image. For Linux, use the zerofree utility which supports ext2/ext3 filesystems. For Mac OS X guests, use the diskutil secureErase freespace 0 / command from an elevated Terminal.

Please note that compacting is currently only available for VDI images. A similar effect can be achieved by zeroing out free blocks and then cloning the disk to any other dynamically allocated format. You can use this workaround until compacting is also supported for disk formats other than VDI.

해석 내용은 다음과 같습니다.

--compact 옵션은 디스크 이미지를 압축하는 데 사용할 수 있습니다. 압축은 0 값만 포함된 블록을 제거합니다. 이 옵션을 사용하면 동적으로 할당 된 이미지가 축소됩니다. 가상 디스크의 논리적 크기에 영향을 주지 않고 이미지의 물리적 크기를 줄입니다. 압축은 기본 이미지와 스냅샷의 일부로 생성된 차이 이미지 모두에 작동합니다.

이 작업을 효율적으로 수행하려면 먼저 적절한 소프트웨어 도구를 사용하여 게스트 시스템의 여유 공간을 제로화해야합니다. Windows 게스트의 경우 Microsoft에서 제공하는 sdelete 도구를 사용할 수 있습니다. 가상 디스크 이미지를 압축하기 전에 게스트에서 sdelete -z를 실행하여 사용 가능한 디스크 공간을 0으로 설정하십시오. Linux의 경우 ext2 / ext3 파일 시스템을 지원하는 zerofree 유틸리티를 사용하십시오. Mac OS X 게스트의 경우 관리자 권한 터미널에서 diskutil secureErase 여유 공간 0 / 명령을 사용하십시오.

압축은 현재 VDI 이미지에만 사용할 수 있습니다. 사용 가능한 블록을 제로화 한 다음 디스크를 동적으로 할당 된 다른 형식으로 복제하여 비슷한 효과를 얻을 수 있습니다. VDI 이외의 디스크 형식에 대해서도 압축이 지원 될 때까지이 대안을 사용할 수 있습니다

위 내용을 보면 --compact 옵션은 VDI 이미지에만사용할 수 있습니다. 만약 VHD나 VMDK 등 다른 형식의 이미지라면 vdi 형식으로 변환해야 합니다.

vdi 파일 크기 확인

크키 축소 실행 후 해당 파일의 속성을 보면 위 그림처럼 크기가 줄어든 것을 볼 수 있습니다.




호스트 OS가 리눅스고 게스트 OS가 윈도인 경우

앞에서는 호스트 OS가 윈도고 게스트 OS가 리눅스(우분투)인 경우 vdi 파일 크기 축소에 대해 알아보았다면 이번에는 그 반대로 호스트 OS가 리눅스이고 게스트 OS가 윈도인 경우 vdi 파일 크기 축소 방법에 대해 알려드리고자 합니다.

이번에는 그림은 첨부하지 않았습니다. 최대한 자세히 설명해드리도록 하겠습니다.

절차를 요약하면 다음과 같습니다.

Guest

불필요한 파일 삭제

휴지통 비우기

시스템 정리

PC 최적화

디스크 조각모음

빈 공간 값 초기화

Host

vdi 파일 크기 축소

Guest

불필요한 파일 삭제

가장 먼저 불필요한 파일을 수동으로 삭제해줍니다. 이때 중요한 것은 절대 Shift+Delete 키를 눌러 바로 '완전히 삭제'하지는 마시라는 점입니다. 만약 그렇다면 지워서는 안되는 파일인데 그렇게 해서 삭제해버리면 복구할 방법이 없어집니다.

조금 번거롭더라도 그냥 Delete 키만 눌러 해당 폴더하 파일을 휴지통으로 옮기시기 바랍니다. 그래야 혹여 실수로 지우더라도 쉽게 복구할 수 있습니다.

휴지통 비우기

이제 휴지통에 옮겨진 내용을 확인하여 문제가 없다면 휴지통 비우기를 실행해줍니다.

디스크 정리

디스크 정리

윈도 탐색기에서 C: 드라이브에 마우스를 올려두고 마우스 오른쪽 버튼을 눌러 메뉴를 띄웁니다. 여러 메뉴들 중 맨 하단 속성을 선택하면 용량 항목에 디스크 정리 버튼이 있습니다. 이 버튼을 누르면 디스크 정리 창이 뜨는데 이 창에서 좌측 하단의 시스템 파일 정리 버튼을 눌러줍니다.

Windows 업그레이드 로그 파일
다운로드한 프로그램 파일
임시 인터넷 파일
오프라인 웹페이지
Windows 오류 보고서 및 피드백 진단
DirectX 셰이더 캐시
배달 최적화 파일
장치 드라이버 패키지
다운로드
언어 리소스 파일
휴지통
임시 파일
미리 보기 사진

위의 내용들을 정리할 수 있는데 정리할 항목을 선택하고 확인 버튼을 눌러줍니다. 그러면 이 파일을 완전히 삭제하시겠습니까? 하는 창이 뜹니다. 파일 삭제 버튼을 눌러 실행해줍니다.

기타 옵션

위 절차를 반복하여 시스템 파일 정리 버튼을 눌러 디스크 정리창을 띄우면 디스크 정리 탭 오른쪽에 기타 옵션 탭이 있습니다. 기타 옵션 탭을 누르면  프로그램 및 기능과 시스템 복원 및 섀도 복사본 항목이 있습니다.

프로그램 및 기능 항목은 윈도 시스템에 설치된 각종 프로그램을 제거할 수 있습니다. 불필요한 프로그램들을 제거해줍니다.

시스템 복원 및 섀도 복사본 항목의 정리 버튼을 누르면 가장 최근의 복원 지점을 제외하고 나머지 복원 지점은 모두 삭제할 수 있습니다.

PC 최적화

안티바이러스 프로그램들에는 PC최적화 기능이 탑재되어 있습니다. 예를 들어 V3 Lite의 경우 PC관리 항목 아래 PC 최적화가 있습니다. 이 기능을 이용하면 아래와 같은 내용들을 정리할 수 있습니다.

레지스트리 정리

시스템
휴지통 비우기
시스템 임시 파일
클립보드
메모리 덤프
디스크 검사 조각
Windows 로그 파일

Windows 탐색기
최근 문서
시작 메뉴의 실행
파일 검색
컴퓨터 검색
작업표시줄 점프 목록

웹브라우저별 사용 정보

일부 프로그램들의 사용 정보

디스크 조각 모음

디스크 조각 모음은 폴더나 파일 등을 삭제하여 빈 공간을 확보하는 기능이 아닙니다. 컴퓨터를 사용하다보면 쓰고 지우기를 반복하게 되면서 각 파일 정보가 파편화되어 성능이 저하되는데 해당 정보들을 모아줌으로써 컴퓨터의 성능을 향상시키는 작업입니다.

C: 드라이브의 속성 창을 띄워 도구 탭에 들어가면 하단에 드라이브 최적화 및 조각 모음 기능이 있습니다. 최적화 버튼을 누른다음 상태 항목에서 C: 드라이브를 선택한 다음 최적화 버튼을 눌러 실행해줍니다.

이 최적화 작업은 시간이 오래 걸리므로 느긋하게 기다려줍니다.

빈 공간 값 초기화

SDelete v2.02 프로그램을 다운받아 압축을 풀어 줍니다.

cmd창을 관리자 권한으로 열어 SDelete 프로그램이 존재한 폴더로 이동해 아래와 같이 명령을 실행해줍니다.

sdelete.exe -z -r c:

인터넷상에서 위 명령 옵션에 대하여 의견이 분분하더군요. 이럴 땐 제작사의 설명을 참고하는 것이 답입니다. 위 다운로드 링크에 프로그램의 사용법도 같이 있습니다.

SDelete 프로그램의 옵션 설명은 다음과 같습니다.

-a              읽기 전용 속성을 제거
-c              여유 공간을 청소
-p              pass 겹쳐 쓰기 수를 지정 (기본값은 1).
-q              오류를 알리지 않음 (Quiet).
-s 또는 -r    하위 디렉토리에도 반복
-z              Zero free space (가상 디스크 최적화에 적합)

우리는 버추얼박스의 가상 머신 파일 크기를 축소(압축)하려는 것이므로 -z를 써야 하고 하위 디렉토리에도 적용해야 하므로 -r을 적용하는 것입니다.

Host

vdi 파일 크기 축소

이제 버추얼박스가 설치된 디렉토리로 이동해 아래와 같이 명령해줍니다.

# VBoxManage modifymedium --compact vdi 파일 경로

관리자 권한으로 위 명령을 실행해줍니다.

이것으로 모든 작업이 완료되었습니다.