2025-10-12 임시작성/2025-12-15 업로드

 

참고

- 인텔 N100 CPU 기준.

- 패스스루 사용하면 Proxmox 내부 콘솔 사용 불가. RDP나 HDMI 전환 사용해야함.

- 챗GPT, 제미나이

- Proxmox GPU passthrough tutorial - pass through N100 Intel Alder Lake-N UHD integrated iGPU Graphics - YouTube


사전 준비 및 확인

BIOS

1. CPU Configuration - Intel (VMX) Virtualization : Enabled

2. System Agent (SA) Configuration - VT-d : Enabled

 

Driver

- virtio-win-0.1.285.iso 다운로드

Index of /groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.285-1

 

Index of /groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.285-1

 

fedorapeople.org


VM 세팅

1) 일반

2) OS

3) 시스템

 

4) 디스크

 

더보기
항목 설명 윈도우 11 추천 설정
버스/디바이스 가상 디스크를 어떤 버스(인터페이스)로 연결할지 결정합니다. SCSI가 기본이며, 고성능과 호환성 모두 좋습니다. ✅ SCSI 유지
SCSI 컨트롤러 SCSI 인터페이스를 어떤 가상 컨트롤러로 연결할지 결정합니다. VirtIO SCSI single은 최신 성능 최적화 컨트롤러입니다. ✅ VirtIO SCSI single
스토리지 디스크를 저장할 위치입니다. 예: local(파일 기반), local-lvm(LVM 기반, 빠름). 🔹local-lvm: 고속 🔹local: 스냅샷이 필요할 때
디스크 크기 (GiB) 가상 디스크의 용량을 설정합니다. 최소 64 GB 이상 권장
캐시 호스트와 게스트 간의 디스크 캐시 처리 방식. 성능·안정성에 영향. 🔹기본 (캐시 없음) → 안정성 우선🔹Write back → 성능 향상 (UPS 필요)
버퍼링 (discard) "TRIM/UNMAP" 기능 활성화 여부. 게스트에서 삭제한 공간을 호스트로 반환함. SSD에 유용. 선택 가능 (성능엔 영향 거의 없음)
IO thread 디스크 입출력을 별도 스레드로 분리 → 멀티코어 CPU일 때 성능 향상. ✅ 체크 (Windows 권장)
SSD 에뮬레이션 VM이 해당 디스크를 SSD로 인식하게 함. ✅ 체크 (SSD 기반 호스트라면)
읽기 전용 디스크를 읽기 전용으로 설정. 테스트용 환경 등에서만 사용. ❌ 비활성
백업 vzdump 백업에 포함할지 여부. ✅ 체크 유지
복제 생략 (Skip replication) HA(고가용성) 환경에서 복제하지 않음. 일반 사용자 불필요. ❌ 비활성
비동기 IO 디스크 IO 스케줄러 선택. io_uring은 최신 리눅스 비동기 IO로, 가장 효율적입니다. ✅ 기본 (io_uring) 유지

 

5) CPU

 

 

6) 메모리

- 16기가면 대략 12기가 정도 할당.

 

7) 네트워크

- 기본 옵션

 


윈도우 11 VM

1) 시작

 

 

2) 부팅

- 가만히 두면 네트워크 부팅으로 넘어가므로 아무 키나 누른다.

 

 

3) 윈도우 설치

- (저장 공간 불러오기) 드라이버 로드 - virtio-win-0.1.285 - amd6t4 - w11

 

- 네트워크 드라이버 설치 과정이 잘 안 되어서 강제 패스하고 장치관리자에서 설치할 예정.

 

 

- 쉬프트+F10 CMD 열리면 OOBE\BYPASSNRO 입력 엔터 -> 기다리면 초기 세팅으로 재진입 됨.

 

 

- 하단의 "인터넷에 연결되어 있지 않음"을 선택해서 진행.

 

4) 윈도우 진입 이후 네트워크 드라이버 설치

- 이더넷 드라이버 경로: Vitrio-win-0.1.285 드라이브 - netkvm-win11

- 설치 후 재부팅

 

- 윈도우 기본 세팅 완료

 


참고) 패스스루 관련 문서

GitHub - automation-avenue/proxmox-igpu-passthrough-n100: N12 CPU가 탑재된 Beelink S100 Pro에서 iGPU를 통과하는 방법에 대한 지침

 

GitHub - automation-avenue/proxmox-igpu-passthrough-n100: Instruction on how to pass through iGPU on Beelink S12 Pro with N100 C

Instruction on how to pass through iGPU on Beelink S12 Pro with N100 CPU - automation-avenue/proxmox-igpu-passthrough-n100

github.com

 

PCI Passthrough - Proxmox VE

 

PCI Passthrough - Proxmox VE

Introduction Note: This is a collection of examples, workarounds, hacks, and specific issues for PCI(e) passthrough. For a step-by-step guide on how and what to do to pass through PCI(e) devices, see the docs or the wiki page generated from the docs PCI pa

pve.proxmox.com

 

Proxmox VE Administration Guide

 

Proxmox VE Administration Guide

The Proxmox VE storage model is very flexible. Virtual machine images can either be stored on one or several local storages, or on shared storage like NFS or iSCSI (NAS, SAN). There are no limits, and you may configure as many storage pools as you like. Yo

pve.proxmox.com


GPU 패스스루 사전 작업

# 문서 항목 참조 (IOMMU) - PCI 패스스루 - Proxmox VE

 

PCI Passthrough - Proxmox VE

Introduction Note: This is a collection of examples, workarounds, hacks, and specific issues for PCI(e) passthrough. For a step-by-step guide on how and what to do to pass through PCI(e) devices, see the docs or the wiki page generated from the docs PCI pa

pve.proxmox.com

 

1. Proxmox 노드 재부팅 후 셸에서 IOMMU 활성화 확인

dmesg | grep -e DMAR -e IOMMU

 

1-1. IOMMU 활성화가 되지 않은 경우.

nano /etc/default/grub
# If you change this file or any /etc/default/grub.d/*.cfg file,
# run 'update-grub' afterwards to update /boot/grub/grub.cfg.
# For full documentation of the options in these files, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`( . /etc/os-release && echo ${NAME} )`
#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt intel_pstate=disable"
GRUB_CMDLINE_LINUX=""

- 저장 후 닫기: 컨트롤 O + 엔터 + 컨트롤 X

update-grub
reboot

 

 

2. IOMMU 리맵핑 활성화 확인.

- 하드웨어 가상화 기능이 완벽히 작동 중인지 확인.

- (인텔) DMAR-IR: Enabled IRQ remapping in x2apic mode 표시되어야 함.

dmesg | grep 'remapping'

 

 

3. IOMMU 그룹 확인

- Proxmox VE에서 호스트 노드의 PCI 장치 목록을 전부 표시하는 명령어

- 현재 노드에 속해있는 모든 PCI 장치 목록을 보여줌.

- 현재 그룹 0에는 그래픽 장치 외에 아무것도 속해있지 않음. 같이 묶인 장치가 없기 때문에 패스스루 성공 가능성 높음.

pvesh get /nodes/{nodename}/hardware/pci --pci-class-blacklist ""
# nodename은 본인 Node에 맞게 끔 변경


GPU 패스스루 작업 진행 1

#1. VM GPU 패스스루를 위해서는 GPU가 그룹에 단독으로 존재해야함.

#2. proxmox 호스트는 부팅 과정에서 자동으로 GPU를 로드해서 차지한다. 즉, 호스트가 GPU를 사용하고 있으니 VM에 패스스루 할 수 없게 되므로 호스트가 드라이버를 차지할 수 없게 블랙리스트에 추가해야함.

 

1. 사용 중인 커널 드라이버와 모듈 확인

- i915는 인텔 내장 GPU (Intel Integrated Graphics) 리눅스 커널 드라이버.

- i915를 우선적으로 블랙리스트에 추가해야 함.

- lspci 명령어로 "Kernel driver in use: i915" 문구 확인

lspci -nnk

 

lspci PCI 장치 목록 출력 (VGA, NIC, USB 컨트롤러 등)
-nn 장치 벤더ID:디바이스ID 형식(8086:5912)까지 출력
-k 사용 중인 커널 드라이버(kernel driver)가능한 드라이버(kernel modules) 표시
00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-N [UHD Graphics] [8086:46d1]
        Subsystem: IP3 Tech (HK) Limited Device [1e50:8023]
        Kernel driver in use: i915 <---------- 확인
        Kernel modules: i915, xe

 

 

2. i915 블랙리스트 추가

echo "blacklist i915" >> /etc/modprobe.d/blacklist.conf

 

 

3. 램디스크 업데이트

- 블랙리스트, VFIO 바인딩 등 모듈 변경 사항을 커널 초기화 시 적용하기 위한 필수 단계.

update-initramfs -u -k all
# 램디스크 갱신

 

update-initramfs initramfs(커널 초기 RAM 디스크)를 생성/업데이트하는 명령
-u update: 기존 initramfs를 업데이트
-k all all installed kernels: 설치된 모든 커널에 대해 업데이트

 

reboot

 

 

4. 현재 호스트가 사용 중인 드라이버 재확인

- 이전에는 "Kernel driver in use: i915"가 표시 되었지만 블랙리스트 추가로 로드되지 않았다.

lspci -nnk


GPU 패스스루 작업 진행 2

1. VM

- i915가 호스트에 로드되지 않은걸 확인했으니 이제 VM에 PCI 장치를 할당한다.

- 대상: Alder Lake-N (UHD Graphics)

 

- 대상: Alder Lake-N (UHD Graphics)

 

 

- 호환성을 위해 PCI-Express 체크.

 

- PCI 디바이스 추가 확인.


윈도우 VM 부팅

 

1. 장치관리자

 

- 장치관리자를 열어보면 디스플레이 어댑터가 2개가 보인다. 느낌표의 장치는 추가했던 인텔 그래픽 드라이버 장치.

- 참조한 영상에서는 디스플레이 어댑터 코드가 31번과 43번이 표시된다고 하지만 나는 "이 장치를 시작할 수 없습니다. (코드 10)"이 표시되었음. (하나는 까묵음.)

- 장치 관리자에서 Virtio 드라이브를 통해 드라이버 업데이트를 하면 에러 표시가 있는 intel(R) UHD graphics로 변경된다. 혹시 변경이 안 된다면 Windows 업데이트를 수행한다.

 

 

 

2. VM에서 사용하기 위한 Intel 내장 GPU(iGPU/Xe)의 VFIO Passthrough

- 이전의 UHD graphics 드라이버 에러 코드 대응

- VFIO Passthrough를 위한 프로젝트의 N100 ROM 파일 사용 (개조 롬파일 사용 책임은 사용자에게 있음.)

Release v2.0 build-20250622-100999 · lixiaoliu666/intel6-14rom · GitHub

 

Release v2.0 build-20250622-100999 · lixiaoliu666/intel6-14rom

build 6-14 all roms 只适用于qemu10及以上版本(不支持qemu7 8 9)ovmf+i440fx 10核显直通请看本项目说明,ovmf+q35 10请阅读此教程 https://www.bilibili.com/read/cv41702099

github.com

# Proxmox 본인 노드에서 다운로드
wget https://github.com/lixiaoliu666/intel6-14rom/releases/download/v2.0-20250622-100999/12-n100-q10.rom
# 파일 복사
cp 12-n100-q10.rom /usr/share/kvm/12-n100-q10.rom
# 디렉토리 이동
cd /etc/pve/qemu-server
# VM 설정 파일 편집
root@FB:/etc/pve/qemu-server# nano 100.conf
#추가 1) args: -set device.hostpci0.bus=pcie.0 -set device.hostpci0.addr=0x02.0 -set device.hostpci0.x-igd-gms=0x6 -set device.hostpci0.x-igd-opregion=on
#추가 2) cpu: host,hidden=1
#추가 3) hostpci0: 0000:00:02.0,pcie=1,romfile=12-n100-q10.rom,x-vga=1

agent: 1
args: -set device.hostpci0.bus=pcie.0 -set device.hostpci0.addr=0x02.0 -set device.hostpci0.x-igd-gms=0x6 -set device.hostpci0.x-igd-opregion=on
bios: ovmf
boot: order=scsi0;ide2;ide0;net0
cores: 4
#cpu: host
cpu: host,hidden=1
efidisk0: local-lvm:vm-100-disk-0,efitype=4m,pre-enrolled-keys=1,size=4M
#hostpci0: 0000:00:02.0,pcie=1
hostpci0: 0000:00:02.0,pcie=1,romfile=12-n100-q10.rom,x-vga=1
ide0: local:iso/virtio-win-0.1.285.iso,media=cdrom,size=771138K
ide2: local:iso/Win11_25H2_Korean_x64.iso,media=cdrom,size=7277782K
machine: pc-q35-10.0+pve1
memory: 8192
meta: creation-qemu=10.0.2,ctime=1760271243
name: WIN11-25H2
net0: virtio=BC:24:11:7B:C8:32,bridge=vmbr0,firewall=1
numa: 0
ostype: win11
scsi0: local-lvm:vm-100-disk-1,discard=on,iothread=1,size=64G,ssd=1
scsihw: virtio-scsi-single
smbios1: uuid=9d388022-49fb-40d8-b8b2-4b2bc37e01dc
sockets: 1
tpmstate0: local-lvm:vm-100-disk-2,size=4M,version=v2.0
vmgenid: f8ee5dd4-5bf2-44a4-bd1e-86dd7f8f809c

 

  • hostpci0 → PCI 장치(VFIO GPU)를 VM에 연결
  • romfile → Passthrough용 GPU ROM 파일 지정
  • cpu: host,hidden=1 → 호스트 CPU 그대로 사용 + VM 가상화 숨김
  • args → Intel iGPU/Xe 초기화 옵션
# 세팅 완료하면 재부팅
reboot

 

 

3. 변경 확인

 

 

4. 윈도우 부팅

- Proxmox 콘솔에서 윈도우 표시가 안 된다면 일단 패스스루 1차 성공.

- Proxmox 내부 콘솔 사용 불가하므로 모니터의 HDMI 전환을 통해 구동 확인 필요.

- GPU 패스스루에 성공하면 화면은 나오지만 키보드 마우스가 인식이 안 된다.


사용 할 USB 장치 패스스루

- 윈도우 VM에 키보드와 마우스를 다이렉트 연결해도 인식이 안 된다.

- 기본적으로 USB 장치도 HOST에서 잡혀 있기 때문에 사용하려는 VM에 패스스루 시켜주어야 한다.

 

1. USB 장치 식별자 확인

# USB 장치 식별자 확인
root@FB:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 007: ID 046a:0011 CHERRY G83 (RS 6000) Keyboard <----------- 키보드
Bus 003 Device 008: ID 260d:1115 Compx 2.4G Wireless Receiver <------------ 마우스
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

 

2. USB 장치

- USB 장치를 VM에 패스스루

- USB 장치 슬롯명은 다르게 설정. (usb0, usb1, ...)

# 특정 USB 장치를 VM에 Passthrough
# qm set <VMID> -usb0 host=식별자:식별자

root@FB:~# qm set 100 -usb0 host=046a:0011
update VM 100: -usb0 host=046a:0011

root@FB:~# qm set 100 -usb1 host=260d:1115
update VM 100: -usb1 host=260d:1115

 

 

 

3. 결과 확인.

 


기타

1. USB 2.0 허브 연결

- 허브도 인식시켜줌.

root@FB:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 046a:0011 CHERRY G83 (RS 6000) Keyboard
Bus 003 Device 003: ID 260d:1115 Compx 2.4G Wireless Receiver
Bus 003 Device 004: ID 8087:0026 Intel Corp. AX201 Bluetooth
Bus 003 Device 005: ID 214b:7250 Huasheng Electronics USB2.0 HUB <----------
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
# qm set 100 -usb2 host=214b:7250


root@FB:~# qm set 100 -usb2 host=214b:7250

 

 

2. KVM 스위치 연결

- KVM을 마지막으로 사용할 USB 장치들 연결 완료하였고 스위치로 N100과 주 PC 왔다갔다 하는 중.

root@FB:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 020: ID 1a40:0101 Terminus Technology Inc. Hub <----------
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
root@FB:~# qm set 100 -usb3 host=1a40:0101
update VM 100: -usb3 host=1a40:0101

 

 

 

3. 에러

- 부팅하면 모자이크로 깨져 보일 때가 있는데 proxmox에서 해당 윈도 VM 재부팅 해주면 정상 부팅됨. (해결방법 몰루..)

 

- (제미나이 왈) 이 문제는 VM을 완전히 종료했다가 다시 시작(Power-on)할 때 그래픽 카드 하드웨어가 제대로 초기화되지 않아 발생하는 현상으로, iGPU 패스스루를 사용하는 여러 Intel 플랫폼에서 흔히 보고됩니다.

재부팅(Reboot) 시에는 정상 작동하는 것은, 재부팅 과정에서 iGPU가 필요한 리셋 단계를 우연히 성공적으로 거치기 때문입니다. 하지만 완전 종료 후에는 해당 리셋이 실패하면서 모자이크(체커보드)와 같은 비정상적인 화면 출력이 발생하는 것입니다.

 

(해결 안됨)  다음 두 가지 파라미터를 반드시 추가해야 합니다. 

  1. initcall_blacklist=sysfb_init: 호스트가 iGPU를 통해 프레임 버퍼를 초기화하는 것을 방지합니다. (Intel iGPU 패스스루에서 매우 중요한 설정입니다.)
  2. video=efifb:off: EFI 프레임 버퍼 사용을 명시적으로 비활성화하여, iGPU가 VM에게 완전히 넘겨지도록 돕습니다.

수정 제안:

/etc/default/grub 파일을 열어 GRUB_CMDLINE_LINUX_DEFAULT 라인을 다음과 같이 수정하세요.

# 수정 전
# GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt intel_pstate=disable"

# 수정 후
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt intel_pstate=disable initcall_blacklist=sysfb_init video=efifb:off"

 

여전히 해결 안됨.


후기 1

사실상 따라하는 수준이었지만 하루를 꼬박 지샜다. 2가지 부분에서 막혔는데 첫번째는 GPU 패스스루에서 아무리 해도 기본 디스플레이 어댑터가 UHD 그래픽스로 변경이 안 되더라. 그런데 윈도우 업데이트가 완료되고 나니까 그냥 바로 올라가서 허무했던 게 첫번째. 두 번째는 KVM 스위치가 잡히지 않아서 정말 오래 걸렸는데 알고 보니 스위치 인터페이스를 1번을 인식시켜놓고 2번을 활성화하는 바람에 인식이 안 된거였음.

 

후기 2

일단 설정해보니 내부 콘솔이나 RDP로만 사용했던 때와는 달리 이제는 GPU 가속이 되니까 속도 면에서 빠릿빠릿해서 시원하다. 버벅이지도 않고. 마우스 커서도 잘 따라오고 유튜브 4K 재생도 잘 된다. 간단한 게임도 가능하겠다.

 

후기 3

혹시 몰라서 세팅해둔 것이지만 전체적인 세팅도 귀찮기도 하고. 일단 N100 수준에서 굳이 GPU 가속이 필요한가 고민해봐야함. 

+ Recent posts