Windows에서 QEMU + Linux 5.18 실습 환경 구축
Windows작업 관리자 → 성능 → CPU → 가상화: 사용인지 확인
또는 PowerShell에서:
Get-ComputerInfo -Property HyperVisorPresent, HyperVRequirementVirtualizationFirmwareEnabled
Intel VT-x 또는 AMD-V 활성화 필요| 방법 | 특징 | 권장 대상 |
|---|---|---|
| 방법 1: WSL2 + QEMU | Linux 명령어 환경, KVM 가속 지원 | 개발 경험 있는 학생 (권장) |
| 방법 2: Windows 네이티브 QEMU | Windows 환경에서 직접 실행 | WSL2 없는 환경 |
WSL2 내부에서 QEMU를 실행하면 KVM 가속을 사용할 수 있어 성능이 좋습니다.
PowerShell을 관리자 권한으로 실행:
wsl --install
재부팅 후 Ubuntu 22.04 설정 완료 (사용자명/비밀번호 입력).
이미 WSL1이 설치된 경우 WSL2로 업그레이드:
wsl --set-default-version 2
wsl --set-version Ubuntu 2
버전 확인:
wsl --list --verbose
# NAME STATE VERSION
# Ubuntu Running 2 ← 2 이어야 함
WSL2 터미널(Ubuntu)을 열고:
# KVM 장치 존재 여부 확인
ls /dev/kvm
# 없으면: Windows 기능에서 "가상 머신 플랫폼" 활성화 필요 (아래 참조)
/dev/kvm이 없는 경우:
# PowerShell 관리자 권한으로
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all /norestart
재부팅 후 WSL2 재시작:
wsl --shutdown
wsl
sudo apt update
sudo apt install -y qemu-system-x86 qemu-utils
qemu-system-x86_64 --version
이후 모든 단계는 WSL2 터미널에서 진행합니다. Linux 가이드 (setup-linux.md)의 2단계부터 동일하게 진행합니다.
mkdir -p ~/qemu-lab && cd ~/qemu-lab
# ISO 다운로드
wget -O ubuntu-22.04-server-amd64.iso \
https://releases.ubuntu.com/22.04/ubuntu-22.04.5-live-server-amd64.iso
# 디스크 이미지 생성 (OS는 virtio, 테스트는 NVMe로 분리)
qemu-img create -f qcow2 ubuntu.qcow2 30G
qemu-img create -f raw nvme_disk.raw 16G
rmmod/insmod로 반복 로드합니다. OS가 NVMe 위에 있으면 드라이버 제거 시 시스템이 멈추므로, OS는 virtio 디스크(/dev/vda)에, 테스트 디스크는 NVMe 디바이스(/dev/nvme0n1)에 분리합니다.
Ubuntu 설치:
qemu-system-x86_64 \
-m 4G -smp 4 \
-enable-kvm \
-drive file=ubuntu.qcow2,if=virtio,format=qcow2 \
-cdrom ubuntu-22.04-server-amd64.iso \
-boot d \
-net nic -net user,hostfwd=tcp::2222-:22 \
-nographic
설치 후 NVMe 포함 기동:
qemu-system-x86_64 \
-m 4G -smp 4 \
-enable-kvm \
-drive file=ubuntu.qcow2,if=virtio,format=qcow2 \
-drive file=nvme_disk.raw,id=nvm,if=none,format=raw \
-device nvme,id=nvme0,serial=deadbeef \
-device nvme-ns,drive=nvm,bus=nvme0,nsid=1,logical_block_size=512,physical_block_size=512 \
-net nic -net user,hostfwd=tcp::2222-:22 \
-nographic
SSH 접속:
ssh -p 2222 <username>@localhost
WSL2를 사용하지 않고 Windows에서 직접 QEMU를 실행합니다. 가속에는 WHPX (Windows Hypervisor Platform)을 사용합니다.
PowerShell을 관리자 권한으로 실행:
# Windows Hypervisor Platform 활성화 (WHPX 가속용)
dism.exe /online /enable-feature /featurename:HypervisorPlatform /all /norestart
# Hyper-V 활성화
dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V-All /all /norestart
재부팅 후 활성화 확인:
Get-WindowsOptionalFeature -Online -FeatureName HypervisorPlatform | Select-Object State
# State: Enabled
# Scoop 설치 (없는 경우)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
# QEMU 설치
scoop install qemu
# Chocolatey 설치 (없는 경우, 관리자 PowerShell)
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# QEMU 설치
choco install qemu
https://www.qemu.org/download/#windows 에서 최신 Windows 인스톨러 다운로드 후 설치.
설치 경로 예: C:\Program Files\qemu
PATH 추가 (PowerShell):
$env:PATH += ";C:\Program Files\qemu"
# 영구 등록
[System.Environment]::SetEnvironmentVariable("PATH", $env:PATH, "Machine")
설치 확인:
qemu-system-x86_64 --version
qemu-img --version
PowerShell:
mkdir $HOME\qemu-lab
cd $HOME\qemu-lab
# PowerShell 7+ 또는 curl 사용
curl.exe -L -o ubuntu-22.04-server-amd64.iso `
https://releases.ubuntu.com/22.04/ubuntu-22.04.5-live-server-amd64.iso
또는 브라우저에서 직접 다운로드 후 C:\Users\<username>\qemu-lab\에 이동.
rmmod/insmod로 반복 로드합니다. OS가 NVMe 위에 있으면 드라이버 제거 시 시스템이 멈추므로, OS는 virtio 디스크(/dev/vda)에, 테스트 디스크는 NVMe 디바이스(/dev/nvme0n1)에 분리합니다.
cd $HOME\qemu-lab
qemu-img create -f qcow2 ubuntu.qcow2 30G
qemu-img create -f raw nvme_disk.raw 16G
cd $HOME\qemu-lab
qemu-system-x86_64 `
-m 4G -smp 4 `
-accel whpx `
-drive file=ubuntu.qcow2,if=virtio,format=qcow2 `
-cdrom ubuntu-22.04-server-amd64.iso `
-boot d `
-net nic -net user,hostfwd=tcp::2222-:22 `
-nographic
-accel whpx 대신 -accel tcg로 변경 (소프트웨어 에뮬레이션, 느림)
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv && sudo resize2fs /dev/ubuntu-vg/ubuntu-lv 로 확장할 것Ctrl+A X로 QEMU 종료cd $HOME\qemu-lab
qemu-system-x86_64 `
-m 4G -smp 4 `
-accel whpx `
-drive file=ubuntu.qcow2,if=virtio,format=qcow2 `
-drive file=nvme_disk.raw,id=nvm,if=none,format=raw `
-device nvme,id=nvme0,serial=deadbeef `
-device nvme-ns,drive=nvm,bus=nvme0,nsid=1,logical_block_size=512,physical_block_size=512 `
-net nic -net user,hostfwd=tcp::2222-:22 `
-nographic
Windows 10/11에는 OpenSSH 클라이언트가 기본 내장됩니다.
ssh -p 2222 <username>@localhost
SSH가 없는 경우:
# OpenSSH 클라이언트 설치 (관리자 PowerShell)
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
또는 PuTTY 사용:
localhost, Port: 2222, Connection type: SSH(방법 1, 2 공통 — SSH 접속 후 Guest VM 내부에서 진행)
sudo apt update && sudo apt install -y wget
KVER=5.18.0-051800
mkdir -p /tmp/kernel && cd /tmp/kernel
wget \
https://kernel.ubuntu.com/mainline/v5.18/amd64/linux-image-unsigned-${KVER}-generic_${KVER}.202205222030_amd64.deb \
https://kernel.ubuntu.com/mainline/v5.18/amd64/linux-modules-${KVER}-generic_${KVER}.202205222030_amd64.deb \
https://kernel.ubuntu.com/mainline/v5.18/amd64/linux-headers-${KVER}-generic_${KVER}.202205222030_amd64.deb \
https://kernel.ubuntu.com/mainline/v5.18/amd64/linux-headers-${KVER}_${KVER}.202205222030_all.deb
sudo dpkg -i /tmp/kernel/*.deb
sudo reboot
재접속 후 확인:
ssh -p 2222 <username>@localhost
uname -r
# 5.18.0-051800-generic
sudo apt install -y build-essential libncurses-dev bison flex \
libssl-dev libelf-dev bc pahole dwarves zstd
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.18-rc6.tar.xz
tar xf linux-5.18-rc6.tar.xz && cd linux-5.18-rc6
cp /boot/config-$(uname -r) .config
make olddefconfig
echo "-dpas-fast26" > localversion
make -j$(nproc) bindeb-pkg
sudo dpkg -i ../linux-image-*.deb ../linux-headers-*.deb
sudo reboot
uname -r
lsblk | grep nvme
# poll_queues 활성화 (nvme 모듈 재로드)
sudo rmmod nvme
sudo modprobe nvme poll_queues=2
cat /sys/block/nvme0n1/queue/io_poll # 1
cat /sys/block/nvme0n1/queue/io_poll_delay # -1
sudo apt install -y fio
sudo fio --name=poll_test --filename=/dev/nvme0n1 \
--ioengine=io_uring --hipri=1 \
--rw=randread --bs=4k --direct=1 \
--iodepth=1 --numjobs=1 --runtime=10
WSL2 터미널에서:
cat > ~/qemu-lab/start-vm.sh << 'EOF'
#!/bin/bash
cd ~/qemu-lab
qemu-system-x86_64 \
-m 4G -smp 4 \
-enable-kvm \
-drive file=ubuntu.qcow2,if=virtio,format=qcow2 \
-drive file=nvme_disk.raw,id=nvm,if=none,format=raw \
-device nvme,id=nvme0,serial=deadbeef \
-device nvme-ns,drive=nvm,bus=nvme0,nsid=1,logical_block_size=512,physical_block_size=512 \
-net nic -net user,hostfwd=tcp::2222-:22 \
-nographic "$@"
EOF
chmod +x ~/qemu-lab/start-vm.sh
# $HOME\qemu-lab\start-vm.ps1
$QEMU_LAB = "$HOME\qemu-lab"
qemu-system-x86_64 `
-m 4G -smp 4 `
-accel whpx `
-drive "file=$QEMU_LAB\ubuntu.qcow2,if=virtio,format=qcow2" `
-drive "file=$QEMU_LAB\nvme_disk.raw,id=nvm,if=none,format=raw" `
-device nvme,id=nvme0,serial=deadbeef `
-device nvme-ns,drive=nvm,bus=nvme0,nsid=1,logical_block_size=512,physical_block_size=512 `
-net nic -net user,hostfwd=tcp::2222-:22 `
-nographic
실행:
.\start-vm.ps1
# ExecutionPolicy 오류 시: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
| 증상 | 원인 | 해결 |
|---|---|---|
WHPX: Failed to initialize | Windows Hypervisor Platform 미활성 | PowerShell 관리자로 HypervisorPlatform 기능 활성화 후 재부팅 |
WHPX not supported | Hyper-V와 충돌 또는 하드웨어 미지원 | -accel tcg 로 변경 (느림) |
qemu-system-x86_64: command not found | PATH 미등록 | QEMU 설치 경로를 PATH에 추가 |
| PowerShell 줄바꿈 오류 | 백틱(`) 뒤 공백 | 백틱(`) 뒤에 공백/탭 없도록 확인 |
SSH Connection refused | VM 부팅 중 | 30~60초 대기 후 재시도 |
nvme0n1 없음 | -device nvme 누락 | QEMU 실행 명령 확인 |
io_poll 값이 0 | Guest 커널 5.19+ | uname -r 확인, 커널 5.18 재설치 |
WSL2에서 /dev/kvm 없음 | Hyper-V 비활성 | HypervisorPlatform 및 Microsoft-Hyper-V 기능 활성화 |
PuTTY Connection timed out | 포트 포워딩 오류 | QEMU에서 hostfwd=tcp::2222-:22 확인, Windows 방화벽 확인 |