engineering
WSL2 - Windows에서 linux를 돌리는 가장 효율적인 방법
제이훈 : 세상 모든 지식의 탐구자
2025. 6. 3. 15:04
WSL이란?
- WSL(Windows Subsystem for Linux)는 Windows에서 리눅스 환경을 실행할 수 있게 하는 하위 시스템
- 특히 WSL2는 리눅스 커널을 직접 포함하며, WSL1과 구조적으로 완전히 다름
🔰 WSL 개요
- WSL1 (2016~): Windows의 NT 커널 위에서 리눅스 시스템 콜을 호환 계층(LXSS)으로 번역해 실행
- WSL2 (2020~): 리눅스 커널을 포함한 경량 VM을 실행하여 실제 리눅스 환경을 구동
→ WSL1: 시스템 콜 에뮬레이션
→ WSL2: 실제 가상 머신
⚙️ WSL2 vs WSL1 아키텍처 비교
항목 | WSL1 | WSL2 |
---|---|---|
커널 | NT 커널 기반 (리눅스 API를 NT에서 처리) | 리눅스 커널 자체를 Hyper-V VM으로 실행 |
실행 방식 | 시스템 콜을 Windows에서 번역 처리 | Hyper-V 경량 VM에서 실제 리눅스 커널 실행 |
파일 시스템 | NTFS 기반, /mnt/c 등 | ext4 기반 VHDX + Windows 디렉토리 접근 가능 |
성능 | 빠른 파일 접근 (NTFS) | 느린 NTFS 접근, 리눅스 파일은 매우 빠름 |
호환성 | 일부 시스템 콜 미지원 | 100% 리눅스 커널 API 호환 |
🖥️ 경량 VM 구조 (Hyper-V Integration)
- WSL2는 Hyper-V 기반의 경량 VM을 사용
- WSL2는 Hyper-V의 Virtual Machine Platform 기능을 활용하여 리눅스 커널을 경량 VM으로 부팅
- 이 VM은 VirtualBox/VMware보다 훨씬 가볍고 빠르며, 부팅 시간이 매우 짧음
- 메모리와 CPU는 동적으로 할당되며, VMBus 및 9P 프로토콜을 통해 Windows와 통신
✅ wsl2-vhdx는 내부적으로 Hyper-V가 관리하는 자동화된 headless VM입니다.
사용자가 직접 VM 설정을 건드릴 필요는 없습니다.
🧱 구성 파일 설명 (init, initrd, vmlinuz, ext4.vhdx)
- vmlinuz
- 리눅스 커널 바이너리
- Microsoft 기본 커널 또는 사용자 지정 커널
경로 예: C:\Users\<사용자>\AppData\Local\Packages\<배포판>\LocalState\kernel - init
- 커널 부팅 이후 가장 먼저 실행되는 프로세스 (PID 1)
- 리눅스 사용자 공간 초기화 시작
- 기본적으로 systemd 비활성 (최근에는 지원 가능) - initrd
- 부트 초기화 RAM 디스크 (WSL2에서는 거의 사용되지 않음) - ext4.vhdx
- 리눅스 루트 파일 시스템을 담고 있는 가상 디스크 이미지
경로 예: C:\Users\<사용자>\AppData\Local\Packages\<배포판>\LocalState\ext4.vhdx
- 리눅스 파일은 여기에 저장, /mnt/c는 별도 마운트된 NTFS 경로
🔄 리눅스 커널의 업데이트와 로딩
- WSL 설치 시 커널도 함께 제공되며, Windows가 주기적으로 업데이트
- 커널 위치:
C:\Windows\System32\lxss\tools\kernel
wsl.conf
또는.wslconfig
를 통해 사용자 지정 커널 사용 가능
[wsl2]
kernel = C:\\path\\to\\custom\\kernel
커널은 Hyper-V VM 부팅 시 자동으로 로딩되며, Windows가 부트로더 역할 수행
🧠 시스템 콜 처리 흐름 : WSL1 vs WSL2
▶️ WSL1
Linux 앱 → WSL 호환 계층(LXSS) → Windows NT 커널 API → 실행
- 리눅스 시스템 콜을 Windows API로 번역
- 속도는 빠르나 호환성에 제약
▶️ WSL2
Linux 앱 → 리눅스 커널(syscall) → 직접 실행 → WSL 통신 → Windows 서비스/API
- WSL2는 실제 커널을 사용하여 완벽한 시스템 콜 지원
- fork, ptrace, inotify 등도 지원
- Windows와의 통신은 VMBus, 9P, WSLg, wslhost.exe 등을 통해 간접 처리
📌 요약
- 핵심 차이: WSL1은 NT API 에뮬레이션, WSL2는 리눅스 커널 자체 실행
- 동작 방식: WSL2는 Hyper-V 기반 경량 VM으로 부팅
- 구성 요소: vmlinuz, init, ext4.vhdx 등 리눅스 부팅 구조 유지
- 커널 업데이트: Windows 자동 업데이트 or 사용자 지정
- 시스템 콜: WSL1은 변환 방식, WSL2는 리눅스 커널 직접 처리