Linux용 Windows 하위 시스템 문제 해결

아래에 WSL과 관련된 몇 가지 일반적인 문제 해결 시나리오가 나와 있지만, GitHub의 WSL 제품 리포지토리에 제출된 문제도 검색해 보는 것이 좋습니다.

문제, 버그 보고서, 기능 요청 제출

WSL 제품 리포지토리 문제를 통해 다음을 수행할 수 있습니다.

  • 기존 문제를 검색하여 현재 발생하는 문제와 관련된 문제가 있는지 확인합니다. 검색 창에서 "is:open"을 제거하여 이미 해결된 문제를 검색에 포함할 수 있습니다. 미해결 문제 중에서 우선적으로 해결되기를 원하는 관심을 표시하려는 문제에 주석을 달거나 좋아요를 눌러 주시기 바랍니다.
  • 새 문제를 제출합니다. WSL에서 문제를 발견했는데 기존 문제가 아닌 것으로 보이는 경우 녹색 새 문제 단추를 선택한 다음, WSL - 버그 보고서를 선택하면 됩니다. 문제의 제목, Windows 빌드 번호(현재 빌드 번호를 보려면 cmd.exe /c ver 실행), WSL 1 또는 2 중에 현재 실행하고 있는 버전, 현재 Linux 커널 버전 번호(wsl.exe --status 또는 cat /proc/version 실행), 배포판의 버전 번호(lsb_release -r 실행), 관련된 기타 소프트웨어 버전, 재현 단계, 예상 동작, 실제 동작 및 진단 로그(사용 가능하고 적절한 경우)를 포함해야 합니다. 자세한 내용은 WSL에 기여를 참조하세요.
  • 녹색 새 문제 단추를 선택하고 기능 요청을 선택하여 기능 요청을 제출합니다. 요청을 설명하는 몇 가지 질문에 답해야 합니다.

다음도 가능합니다.

설치 문제

  • 0x80070003 오류로 인한 설치 실패

    • Linux용 Windows 하위 시스템은 시스템 드라이브(일반적으로 C: 드라이브)에서만 실행됩니다. 배포가 시스템 드라이브에 저장되어 있는지 확인합니다.
    • 설정 -시스템 --스토리지 -더 많은 스토리지 설정을 차례로 엽니다. 새 콘텐츠가 저장된 위치를 변경합니다.C: 드라이브에 앱을 설치하기 위한 시스템 설정에 대한 그림
  • 0x8007019e 오류로 인한 WslRegisterDistribution 실패

    • 선택적인 Linux용 Windows 하위 시스템 구성 요소가 실행되지 않습니다.
    • 제어판 -프로그램 및 기능 -Windows 기능 사용/사용 안 함 -을 열어 Linux용 Windows 하위 시스템을 선택하거나 이 문서의 시작 부분에서 설명한 PowerShell cmdlet을 사용합니다.
  • 0x80070003 오류 또는 0x80370102 오류로 인해 설치하지 못했습니다.

    • 컴퓨터 BIOS 내에서 가상화를 사용하도록 설정했는지 확인합니다. 이 방법에 대한 지침은 컴퓨터마다 다르며, CPU 관련 옵션에 있을 가능성이 높습니다.
    • WSL2를 사용하려면 CPU가 Intel Nehalem 프로세서(Intel Core 1세대) 및 AMD Opteron에 도입된 SLAT(두 번째 수준 주소 변환) 기능을 지원해야 합니다. 이전 CPU(예: Intel Core 2 Duo)는 Virtual Machine 플랫폼을 성공적으로 설치하더라도 WSL2를 실행할 수 없습니다.
  • 업그레이드 시도 중 오류:

    • Linux용 Windows 하위 시스템을 사용하도록 설정했고 Windows 빌드 버전 18362 이상을 사용하고 있는지 확인합니다. WSL을 실행하도록 하려면 관리자 권한(Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux)으로 PowerShell 프롬프트에서 이 명령을 실행합니다.
  • 가상 디스크 시스템 제한으로 인해 요청한 작업을 완료할 수 없습니다. 가상 하드 디스크 파일은 압축이 풀려 있는 상태이고 암호화되지 않아야 하며 스파스가 아니어야 합니다.

    • Linux 배포판의 프로필 폴더를 열어서 "내용 압축"과 "내용 암호화"를 선택 취소합니다. 이는 Windows 파일 시스템의 %USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited... 같은 폴더에 있을 것입니다.
    • 이 Linux 배포판 프로필에는 LocalState 폴더가 있을 것입니다. 이 폴더를 마우스 오른쪽 단추로 클릭하여 옵션 메뉴를 표시합니다. 속성 > 고급을 선택한 다음, “압축하여 디스크 공간 절약" 및 "데이터 보호를 위해 내용을 암호화" 확인란이 선택 취소되어 있는지 확인합니다(선택하지 않음). 이를 현재 폴더 또는 모든 하위 폴더와 파일에만 적용할지 묻는 메시지가 표시되면 압축 플래그만 지우도록 "이 폴더만"을 선택합니다. 그러면 wsl --set-version 명령이 작동할 것입니다.

WSL 배포판 속성 설정의 스크린샷

참고

내 경우에는 Ubuntu 18.04 배포판의 LocalState 폴더가 C:\Users<my-user-name>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc에 있었습니다.

이 문제에 대한 업데이트된 정보를 추적할 수 있는 WSL Docs GitHub 스레드 #4103을 확인하세요.

  • cmdlet, 함수, 스크립트 파일 또는 실행 프로그램의 이름에는 'wsl'이라는 단어가 들어갈 수 없습니다.

  • 오류: Linux용 Windows 하위 시스템에 설치된 배포가 없습니다.

    • WSL 배포를 이미 설치한 후 이 오류가 표시되는 경우 다음을 수행합니다.
    1. 명령줄에서 호출하기 전에 배포를 한 번 이상 실행합니다.
    2. 별도의 사용자 계정을 실행할 수 있는지 여부를 확인합니다. 상승된 권한(관리 모드)으로 기본 사용자 계정을 실행하면 이 오류가 발생하지 않지만, Windows와 함께 제공되는 기본 관리자 계정을 실수로 실행하지 않도록 해야 합니다. 이 계정은 별도의 사용자 계정이며 설치된 WSL 배포는 디자인 별로 표시되지 않습니다. 자세한 내용은 기본 제공 관리자 계정 사용 및 사용 안 함을 참조하세요.
    3. WSL 실행 파일은 네이티브 시스템 디렉터리에만 설치됩니다. 64비트 Windows(또는 ARM64, 비 네이티브 조합)에서 32비트 프로세스를 실행하는 경우 호스트된 비 네이티브 프로세스에는 실제로 다른 System32 폴더가 표시됩니다. (x64 Window에서 볼 수 있는 32비트 프로세스는 \Windows\SysWOW64의 디스크에 저장됩니다.) 가상 폴더 \Windows\sysnative를 확인하여 호스트된 프로세스에서 "네이티브" system32에 액세스할 수 있습니다. 실제로 디스크에는 존재하지 않지만 파일 시스템 경로 확인자가 찾을 것입니다.
  • 오류: 이 업데이트는 Linux용 Windows 하위 시스템을 사용하는 머신에만 적용됩니다.

    • Linux 커널 업데이트 MSI 패키지를 설치하려면 WSL이 필요하며, 먼저 이를 사용하도록 설정해야 합니다. 실패하면 This update only applies to machines with the Windows Subsystem for Linux 메시지가 표시됩니다.
    • 이 메시지가 표시되는 세 가지 가능한 원인은 다음과 같습니다.
    1. WSL 2를 지원하지 않는 이전 버전의 Windows를 아직 사용하고 있습니다. 버전 요구 사항 및 업데이트에 대한 링크는 2단계를 참조하세요.

    2. WSL을 사용하도록 설정되지 않았습니다. 1단계로 돌아가서 머신에서 선택적 WSL 기능을 사용하도록 설정되어 있는지 확인해야 합니다.

    3. WSL을 사용하도록 설정한 후에는 다시 부팅해야 적용됩니다. 머신을 다시 부팅하고 다시 시도하세요.

  • 오류: WSL 2에는 커널 구성 요소에 대한 업데이트가 필요합니다. 자세한 내용은 https://aka.ms/wsl2kernel을 방문하세요.

    • Linux 커널 패키지가 %SystemRoot%\system32\lxss\tools 폴더에 없는 경우 이 오류가 발생합니다. 이러한 설치 지침의 4단계에서 Linux 커널 업데이트 MSI 패키지를 설치하여 이 문제를 해결하세요. '프로그램 추가/제거'에서 MSI를 제거하고 다시 설치해야 할 수 있습니다.

일반적인 문제

Windows 10 버전 1903을 사용하고 있는데 WSL 2에 대한 옵션이 아직 보이지 않음

이는 머신이 아직 WSL 2의 백포트를 가져오지 않았기 때문일 수 있습니다. 이를 해결하는 가장 간단한 방법은 Windows 설정으로 이동하여 '업데이트 확인'을 클릭하여 시스템에 최신 업데이트를 설치하는 것입니다. 백포트에 대한 전체 지침을 확인하세요.

'업데이트 확인'을 눌렀는데도 업데이트를 아직 받지 못한 경우 KB KB4566116을 수동으로 설치할 수 있습니다.

오류: wsl --set-default-version 2인 경우 0x1bc

'표시 언어' 또는 '시스템 로캘' 설정이 영어가 아닌 경우 발생할 수 있습니다.

wsl --set-default-version 2
Error: 0x1bc
For information on key differences with WSL 2 please visit https://aka.ms/wsl2

0x1bc의 실제 오류는 다음과 같습니다.

WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel

자세한 내용은 문제 5749를 참조하십시오.

Windows에서 WSL 파일에 액세스할 수 없음

9p 프로토콜 파일 서버는 Linux 쪽에서 서비스를 제공하여 Windows가 Linux 파일 시스템에 액세스할 수 있도록 합니다. Windows에서 \\wsl$를 사용하여 WSL에 액세스할 수 없는 경우 9P가 제대로 시작되지 않았기 때문일 수 있습니다.

이를 확인하려면 dmesg |grep 9p를 사용하여 시작 로그를 확인할 수 있습니다. 그러면 오류가 표시됩니다. 성공적인 출력은 다음과 같습니다.

[    0.363323] 9p: Installing v9fs 9p2000 file system support
[    0.363336] FS-Cache: Netfs '9p' registered for caching
[    0.398989] 9pnet: Installing 9P2000 support

이 문제에 대한 자세한 내용은 이 Github 스레드를 참조하세요.

WSL 2 배포를 시작할 수 없으며 출력에 'WSL 2'만 표시됨

표시 언어가 영어가 아닌 경우 오류 텍스트가 잘려서 표시될 수 있습니다.

C:\Users\me>wsl
WSL 2

이 문제를 해결하려면 https://aka.ms/wsl2kernel을 방문하여 해당 문서 페이지의 지침에 따라 수동으로 커널을 설치하세요.

Linux에서 windows.exe를 실행하는 경우 command not found

사용자는 Linux에서 직접 notepad.exe와 같은 Windows 실행 파일을 실행할 수 있습니다. 경우에 따라 다음과 같이 "명령을 찾을 수 없음" 오류가 발생할 수 있습니다.

$ notepad.exe
-bash: notepad.exe: command not found

$PATH에 win32 경로가 없는 경우 interop에서 .exe를 찾지 못합니다. Linux에서 echo $PATH를 실행하여 이를 확인할 수 있습니다. 출력에 win32 경로(예: /mnt/c/Windows)가 표시되어야 합니다. Windows 경로가 표시되지 않는 경우 Linux 셸에서 PATH를 덮어쓸 가능성이 높습니다.

다음은 Debian의 /etc/profile로 인해 문제가 발생한 예입니다.

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi

Debian에서 올바른 방법은 위의 줄을 제거하는 것입니다. 아래와 같이 할당 시 $PATH를 추가할 수도 있지만 이 경우에는 WSL 및 VSCode와 관련한 몇 가지 다른 문제가 발생합니다.

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:$PATH"
fi

자세한 내용은 문제 52965779를 참조하세요.

"Error: 0x80370102 필요한 기능이 설치되어 있지 않아 가상 머신을 시작할 수 없습니다."

가상 머신 플랫폼 Windows 기능을 활성화하고 BIOS에서 가상화가 사용되고 있는지 확인하세요.

  1. Hyper-V 시스템 요구 사항을 확인합니다.

  2. 머신이 VM인 경우 중첩된 가상화를 수동으로 사용하도록 설정하세요. 관리자로 powershell을 시작하고 다음을 실행합니다.

    Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
    
  3. 가상화를 사용하도록 설정하는 방법에 대한 자세한 지침은 PC 제조업체의 지침을 따르세요. 일반적으로 이는 시스템 BIOS를 사용하여 이러한 기능이 CPU에서 활성화되도록 할 수 있습니다. 이 프로세스에 대한 지침은 머신마다 다를 수 있습니다. 예는 Bleeping Computer의 이 문서를 참조하세요.

  4. Virtual Machine Platform 선택적 구성 요소를 사용하도록 설정한 후 머신을 다시 시작합니다.

  5. 또한 타사 하이퍼바이저(예: VMware 또는 VirtualBox)가 설치되어 있는 경우 HyperV(VMware 15.5.5+ VirtualBox 6+)를 지원할 수 있는 최신 버전에 설치되어 있거나 해당 하이퍼바이저가 꺼져 있는지 확인하세요.

Virtual Machine에서 Hyper-V를 실행할 때 중첩된 가상화를 구성하는 방법에 대해 자세히 알아봅니다.

Bash가 VPN에 연결되면 네트워크 연결이 끊어짐

Windows에서 VPN에 연결한 후에 Bash에서 네트워크 연결이 끊어지면 Bash 내에서 다음 해결 방법을 시도해 보세요. 이 해결 방법을 사용하면 /etc/resolv.conf를 통해 DNS 확인을 수동으로 재정의할 수 있습니다.

  1. ipconfig.exe /all을 수행하여 VPN의 DNS 서버를 적어 둡니다.
  2. sudo cp /etc/resolv.conf /etc/resolv.conf.new를 수행하여 기존 resolv.conf의 복사본을 만듭니다.
  3. sudo unlink /etc/resolv.conf를 수행하여 현재 resolv.conf의 연결을 해제합니다.
  4. sudo mv /etc/resolv.conf.new /etc/resolv.conf
  5. /etc/resolv.conf를 엽니다.
    a. "# 이 파일은 WSL에서 자동으로 생성했습니다. 이 파일의 자동 생성을 중지하려면 이 줄을 제거하세요."라는 파일의 첫 번째 줄을 삭제합니다.
    b. 위 (1)의 DNS 항목을 DNS 서버 목록의 첫 번째 항목으로 추가합니다.
    c. 파일을 닫습니다.

VPN의 연결을 끊은 후에는 변경 내용을 /etc/resolv.conf로 되돌려야 합니다. 이렇게 하려면 다음을 수행합니다.

  1. cd /etc
  2. sudo mv resolv.conf resolv.conf.new
  3. sudo ln -s ../run/resolvconf/resolv.conf resolv.conf

WSL을 시작하거나 배포를 설치하면 오류 코드가 반환됨

이 지침에 따라 자세한 로그를 수집하고 문제를 GitHub에 제출하세요.

WSL 업데이트

Linux용 Windows 하위 시스템에는 업데이트가 가능한 두 가지 구성 요소가 있습니다.

  1. Linux용 Windows 하위 시스템 자체를 업데이트하려면 PowerShell 또는 CMD에서 wsl --update 명령을 사용합니다.

  2. 특정 Linux 배포판 사용자 바이너리를 업데이트하려면 업데이트하려는 Linux 배포판에서 apt-get update | apt-get upgrade 명령을 사용합니다.

apt-get upgrade 오류

일부 패키지는 아직 구현하지 않은 기능을 사용합니다. 예를 들어 udev는 아직 지원되지 않으므로 여러 apt-get upgrade 오류가 발생합니다.

udev와 관련된 문제를 해결하려면 다음 단계를 수행합니다.

  1. 다음을 /usr/sbin/policy-rc.d에 작성하고 변경 내용을 저장합니다.

    #!/bin/sh
    exit 101
    
  2. 실행 권한을 /usr/sbin/policy-rc.d에 추가합니다.

    chmod +x /usr/sbin/policy-rc.d
    
  3. 다음 명령을 실행 합니다.

    dpkg-divert --local --rename --add /sbin/initctl
    ln -s /bin/true /sbin/initctl
    

"Error: 0x80040306" - 설치 시

이 오류는 레거시 콘솔을 지원하지 않는다는 사실과 관련이 있습니다. 레거시 콘솔을 해제하려면 다음을 수행합니다.

  1. cmd.exe를 엽니다.
  2. 마우스 오른쪽 단추로 제목 표시줄 -> 속성 ->를 클릭하고, 레거시 콘솔 사용의 선택을 취소합니다.
  3. 확인을 클릭합니다.

"Error: 0x80040154" - Windows 업데이트 후

Windows 업데이트 중에 Linux용 Windows 하위 시스템 기능이 사용하지 않도록 설정될 수 있습니다. 이 문제가 발생하면 Windows 기능을 다시 사용하도록 설정해야 합니다. Linux용 Windows 하위 시스템을 사용하도록 설정하는 방법에 대한 지침은 수동 설치 가이드에서 확인할 수 있습니다.

표시 언어 변경

WSL 설치는 Windows 설치의 로캘과 일치하도록 Ubuntu 로캘을 자동으로 변경하려고 합니다. 이 동작을 원하지 않는 경우 설치가 완료된 후 다음 명령을 실행하여 Ubuntu 로캘을 변경할 수 있습니다. 이 변경 내용이 적용되려면 bash.exe를 다시 시작해야 합니다.

아래 예제에서는 로캘을 en-US로 변경합니다.

sudo update-locale LANG=en_US.UTF8

Windows 시스템 복원 후의 설치 문제

  1. %windir%\System32\Tasks\Microsoft\Windows\Windows Subsystem for Linux 폴더를 삭제합니다.
    참고: 선택적 기능이 완전히 설치되어 작동하는 경우에는 이 작업을 수행하지 마세요.
  2. 선택적 WSL 기능을 사용하도록 설정합니다(아직 사용하지 않는 경우).
  3. 다시 부팅
  4. lxrun /uninstall /full을 실행합니다
  5. Bash를 설치합니다.

WSL에서 인터넷에 액세스할 수 없음

일부 사용자가 WSL에서 인터넷 액세스를 차단하는 특정 방화벽 애플리케이션의 문제를 보고했습니다. 보고된 방화벽은 다음과 같습니다.

  1. Kaspersky
  2. AVG
  3. Avast
  4. Symantec Endpoint Protection

방화벽을 해제하면 액세스가 허용되는 경우도 있습니다. 단순히 방화벽을 설치하면 경우에 따라 액세스가 차단되는 것처럼 보입니다.

Microsoft Defender 방화벽을 사용하는 경우 "허용되는 앱 목록에 있는 연결을 포함하여 들어오는 연결을 모두 차단합니다"를 선택 취소하면 액세스가 허용됩니다.

ping 사용 시의 권한 거부 오류

Windows 1주년 업데이트, 버전 1607의 경우 WSL에서 ping을 실행하려면 Windows의 관리자 권한이 필요합니다. ping을 실행하려면 Windows의 Ubuntu에서 관리자 권한으로 Bash를 실행하거나 CMD/PowerShell 프롬프트에서 관리자 권한으로 bash.exe를 실행합니다.

이후 버전의 Windows인 빌드 14926 이상의 경우 관리자 권한이 더 이상 필요하지 않습니다.

Bash가 중지됨

Bash로 작업하는 동안 Bash가 중지되거나 교착 상태가 되어 입력에 응답하지 않는 경우 메모리 덤프를 수집하고 보고하여 문제를 진단하는 데 도움이 됩니다. 다음 단계를 수행하면 시스템의 작동이 중단됩니다. 편안하지 않으면 이 작업을 수행하지 않거나 해당 작업을 저장한 후에 수행하세요.

메모리 덤프를 수집하려면 다음을 수행합니다.

  1. 메모리 덤프 유형을 "전체 메모리 덤프"로 변경합니다. 덤프 유형을 변경하는 동안 현재 유형을 적어 둡니다.

  2. 단계를 사용하여 키보드 컨트롤을 사용하는 시스템 작동 중단을 구성합니다.

  3. 중지 또는 교착 상태를 재현합니다.

  4. (2)의 키 시퀀스를 사용하여 시스템의 작동을 중단시킵니다.

  5. 시스템의 작동이 중단되고 메모리 덤프가 수집됩니다.

  6. 시스템이 다시 부팅되면 memory.dmp를 secure@microsoft.com에 보고합니다. 덤프 파일의 기본 위치는 %SystemRoot%\memory.dmp 또는 C:\Windows\memory.dmp(C:가 시스템 드라이브인 경우)입니다. 이메일에서 덤프는 Windows 팀의 WSL 또는 Bash에 대한 것입니다.

  7. 메모리 덤프 유형을 원래 설정으로 복원합니다.

빌드 번호 확인

PC의 아키텍처 및 Windows 빌드 번호를 확인하려면
설정시스템정보를 차례로 엽니다.

OS 빌드시스템 종류 필드를 찾습니다.
빌드 및 시스템 종류 필드의 스크린샷

Windows Server 빌드 번호를 확인하려면 PowerShell에서 다음을 실행합니다.

systeminfo | Select-String "^OS Name","^OS Version"

WSL이 사용하도록 설정되었는지 확인

PowerShell에서 다음을 실행하여 Linux용 Windows 하위 시스템을 사용하도록 설정했는지 확인할 수 있습니다.

Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

OpenSSH 서버 연결 문제

SSH 서버를 연결하려고 하면 "127.0.0.1 포트 22에 의해 연결이 닫혔습니다." 오류로 인해 실패합니다.

  1. OpenSSH 서버가 실행되고 있는지 확인합니다.

    sudo service ssh status
    

    그리고 https://ubuntu.com/server/docs/service-openssh 자습서를 수행했습니다.

  2. sshd 서비스를 중지한 다음, 디버그 모드에서 sshd를 시작합니다.

    sudo service ssh stop
    sudo /usr/sbin/sshd -d
    
  3. 시작 로그를 확인하고, HostKeys를 사용할 수 있고 다음과 같은 로그 메시지가 표시되지 않는지 확인합니다.

    debug1: sshd version OpenSSH_7.2, OpenSSL 1.0.2g  1 Mar 2016
    debug1: key_load_private: incorrect passphrase supplied to decrypt private key
    debug1: key_load_public: No such file or directory
    Could not load host key: /etc/ssh/ssh_host_rsa_key
    debug1: key_load_private: No such file or directory
    debug1: key_load_public: No such file or directory
    Could not load host key: /etc/ssh/ssh_host_dsa_key
    debug1: key_load_private: No such file or directory
    debug1: key_load_public: No such file or directory
    Could not load host key: /etc/ssh/ssh_host_ecdsa_key
    debug1: key_load_private: No such file or directory
    debug1: key_load_public: No such file or directory
    Could not load host key: /etc/ssh/ssh_host_ed25519_key
    

이러한 메시지가 표시되고 키가 /etc/ssh/ 아래에 없으면 해당 키를 다시 생성하거나 openssh 서버를 제거& 후 설치해야 합니다.

sudo apt-get purge openssh-server
sudo apt-get install openssh-server

"참조 된 어셈블리를 찾을 수 없습니다." WSL 선택적 기능을 사용하도록 설정하는 경우

이 오류는 잘못된 설치 상태와 관련이 있습니다. 이 문제를 시도해 보고 해결하려면 다음 단계를 수행하세요.

  • PowerShell에서 WSL 기능 사용 명령을 실행하는 경우 [시작] 메뉴를 열고, 'Windows 기능 사용/사용 안 함'을 검색하여 GUI를 대신 사용해 본 다음, 목록에서 선택적 구성 요소를 설치할 'Linux용 Windows 하위 시스템'을 선택합니다.

  • [설정], [업데이트]로 차례로 이동하고, '업데이트 확인'을 클릭하여 Windows 버전을 업데이트합니다.

  • 두 단계가 모두 실패하고 WSL에 액세스해야 하는 경우 설치 미디어를 사용하여 Windows 10을 다시 설치하고 '모두 유지'를 선택하여 앱과 파일이 유지되도록 하는 방식으로 업그레이드하는 것이 좋습니다. 이 작업을 수행하는 방법에 대한 지침은 Windows 10 다시 설치 페이지에서 확인할 수 있습니다.

이 오류가 표시되는 경우:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/home/artur/.ssh/private-key.pem' are too open.

이 문제를 해결하려면 다음을 /etc/wsl.conf 파일에 추가합니다.

[automount]
enabled = true
options = metadata,uid=1000,gid=1000,umask=0022

이 명령을 추가하면 메타데이터가 포함되고 WSL에서 보이는 Windows 파일에 대한 파일 권한이 수정됩니다. 자세한 내용은 파일 시스템 권한에서 확인하세요.

배포 내에서 Windows 명령 실행 실패

Microsoft Store에서 제공하는 일부 배포판은 아직 완전히 호환되지 않아서 Windows 명령을 바로 실행할 수 없습니다. powershell.exe /c start . 또는 다른 Windows 명령을 실행할 때 -bash: powershell.exe: command not found 오류가 발생하면 다음 단계를 수행하여 해결할 수 있습니다.

  1. WSL 배포에서 echo $PATH를 실행합니다.
    /mnt/c/Windows/system32를 포함하지 않는 경우 무언가 표준 PATH 변수를 다시 정의하는 것입니다.
  2. cat /etc/profile을 사용하여 프로필 설정을 확인하세요.
    PATH 변수 할당을 포함하는 경우에는 파일을 편집하여 # 문자로 PATH 할당 블록을 주석 처리합니다.
  3. wsl.conf가 있는지 확인하고(cat /etc/wsl.conf) appendWindowsPath=false가 없는지 확인합니다. 있는 경우에는 주석 처리합니다.
  4. wsl -t 다음에 배포 이름을 입력하여 배포를 다시 시작하거나 cmd 또는 PowerShell에서 wsl --shutdown을 실행합니다.

WSL 2를 설치한 후 부팅할 수 없음

사용자가 WSL 2를 설치한 후 부팅할 수 없는 문제에 대해 알고 있습니다. 현재 이러한 문제를 철저하게 진단하고 있으며, 버퍼 크기를 변경하거나 적절한 드라이버를 설치하면 이 문제를 해결하는 데 도움이 된다는 사용자들의 제보가 있었습니다. Github 문제에서 이 문제에 대한 최신 업데이트를 확인하세요.

ICS를 사용하지 않는 경우 WSL 2 오류

ICS(인터넷 연결 공유)는 WSL 2의 필수 구성 요소입니다. ICS 서비스는 HNS(호스트 네트워크 서비스)에서 WSL 2가 NAT, DNS, DHCP 및 호스트 연결 공유에 의존하는 기본 가상 네트워크를 만드는 데 사용됩니다.

ICS 서비스(SharedAccess)를 사용하지 않거나 그룹 정책을 통해 ICS를 사용하지 않으면 WSL HNS 네트워크가 생성되지 않습니다. 이로 인해 새 WSL 버전 2 이미지를 만들 때 오류가 발생하고 버전 1 이미지를 버전 2로 변환하려고 할 때 다음 오류가 발생합니다.

There are no more endpoints available from the endpoint mapper.

WSL 2가 필요한 시스템은 ICS 서비스(SharedAccess)를 기본 시작 상태인 수동(트리거 시작)으로 두어야 하며 ICS를 사용하지 않도록 설정하는 모든 정책을 덮어쓰거나 제거해야 합니다. ICS 서비스를 사용하지 않도록 설정하면 WSL 2가 중단되기 때문에 ICS를 사용하지 않도록 설정하는 것을 권장하지 않지만, 이 지침(ng-application-guard-)에 따라 ICS의 일부를 사용하지 않도록 설정할 수 있습니다.

이전 버전의 Windows 및 WSL 사용

Windows 10 크리에이터 업데이트(2017년 10월, 빌드 16299) 또는 1주년 업데이트(2016년 8월, 빌드 14393)와 같은 이전 버전의 Windows 및 WSL을 실행하는 경우 주목해야 하는 여러 가지 차이점이 있습니다. 최신 Windows 버전으로 업데이트하는 것이 좋지만, 업데이트가 불가능한 경우를 대비하여 아래에 몇 가지 차이점을 설명해 놓았습니다.

상호 운용성 명령의 차이점:

  • bash.exewsl.exe로 바뀌었습니다. Linux 명령은 Windows 명령 프롬프트 또는 PowerShell에서 실행할 수 있지만, 초기 Windows 버전의 경우 bash 명령을 사용해야 합니다. 예: C:\temp> bash -c "ls -la" bash -c에 전달된 WSL 명령은 수정되지 않고 WSL 프로세스에 전달됩니다. 파일 경로는 WSL 형식으로 지정해야 하며, 관련 문자를 이스케이프 방식으로 처리해야 합니다. 예를 들어 C:\temp> bash -c "ls -la /proc/cpuinfo" 또는 C:\temp> bash -c "ls -la \"/mnt/c/Program Files\""입니다.
  • 특정 배포에 사용할 수 있는 명령을 확인하려면 [distro.exe] /?를 실행합니다. 예를 들어 Ubuntu에서는 C:\> ubuntu.exe /?를 실행합니다.
  • Windows 경로가 WSL $PATH에 포함됩니다.
  • 이전 버전의 Windows 10에서 WSL 배포를 통해 Windows 도구를 호출하는 경우 디렉터리 경로를 지정해야 합니다. 예를 들어 WSL 명령줄에서 Windows 메모장 앱을 호출하려면 /mnt/c/Windows/System32/notepad.exe를 입력합니다.
  • 기본 사용자를 root로 변경하려면 PowerShell에서 C:\> lxrun /setdefaultuser root 명령을 사용한 다음, C:\> bash.exe 명령으로 Bash.exe를 실행하여 로그인합니다. 배포판 암호 명령 $ passwd username을 사용하여 암호를 다시 설정한 다음, $ exit 명령을 사용하여 Linux 명령줄을 닫습니다. Windows 명령 프롬프트 또는 Powershell에서 C:\> lxrun.exe /setdefaultuser username 명령을 사용하여 기본 사용자를 다시 일반 Linux 사용자 계정으로 설정합니다.

기존 버전의 WSL 제거

크리에이터 업데이트(2017년 10월, 빌드 16299) 이전 버전의 Windows 10에 WSL을 설치한 경우 설치된 이전 Linux 배포판에서 꼭 필요한 파일, 데이터 등을 Microsoft Store를 통해 설치한 최신 배포판으로 마이그레이션하는 것이 좋습니다. 머신에서 기존 배포판을 제거하려면 명령줄 또는 PowerShell 인스턴스에서 wsl --unregister Legacy 명령을 실행합니다. Windows 파일 탐색기 또는 PowerShell에서 rm -Recurse $env:localappdata/lxss/ 명령으로 %localappdata%\lxss\ 폴더(및 모든 하위 콘텐츠)를 삭제하여 이전 배포판을 수동으로 제거하는 방법도 있습니다.