WSL 디스크 공간을 관리하는 방법

이 가이드에서는 다음을 포함하여 WSL 2를 사용하여 설치된 Linux 배포판에서 사용하는 디스크 공간을 관리하는 방법에 대해서 설명합니다.

WSL 2(Linux용 Windows 하위 시스템)는 가상화 플랫폼을 사용하여 호스트 Windows 운영 체제와 함께 Linux 배포판을 설치하고, 설치하는 각 Linux 배포판의 파일을 저장하는 VHD(가상 하드 디스크)를 만듭니다. 이러한 VHD는 ext4 파일 시스템 형식을 사용하며 Windows 하드 드라이브에 ext4.vhdx 파일로 표시됩니다.

WSL 2는 스토리지 요구 사항에 맞게 VHD 파일의 크기를 자동으로 조정합니다. WSL 2에서 사용하는 각 VHD 파일에는 최대 디스크 공간이 기본 1TB로 할당됩니다(WSL 릴리스 0.58.0 이전에는 기본값이 최대 512GB, 그 이전에는 최대 256GB로 설정됨).

Linux 파일에 필요한 스토리지 공간이 최대 크기를 초과하면 디스크 공간이 부족하다는 오류가 표시됩니다. 이 오류를 해결하려면 WSL 2 가상 하드 디스크의 크기를 확장하는 방법에 대한 아래의 지침을 따르십시오.

사용 가능한 디스크 공간을 확인하는 방법

Linux Df 명령을 사용하여 WSL 2와 함께 설치된 Linux 배포판에 대해 VHD에서 사용할 수 있는 디스크 공간의 양을 확인합니다.

사용 가능한 디스크 공간을 확인하려면 PowerShell 명령줄을 열고 이 명령을 입력합니다(<distribution-name>을 실제 배포 이름으로 변경).

wsl.exe --system -d <distribution-name> df -h /mnt/wslg/distro

이 명령이 작동하지 않는 경우 wsl --update 명령을 사용하여 WSL의 Microsoft Store 버전으로 업그레이드하거나 wsl df -h /를 시도하세요.

출력에는 다음 사항이 포함됩니다.

  • 파일 시스템: VHD 파일 시스템의 식별자
  • 크기: 디스크의 총 크기(VHD에 할당된 최대 공간의 양)
  • 사용: 현재 VHD에서 사용 중인 공간의 양
  • 사용 가능: VHD에 남아 있는 공간의 양(할당된 크기에서 사용된 양을 뺀 값)
  • 사용 %: 남은 디스크 공간의 백분율(사용/할당된 크기)
  • 탑재: 디스크가 탑재된 디렉터리 경로

VHD에 할당된 사용 가능한 디스크 공간 양에 가까워지거나 디스크 공간이 남아 있지 않아 이미 오류가 발생한 경우, Linux 배포와 연결된 VHD에 할당된 최대 디스크 공간 크기를 확장하는 방법에 대한 단계는 다음 섹션을 참조하십시오. WSL에서 VHD에 할당된 디스크 공간의 양은 실제 Windows 디바이스의 디스크 공간 크기가 그보다 작더라도 항상 기본 최대 크기(WSL의 최신 버전에서는 1TB)를 표시합니다. WSL은 사용할 때 크기가 확장되는 VHD를 탑재하므로 Linux 배포판에서는 할당된 최대 크기인 1TB로 증가할 수 있습니다. 

WSL 2 가상 하드 디스크의 크기를 확장하는 방법

Linux 배포판에 대한 VHD 크기를 기본 1TB의 최대 할당 디스크 공간보다 확장하려면 아래 단계를 수행합니다. (아직 업데이트되지 않은 이전 WSL 릴리스의 경우, 최대 기본값은 512GB 또는 256GB로 설정될 수 있습니다.)

  1. wsl.exe --shutdown 명령을 사용하여 모든 WSL 인스턴스를 종료합니다.

  2. 디렉터리 경로를 컴퓨터에 설치된 Linux 배포판과 연관된 ext4.vhdx 파일로 복사합니다. 도움말은 Linux 배포판에 대한 vhdx 파일 및 디스크 경로를 찾는 방법을 참조하십시오.

  3. 관리자 권한으로 Windows 명령 프롬프트를 열고 다음을 입력하여 diskpart 명령 인터프리터를 엽니다.

    diskpart
    
  4. 이제 DISKPART> 프롬프트가 표시됩니다. 다음 명령을 입력하고 <pathToVHD>을 Linux 배포판과 연관된 ext4.vhdx 파일의 디렉터리 경로(2단계에서 복사된 경로)로 변경합니다.

    Select vdisk file="<pathToVHD>"
    
  5. VHD가 할당된 현재 최대 크기를 나타내는 가상 크기를 포함하여 가상 디스크와 연관되는 세부 정보를 표시합니다.

    detail vdisk
    
  6. 가상 크기를 메가바이트로 변환해야 합니다. 예를 들어 가상 크기: 512GB인 경우 512000MB와 같습니다. 입력한 새 값은 이 원래 값보다 커야 합니다. 가상 크기를 512GB에서 1024GB로 두 배로 늘리려면 1024000으로 값을 MB로 입력합니다. 가상 디스크 크기를 줄이는 프로세스가 훨씬 더 복잡하기 때문에 실제로 원하는 것보다 높은 값을 입력하지 않도록 주의하십시오.

  7. Windows 명령 프롬프트 DISKPART> 프롬프트를 사용하여 이 Linux 배포판에 할당하려는 새 최대 크기 값을 입력하십시오.

    expand vdisk maximum=<sizeInMegaBytes>
    
  8. DISKPART> 프롬프트를 종료합니다.

    exit
    
  9. 이 Linux 배포판을 시작합니다. (WSL 2에서 실행 중인지 확인합니다. wsl.exe -l -v 명령을 사용하여 확인할 수 있습니다. WSL 1은 지원되지 않습니다.)

  10. WSL 배포 명령줄에서 다음 명령을 실행하여 WSL에서 파일 시스템의 크기를 확장할 수 있음을 알려줍니다. 첫 번째 mount 명령에 대한 응답으로 "/dev: none already mounted on /dev"와 같은 메시지가 표시될 수 있습니다. 이 메시지는 무시해도 됩니다.

    sudo mount -t devtmpfs none /dev
    mount | grep ext4
    
  11. 이 항목의 이름(예: /dev/sdX)을 복사합니다(여기서 X는 다른 문자를 나타냄). 다음 예에서 X의 값은 b입니다.

   sudo resize2fs /dev/sdb <sizeInMegabytes>M

위의 예를 사용하여 VHD 크기를 2048000으로 변경했기 때문에 명령은 sudo resize2fs /dev/sdb 2048000M입니다.

참고 항목

resize2fs를 설치해야 할 수도 있습니다. 이 경우 sudo apt install resize2fs 명령을 사용하여 설치할 수 있습니다.

출력은 다음과 비슷합니다.

resize2fs 1.44.1 (24-Mar-2021)
Filesystem at /dev/sdb is mounted on /; on-line resizing required
old_desc_blocks = 32, new_desc_blocks = 38
The filesystem on /dev/sdb is now 78643200 (4k) blocks long.

Linux 배포판에 대한 가상 드라이브(ext4.vhdx)가 새 크기로 확장되었습니다.

Important

Windows 도구 또는 편집기를 사용하여 AppData 폴더 내에 있는 WSL 관련 파일을 수정, 이동하거나 액세스하지 않는 것이 좋습니다. 이렇게 하면 Linux 배포가 손상될 수 있습니다. Windows에서 \\wsl$\<distribution-name>\ 경로를 통해 Linux 파일에 액세스할 수 있습니다. WSL 배포를 열고 explorer.exe .를 입력하여 해당 폴더를 확인합니다. 자세히 알아보려면 블로그 게시물 Windows에서 Linux 파일 액세스를 참조하세요.

VHD 탑재 오류를 복구하는 방법

"배포 디스크 탑재"와 관련된 오류가 발생하는 경우, 이는 갑작스런 종료 또는 정전으로 인해 발생할 수 있으며 데이터 손실을 방지하기 위해 Linux 배포 VHD가 읽기 전용으로 전환될 수 있습니다. 아래 단계에 따라 e2fsck Linux 명령을 사용하여 배포를 복구하고 복원할 수 있습니다.

lsblk 명령을 사용하여 차단 디바이스 이름 식별하기

WSL 2에서 Linux 배포를 설치하면 배포판이 자체 파일 시스템으로 VHD(가상 하드 디스크)로 탑재됩니다. Linux에서 이러한 하드 드라이브를 "차단 디바이스"라고 하며, lsblk 명령을 사용하여 해당 드라이브에 대한 정보를 볼 수 있습니다.

현재 WSL 2에서 사용 중인 차단 디바이스의 이름을 찾으려면 배포를 열고 lsblk 명령을 입력합니다. (또는 PowerShell을 열고 wsl.exe lsblk 명령을 입력합니다.) 출력은 다음과 같이 표시됩니다.

NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda    8:0    0 363.1M  1 disk
sdb    8:16   0     8G  0 disk [SWAP]
sdc    8:32   0   1.5T  0 disk
sdd    8:48   0     1T  0 disk /mnt/wslg/distro

차단 디바이스에 대한 정보는 다음과 같습니다.

  • 이름: 디바이스에 할당된 이름은 sd[a-z]이며, 사용되는 각 디스크에 대한 문자 지정이 있는 SCSI 디스크를 참조합니다. sda은(는) 항상 시스템 배포입니다.
  • MAJ:MIN: 디바이스 유형을 나타내는 첫 번째 번호로 디바이스를 내부적으로 식별하기 위해서 Linux 커널에서 사용하는 숫자를 나타냅니다. (8은 소형 컴퓨터 시스템 인터페이스/SCSI 디스크에 사용됩니다.)
  • RM: 디바이스가 이동식인지 여부(이동식(1), 이동식 아님(0))를 알려줍니다.
  • 크기: 전체 크기입니다.
  • RO: 디바이스가 읽기 전용인지 여부(읽기 전용(1), 읽기 전용 아님(0))를 알려줍니다.
  • 유형: 디바이스 유형(이 경우에는 디스크)을 참조합니다.
  • 탑재 지점: 차단 디바이스가 있는 파일 시스템의 현재 디렉터리를 나타냅니다. (SWAP은 미리 구성된 비활성 메모리용이므로 탑재 지점이 없습니다.)

읽기 전용 대체 오류

Linux 배포를 열 때 WSL에 "탑재 오류"가 발생하면 배포가 대체(fallback)로 읽기 전용으로 설정될 수 있습니다. 이 경우 시작 중에 배포에 다음 오류가 표시될 수 있습니다.

An error occurred mounting the distribution disk, it was mounted read-only as a fallback.

배포가 읽기 전용으로 시작되면 파일 시스템에 쓰려고 하는 모든 시도가 실패하고 다음과 같은 오류가 발생합니다.

$ touch file
touch: cannot touch 'file': Read-only file system

WSL에서 디스크 탑재 오류를 복구하고 사용 가능/쓰기 가능한 상태로 다시 복원하려면 wsl.exe --mount 명령을 사용하여 다음 단계를 수행하여 디스크를 다시 탑재할 수 있습니다.

  1. PowerShell을 열고 명령을 입력하여 모든 WSL 배포를 종료합니다.

    wsl.exe --shutdown
    
  2. 관리자 권한(관리자 권한 명령 프롬프트)으로 PowerShell을 열고 탑재 명령을 입력하여 <path-to-ext4.vhdx>을(를) 배포판의 .vhdx 파일 경로로 바꿉니다. 이 파일을 찾는 방법에 대한 도움말은 Linux 배포에 대한 VHD 파일 및 디스크 경로를 찾는 방법을 참조하십시오.

    wsl.exe --mount <path-to-ext4.vhdx> --vhd --bare
    
  3. PowerShell의 wsl.exe lsblk 명령을 사용하여 배포에 대한 블록 디바이스 이름(sd[a-z])을 식별한 다음, 다음 명령을 입력하여 디스크를 복구합니다(<device>을(를) "sdc"와 같은 올바른 블록 디바이스 이름으로 대체). e2fsck 명령은 ext4 파일 시스템(WSL과 함께 설치된 배포에서 사용하는 형식)에서 오류를 확인하고 그에 따라 복구합니다.

    wsl.exe sudo e2fsck -f /dev/<device>
    

참고 항목

단일 Linux 배포판만 설치한 경우 "사용 중인 ext 파일" 오류가 발생할 수 있으며 실행wsl.exe lsblk하려면 추가 배포를 설치해야 합니다. 복구가 완료되면 배포를 제거할 수 있습니다.

  1. 복구가 완료되면 다음을 입력하여 PowerShell에서 디스크를 분리합니다.

    wsl.exe --unmount
    

Warning

sudo mount -o remount,rw / 명령을 사용하여 읽기 전용 배포를 사용 가능/쓰기 가능한 상태로 반환할 수 있지만, 모든 변경 내용은 메모리 내이므로 배포가 다시 시작될 때 손실됩니다. 그 대신, 위에 나열된 단계를 사용하여 디스크를 탑재하고 복구하는 것이 좋습니다.

Linux 배포판에 대한 .vhdx 파일 및 디스크 경로를 찾는 방법

Linux 배포에 대한 .vhdx 파일 및 디렉터리 경로를 찾으려면 PowerShell을 열고 다음 스크립트를 사용하여 <distribution-name>을(를) 실제 배포 이름으로 바꿉니다.

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

결과는 %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx와(과) 같은 경로를 표시합니다. 예시:

C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

나열한 Linux 배포와 연관된 ext4.vhdx 파일에 대한 경로입니다.