가상 하드 디스크 파일(VHD)의 종류에는 크게 3가지 종류가 있다.
고정 크기, 동적 확장, 부모-자식디스크가 그 3가지이다.
이 중 '동적 확장'은 내부에 파일을 저장함에 따라 VHD의 크기가 증가하기 때문에 널리 쓰이는데, 파일의 크기가 늘어난 뒤 내부의 파일을 제거하여도 가상 디스크의 크기가 자동으로 다시 감소하지는 않는다.
이 때문에, Windows의 DISKPART에는 이러한 파일의 크기를 축소하는 방법을 제공한다. COMPACT 명령이 바로 그것이다.
명령 프롬프트에서 DISKPART를 실행한 뒤, 해당 명령의 도움말을 보면 "파일의 물리적 크기를 줄입니다."라고 나와 있다.
이 형편없는 도움말 때문에 이 명령의 역할을 바로 파악하기는 어려운데, Microsoft 기술 문서에는 훨씬 자세한 설명이 기술되어 있다.
compact vdisk | Microsoft Learn
명령 실행
COMPACT 작업을 수행하기 전의 가상 디스크 크기는 아래와 같다.
아래의 예문을 참고하여 DISKPART에 명령을 입력한다.
select vdisk file="드라이브 경로"
compact vdisk
결과는 아래와 같다.
매우 훌륭하게 디스크 공간이 감소하였다.
디스크 용량이 줄어들지 않았어요
그러나 해당 도구를 사용한 사용자라면 COMPACT 명령을 실행하였음에도 불구하고, 디스크의 공간이 줄어들지 않은 경우를 확인할 수 있다.
해당 이유는 이 글에 자세히 기술되어 있다.
간단히 요약하자면, COMPACT 명령은 디스크에서 0으로 기록된 공간을 제거하는 작업이다.
그런데, 알다시피 Windows를 비롯한 운영체제에서는 파일 삭제 명령을 내려도 해당 파일의 데이터를 삭제하지 않고, 파일의 주소만 날린다.
해당 파일이 존재하던 자리를 0으로 채우는 것은 곧 그 파일의 크기만큼의 데이터를 기록하는 행위이므로, 데이터 삭제에 걸리는 시간이 길어지게 된다. 이 때문에 운영체제는 삭제할 파일의 주소만 날리고 파일이 없어진 셈 친다.
Windows의 "빠른 포맷"도 같은 원리이다. 기존의 데이터는 남겨두고, 파일 시스템만 재구성한다.
이 때문에 복구 프로그램을 통해 이렇게 삭제한 파일을 복원할 수 있다.
그런데 문제는, COMPACT 명령은 디스크에 0으로 기록된 공간을 제거하는 명령이라는 것이다. 데이터를 남겨둔다는 것은 그 자리가 0으로 기록되어있지 않다는 것을 의미한다. 이 때문에 COMPACT 명령을 실행하여도 가상 디스크 파일의 용량이 줄어들지 않는다.
물론, 해당 빈 공간을 모두 0으로 기록해 주면 문제는 해결된다. 이를 위해, 제로필 프로그램이 이용된다.
안타깝게도, Windows의 포맷 시스템은 동적 할당 방식으로 구성된 가상 하드 디스크에 일반 제로필 포맷을 지원하지 않는다.
그러나 외부 프로그램, 그중에서도 제로필 소거 프로그램은 이러한 영향을 받지 않는다.
영향을 받을 수도 없는 것이, 이러한 프로그램은 그냥 빈 섹터에 0을 쓰는 작업만을 수행하므로, 운영체제 입장에서는 그냥 모든 데이터가 0인 파일을 쓰는 것과도 같다.
이러한 작업을 수행하기 위해 사용되는 프로그램은 Microsoft에서 개발한 SDelete라는 프로그램이다. Microsoft의 설명에 따르면, 해당 프로그램을 이용하여 디스크의 할당되지 않은 부분에 있는 파일 데이터를 안전하게 지울 수 있다고 한다.
SDELETE의 명령줄 옵션은 아래와 같다.
-c 여유 공간을 정리하세요.
-f 문자만 포함된 인수를 디스크가 아닌 파일/디렉터리로 처리합니다. 인수에 다른 문자(예: 경로 구분 기호 또는 파일 확장자)가 포함된 경우에는 필요하지 않습니다.
-p 덮어쓰기 패스 수를 지정합니다(기본값은 1).
-q 자동 모드입니다.
-r 읽기 전용 속성을 제거합니다.
-s 재귀 하위 디렉토리.
-z 여유 공간이 없습니다(가상 디스크 최적화에 적합).
-nobanner 시작 배너 및 저작권 메시지를 표시하지 않습니다.
이를 이용한 예제는 아래와 같다.
sdelete -c <드라이브 문자>
sdelete -z <드라이브 문자>
명령줄 옵션에서 말하듯 가상 디스크 최적화에 적합한 옵션 스위치는 -z 옵션이다.
-c 옵션을 이용하면, 이어지는 COMPACT 명령 수행 과정에서 디스크 공간이 전혀 줄어들지 않을 수 있다.
필자의 경우, -c 옵션을 적용한 경우에는 COMPACT 명령을 통한 디스크 파일 크기 축소가 이루어지지 않은 반면, -z 옵션을 적용한 경우 COMPACT 명령을 통한 디스크 파일 크기 축소가 정상적으로 이루어졌다.
COMPACT 명령까지 마친 이후의 작업 결과는 아래와 같다.
매우 훌륭한 결과를 얻을 수 있다.
주의할 점은, 상술하였듯 가상 디스크 최적화에 적합한 옵션 스위치는 -z 옵션이다.
-c 옵션을 이용하면, 이어지는 COMPACT 명령 수행 과정에서 디스크 공간이 전혀 줄어들지 않을 수 있다.
필자의 경우, -c 옵션을 적용한 경우에는 COMPACT 명령을 통한 디스크 파일 크기 축소가 이루어지지 않은 반면, -z 옵션을 적용한 경우 COMPACT 명령을 통한 디스크 파일 크기 축소가 정상적으로 이루어졌다.
추측건대, -c 옵션은 물리적으로 저장되는 드라이브에 사용되는 옵션이므로, 해당 데이터를 복원하여 읽지 못하도록 하는 추가적인 작업이 이루어져, 결과적으로 쓰기 작업을 한 '빈 공간'이 0으로 기록되어 있지 않지만, -z 옵션은 가상 디스크 최적화에 적합한 옵션이므로, 굳이 데이터를 복원하여 읽지 못하도록 하는 작업이 이루어지지는 않은 것으로 보인다. 가상 디스크 자체가 논리적으로 구성된 거대한 파일이므로, 물리적으로 존재하는 드라이브처럼 0을 쓴다고 해서 흔적을 토대로 복원해 낼 수 있는 것은 아니기 때문이다. 필요하다면 작업을 수행한 가상 디스크 파일을 다른 저장 매체로 복사하고, 기존의 가상 디스크 파일이 저장되어 있던 드라이브를 따로 조치하면 그만이다.
참고 자료
'컴퓨터 > Windows' 카테고리의 다른 글
Wget for Windows (5) | 2024.11.01 |
---|---|
expand-vdisk를 이용하여 가상 디스크 파일의 최대 용량 늘리기 (0) | 2024.09.01 |
Winget에서 특정 버전의 패키지를 설치하기 (0) | 2024.08.01 |
Windows에서 OpenSSH를 이용하여 SSH 키 쌍 생성하기 (0) | 2024.07.01 |
DISKPART를 이용한 가상 하드 디스크 연결 및 연결 해제 (0) | 2024.05.01 |
댓글