주요 변경 사항

Windows 10 2004 Edition 이 발표되면서 WSL 2 가 정식으로 릴리스되었습니다.


WSL 의 주요 변경 사항은 MicroSoft의 웹사이트 에서 확인할 수 있으며 대략 요약하면 다음과 같은 변화가 있습니다.

  • 경량 Hyper-V 가상머신 기반으로 아키텍처가 변경되고 이에 따라 리눅스 시스템 콜 호환성이 좋아져서 기존에는 돌아가지 않은 nmap 이나 lsof 를  포함해서 대부분의 linux app 이 구동
  • Pro 버전이 필요했던 WSL 1 과 달리 Home 버전에서도 실행
  • 리눅스의 file IO 가 압도적으로 빨라짐



출처: https://docs.microsoft.com/en-us/windows/wsl/compare-versions


WSL 2 설치하기

Acrylic DNS Proxy 가 떠 있으면 WSL 이 제대로 구동이 안 되니 WSL 을 사용하려면 삭제하세요.


WSL 2 를 설치하려면 먼저 Windows 10 2004 를 업데이트해야 합니다. 현재 설치여부는 Windows Key + R 을 눌러서 실행창에 winver 를 넣고 버전을 확인해 보면 됩니다.



2004 업데이트를 설치했다면 PowerShell 을 관리자로 열고 다음 명령을 실행해서 WSL 을 활성화해줍니다.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart


이제 WSL 2 가 사용하는 VM platform 옵션을 활성화 해줍니다.

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart


그후에 https://docs.microsoft.com/ko-KR/windows/wsl/wsl2-kernel  에 연결해서 리눅스 커널 구성요소 설치해 주면 됩니다.


설치를 완료했으면 PC 를 재부팅을 해주면 WSL 2 설정이 완료됩니다.


WSL 을 잘 사용하려면 Windows Terminal 을 같이 설치하는 게 좋습니다. 윈도우즈 터미널(Windows Terminal) 설정하기 을 참고하세요.


WSL 2 로 변환

이제 Windows Terminal(이하 WT) 를 하나 열어 줍니다.


기존에 설치한 WSL 배포 목록은 wsl -l -v 명령어로 확인할 수 있습니다.

wsl -l -v

  NAME          STATE           VERSION
* Ubuntu        Stopped         1
  kali-linux    Stopped         1
  SLES-15       Stopped         1


Version 2로 변환하려면  wsl --set-version DISTO_NAME 2 를 실행하면 되며 아래 명령은 Ubuntu 라는 배포를 버전 2로 변경합니다.

 wsl --set-version Ubuntu 2

변환이 진행 중입니다. 몇 분 정도 걸릴 수 있습니다...
WSL 2와의 주요 차이점에 대한 자세한 내용은 https://aka.ms/wsl2를 참조하세요
변환이 완료되었습니다.


앞으로 Windows Store 에서 설치하는 모든 Linux 배포판 포맷을 WSL 2 로 설정하려면 wsl --set-default-version 2  명령을 실행합니다.

wsl --set-default-version 2


설치된 배포중에 특정 배포를 기본으로 설정하려면 wsl --set-default DISTRO_NAME 명령을 실행하며 아래는 Ubuntu 를 기본 배포판으로 설정합니다.

wsl --set-default Ubuntu

wsl 명령을 옵션없이 실행했을때 기본 배포판으로 진입하게 됩니다.


배포 삭제

이미 설치한 리눅스 배포를 삭제할 수 있습니다. WSL 1 에서는 wslconfig /u 옵션으로 가능했지만 WSL 2 에서는 wsl --unregister DISTRO 명령으로 배포를 삭제할 수 있습니다.

다음 명령은 이름이 Ubuntu-18.04 인 배포를 삭제합니다.

wsl --unregister Ubuntu-18.04


서비스 구동

WSL 2 는 systemctl을 지원하지 않지만 기존의 service 명령은 지원하므로 daemon 을 띄울 때에 service 명령을 사용해야 합니다. service 는 root 만 사용할 수 있는 명령어이므로 다음과 같이 /etc/sudoers 에 한 줄을 추가해 주면 편리하게 구동할 수 있습니다.


sudoers  파일 편집하기 위해 root 로 visudo 를 구동합니다. 

sudo visudo


모든 사용자가 service 명령을 사용할 수 있도록 추가하고 저장합니다.

%sudo ALL=NOPASSWD: /usr/sbin/service


저는 WSL 에 MySQL 과 redis 를 설치하고 다음 script 를 한 번 실행해 주고 있습니다.


#!/bin/bash

sudo service mysql start
sudo service redis-server start

WSL 재시작

다음 명령을 실행하면 실행중인 모든 배포와 WSL 2 경량 가상 머신을 종료할 수 있습니다.

wsl --shutdown 


또는 서비스 관리자에서 LxssManager 를 재시작해도 됩니다.


WSL 을 다시 시작하려면 wsl.exe 명령을 실행해 주면 됩니다.

Network

정식 버전이 나오고 WSL 에 구동한 서비스에 Windows 에서 localhost 로 접속할 수 있습니다. 


즉 WSL 에 구동한 MySQL 이나 Redis Server 에 Windows 에서 연결하거나 또는 다른 WSL 에서 연결하는 데 아무 문제가 없습니다.


WSL 파일 IO 성능 높이기

빠른 성능을 위한 프로젝트 파일 위치

MicroSoft 에 의하면 더 빠른 성능을 위해 프로젝트 파일의 위치를 WSL 내에 저장하는 것을 추천하고 있습니다.


Windows 에서 접근하려면 복잡하므로  \\wsl$\Ubuntu-20.04\home\<user name> 과 같이 네트워크 드라이브로 바로 접근하면 됩니다.

만약 탐색기에서 \\wsl$ 로 접근시 WSL 목록이 보이지 않는다면 인스턴스가 기동되지 않아서입니다.


또는 WSL 에 연결한 후에 explorer.exe . 를 실행하면 바로 탐색기에서 리눅스 파일시스템을 열수 있습니다.

바로 가기 만들기

PHPStorm 이나 PyCharm 같은 WSL 을 지원하는 IDE 를 사용할 경우 아래 내용은 무시하세요.


WSL 을 사용해도 IDE 나 편집기는 Windows 에서 사용하므로 프로젝트 등록시 WSL 에 있는 경로를 지정해 줘야 합니다.


이때 네트워크 경로로 연결하기 번거로우므로 바로가기를 만들어서 접근할수 있습니다.


바로가기는 2가지 방법이 있으며 "네트워크 드라이브 연결" 을 해서 드라이브 번호를 하나 할당하는 방법입니다.


2번째는 mklink 명령을 사용하여 바로가기를 만드는 방법입니다.


mklink 는 관리자만 사용할 수 있으므로 cmd.exe(powershell 은 안 됩니다.!) 를 관리자 권한으로 띄운 후에 다음과 같이 실행해 주면 됩니다.

C:\Users\lesstif>mklink /d ubuntu20-lesstif \\wsl$\Ubuntu-20.04\home\lesstif

ubuntu20-lesstif <<===>> \\wsl$\Ubuntu-20.04\home\lesstif에 대한 기호화된 링크를 만들었습니다.


이제 c:\users\lesstif\ubuntu20-lesstif 에 접근하면 Ubuntu 20 에 있는 파일에 바로 접근할 수 있습니다.


TroubleShooting

WSL 2에 커널 구성 요소 업데이트가 필요합니다.

위와 같은 에러가 날 경우 https://docs.microsoft.com/ko-KR/windows/wsl/wsl2-kernel 에서 wsl update 다운로드후 설치합니다.

가상 컴퓨터 플랫폼 Windows 기능을 사용하도록 설정

위의 메시지가 나올 경우 BIOS에서 가상화가 사용하도록 설정되어 있는지 확인해보고 BIOS 의 가상화 기능을 켜줘야 합니다.

같이 보기

Ref





blog comments powered by Disqus