본문 바로가기
운영체제 (LNX,WIN)

WSL Ubuntu ext4.vhdx 디스크 용량 최적화 (fstrim + optimize-vhd)

by 날으는물고기 2026. 4. 8.

WSL Ubuntu ext4.vhdx 디스크 용량 최적화 (fstrim + optimize-vhd)

728x90

Ubuntu LTS 버전 체계

✔ 현재 기준

  • Ubuntu 24.04 LTS
  • 최신 포인트 릴리즈: 24.04.4

✔ 핵심 개념

24.04 = 기준 버전 (변하지 않음)
24.04.x = 누적 패치 상태

👉 실무 기준

항상 최신 point release 상태 유지 (24.04.4 수준)

WSL 설치 방식

✔ 설치 명령

wsl --install -d Ubuntu-24.04

✔ 특징

ISO 설치 ❌
rootfs 기반 설치 ⭕

👉 결과

  • 특정 버전 (24.04.4) 지정 설치 ❌
  • 설치 후 업데이트 = 최신 상태

기존 설치 상태에서 재설치 여부

현재

Ubuntu-22.04
Ubuntu-24.04

✔ 동작

wsl --install -d Ubuntu-24.04

👉 결과

이미 존재 → 재설치 안됨

✔ 최신화 방법

sudo apt update
sudo apt full-upgrade -y

✔ 완전 재설치

wsl --unregister Ubuntu-24.04
wsl --install -d Ubuntu-24.04

WSL 파일 시스템 구조

✔ 구조

Windows (NTFS)
 └ ext4.vhdx (가상 디스크)
     └ Linux ext4 파일 시스템

👉 WSL은 VHD 기반으로 Linux FS 저장 (Microsoft Learn)

ext4.vhdx 위치 (구조 변화 포함)

✔ 기존 구조 (Legacy)

AppData\Local\Packages\<배포판>\LocalState\ext4.vhdx

✔ 최신 구조

C:\Users\<user>\AppData\Local\wsl\{GUID}\ext4.vhdx

👉 최신 WSL(Store 기반)에서는 GUID 구조 사용

✔ 내부 구조

{GUID}
 ├ ext4.vhdx
 ├ config
 └ metadata

ext 경로 확인 방법

전체 검색

Get-ChildItem "$env:LOCALAPPDATA" -Recurse -Filter ext4.vhdx

특정 distro 경로 찾기 (공식 방식)

(Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss |
Where-Object { $_.GetValue("DistributionName") -eq 'Ubuntu-24.04' }).GetValue("BasePath") + "\ext4.vhdx"

👉 Microsoft 공식 방법 (Microsoft Learn)

registry 전체 조회

reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss /s

registry 구조

HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}
 ├ DistributionName = Ubuntu-24.04
 ├ BasePath = C:\Users\...\AppData\Local\wsl\{GUID}

👉 BasePath가 실제 디스크 위치 (Windows OS Hub)

자동 매핑 스크립트

$lxss = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss"
Get-ChildItem $lxss | ForEach-Object {
    $p = Get-ItemProperty $_.PSPath
    [PSCustomObject]@{
        Name = $p.DistributionName
        Path = $p.BasePath
        VHDX = "$($p.BasePath)\ext4.vhdx"
    }
}

WSL 용량 증가 문제

✔ 원리

파일 삭제 → ext 내부 free 상태
→ VHDX 파일 크기 유지

👉 WSL VHD는 동적 확장되지만 자동 축소 안됨 (위키독스)

✔ 핵심 문제

논리 삭제 ≠ 물리 용량 감소

용량 최적화 (완전 절차)

1단계: Linux 내부 정리

sudo apt autoremove -y
sudo apt clean
sudo journalctl --vacuum-time=7d
docker system prune -a -f
docker volume prune -f

2단계: TRIM

sudo fstrim -av

3단계: 종료

wsl --shutdown

4단계: 압축

✔ diskpart

diskpart
select vdisk file="...\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

✔ optimize-vhd (권장)

optimize-vhd -Path "<경로>" -Mode full

✔ 결과

100GB → 30~40GB 감소 가능

diskpart 동작 원리

✔ 역할

빈 블록 제거 → VHDX 축소

⚠️ 조건

fstrim 수행 필수

추가 기능 (잘 안 알려진 부분)

✔ Sparse 모드 (실험적)

wsl --manage Ubuntu --set-sparse true

👉 자동 공간 회수 (주의 필요)

WSL 디스크 관리 명령들

✔ 용량 확인

df -h /

✔ Windows에서 확인

Get-ChildItem ext4.vhdx | Select Length

✔ 백업

wsl --export Ubuntu-24.04 backup.tar

✔ 복구

wsl --import Ubuntu-new C:\WSL backup.tar

보안 관점

✔ 1. 데이터 유출

ext4.vhdx = 전체 Linux 데이터

✔ 2. EDR 사각지대

  • VHD 내부 분석 어려움

✔ 3. 권한 우회

Windows → root 파일 접근 가능

✔ 4. 랜섬웨어 영향

ext4.vhdx 하나로 전체 암호화

✔ 5. 삭제 데이터 잔존

  • forensic 복구 가능

보안 운영 정책

✔ 필수 정책

- WSL 사용 승인 기반
- ext4.vhdx 크기 모니터링
- 정기 compact
- Docker 사용 제한

✔ 점검 스크립트

Get-ChildItem "$env:LOCALAPPDATA" -Recurse -Filter ext4.vhdx |
Select FullName, Length, LastWriteTime

실무 운영 Best Practice

✔ 설치

wsl --install -d Ubuntu-24.04

✔ 초기화

sudo apt update && sudo apt full-upgrade -y

✔ 주기 작업

sudo fstrim -av
optimize-vhd

✔ 모니터링

  • ext4.vhdx 크기
  • Docker
  • 로그

최종 핵심 요약

WSL = ext4.vhdx 기반 가상 디스크 구조
→ 삭제해도 용량 안 줄어듦
→ fstrim + compact 필요

경로 확인 핵심:
reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss

버전 관리:
설치가 아니라 업데이트가 핵심
300x250

👉 가능하면 optimize-vhd가 더 좋습니다
👉 하지만 기본 Windows 환경에서는 명령어가 없는 게 정상입니다

왜 optimize-vhd가 더 좋은가

✔ 비교

항목 diskpart optimize-vhd
제공 방식 기본 포함 Hyper-V 모듈
압축 효율 보통 더 높음
처리 방식 단순 compact 고급 최적화
안정성 일반 더 안정적

✔ 차이 핵심

diskpart → 단순 빈 공간 제거
optimize-vhd → 블록 재정렬 + 고급 압축

👉 실제 체감

  • diskpart: 100GB → 60GB
  • optimize-vhd: 100GB → 30~40GB

optimize-vhd 명령어가 없는 이유

👉 기본 Windows에는 없음

✔ 조건

Hyper-V 기능이 있어야 사용 가능

optimize-vhd 사용 방법

1단계: Hyper-V 기능 활성화

PowerShell (관리자)

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

또는

dism.exe /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V

👉 재부팅 필요

2단계: 모듈 확인

Get-Command optimize-vhd

👉 나오면 OK

3단계: 실행

wsl --shutdown
optimize-vhd -Path "C:\Users\<계정>\AppData\Local\wsl\{GUID}\ext4.vhdx" -Mode full

Hyper-V 못 쓰는 환경이면?

✔ 대안

👉 그대로 diskpart 사용

diskpart
select vdisk file="...\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk

성능 차이 현실적으로 얼마나 큰가

✔ 실제 체감 기준

상황 추천
일반 개발자 PC diskpart 충분
Docker 많이 사용 optimize-vhd 추천
100GB 이상 optimize-vhd 필수
반복 관리 optimize-vhd

보안 관점 차이

✔ 둘 다 동일

  • 데이터 완전 삭제 ❌
  • forensic 복구 가능성 있음

👉 민감 데이터

shred -u file

가장 현실적인 선택

✔ Hyper-V 가능

optimize-vhd 사용 (권장)

✔ Hyper-V 불가

diskpart + fstrim 조합

반드시 같이 해야 하는 것

👉 둘 다 동일

sudo fstrim -av

👉 안 하면

압축 거의 안됨

👉 optimize-vhd가 더 강력하지만 Hyper-V 필요
👉 없으면 diskpart + fstrim이면 충분히 해결 가능

728x90
그리드형(광고전용)

댓글