여러분, 저의 '왕초보 친화적' 튜토리얼 시리즈의 첫 번째 편에 오신 것을 환영합니다! 이 가이드에서는 Proxmox 가상 머신 게스트를 위한 GPU 패스스루 설정 과정을 안내해 드릴 것입니다. 이 가이드는 가상화, 특히 Proxmox 사용자 초보자들을 대상으로 합니다. 가상 머신에 GPU(또는 여러 개의 GPU)를 패스스루하는 전반적인 가이드로 작성되었습니다. 모든 것을 다루는 철저한 방법 안내서는 아니지만, 패스스루 과정의 시작부터 끝까지 필요한 모든 자료와 출처를 제공하기 위해 최선을 다할 것입니다. 만약 무언가 제대로 작동하지 않는다면, /r/Proxmox, /r/Homelab, /r/VFIO, 또는 /r/linux4noobs 커뮤니티에서 추가적인 도움을 받으세요.
이 가이드는 Reddit, 공식 포럼, 그리고 다른 개인 사용자 가이드(제가 여러분을 돕기 위해 길을 찾는 데 도움을 준) 등 환상적인 온라인 Proxmox 커뮤니티 없이는 불가능했을 것입니다. 제가 출처를 누락했다면, 알려주세요! 여러분의 노고에 감사드립니다.
GPU 패스스루를 시작하기 전에 모든 하드웨어/소프트웨어 설정을 기록해 두는 것이 중요합니다. 참고를 위해 제가 사용하고 있는 하드웨어와 소프트웨어를 나열하겠습니다. 이 가이드는 특정 하드웨어/소프트웨어 구성에서 동일하게 작동하지 않을 수 있으며, 오직 Proxmox의 GPU 패스스루에 대한 전반적인 이해와 기본 설정을 돕기 위한 것입니다.
이 가이드는 여러분이 이미 서버에 Proxmox를 설치하고 웹 GUI에 로그인할 수 있으며, 서버 노드의 셸 터미널에 접근할 수 있다고 가정합니다. 기본 Proxmox 설치에 도움이 필요하다면, 공식 "시작하기" 가이드와 공식 YouTube 가이드를 적극 추천합니다.
Intel CPU를 사용한다고 가정하고, Proxmox 서버에 직접 SSH로 접속하거나, "노드" 아래의 noVNC 셸 터미널을 이용하여 /etc/default/grub 파일을 엽니다. 저는 nano를 선호하지만, 여러분이 선호하는 텍스트 편집기를 사용해도 됩니다.
그리고 아래와 같이 변경합니다:
Intel CPU의 경우:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
AMD CPU의 경우:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
중요 추가 명령어
패스스루가 실패할 경우, 이 줄에 추가 명령어를 더해야 할 수도 있습니다. 예를 들어, 저와 비슷한 CPU(Xeon E3-12xx 시리즈)를 사용하고 있거나, IOMMU 그룹화 기능이 좋지 않거나, 단일 GPU를 패스스루하려는 경우입니다.
이 추가 명령어들은 기본적으로 Proxmox가 존재하는 GPU를 자체적으로 사용하지 않도록 하고, 각 PCI 장치를 자체 IOMMU 그룹으로 분리하는 데 도움을 줍니다. 이는 매우 중요합니다. 왜냐하면 만약 IOMMU 그룹 1에 있는 GPU를 사용하려고 하는데, 그룹 1에 CPU도 함께 그룹화되어 있다면 GPU 패스스루가 실패하기 때문입니다. 다음은 저의 grub 명령어 라인 설정입니다:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb nomodeset video=vesafb:off,efifb:off"
이 명령어들이 무엇을 하고 어떻게 도움이 되는지에 대한 추가 정보:
A. 프레임버퍼 비활성화하기: video=vesafb:off,efifb:off
B. IOMMU 그룹을 위한 ACS Override: pcie_acs_override=downstream,multifunction
/etc/default/grub 편집을 마쳤으면 이 명령어를 실행하세요:
update-grub
2단계: VFIO 모듈
Proxmox 시스템에 몇 가지 VFIO 모듈을 추가해야 합니다. 다시 nano(또는 다른 편집기)를 사용하여 /etc/modules 파일을 편집합니다.
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
그런 다음 저장하고 종료합니다.
3단계: IOMMU 인터럽트 리매핑
이 부분에 대해 너무 깊게 들어가지는 않겠습니다. 셸에서 다음 명령어를 실행하기만 하면 됩니다:
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf
4단계: 드라이버 블랙리스트에 추가하기
Proxmox 호스트 시스템이 우리 GPU를 사용하지 않도록 드라이버를 블랙리스트에 추가해야 합니다. 셸에서 다음 명령어를 실행하세요:
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
5단계: VFIO에 GPU 추가하기
다음 명령어를 실행하세요:
lspci -v
셸 창에 많은 내용이 출력될 것입니다. 비디오 카드를 보여주는 줄을 찾으세요. 다음과 비슷하게 보일 겁니다:
01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1070] (rev a1) (prog-if 00 [VGA controller]) 01:00.1 Audio device: NVIDIA Corporation GP104 High Definition Audio Controller (rev a1)
첫 번째 숫자 세트(예: 01:00.0과 01:00.1)를 기록해 두세요. 다음 단계에서 필요합니다.
아래 명령어를 실행하세요. 01:00을 이전 명령어 실행 시 GPU 옆에 있던 숫자로 교체하세요:
lspci -n -s 01:00
이렇게 하면 GPU 카드의 벤더 ID가 출력됩니다. 보통 GPU용 ID 하나와 오디오 버스용 ID 하나입니다. 다음과 비슷하게 보일 겁니다:
01:00.0 0000: 10de:1b81 (rev a1)
01:00.1 0000: 10de:10f0 (rev a1)
우리가 필요한 것은 이 벤더 ID 코드들입니다: 10de:1b81과 10de:10f0.
이제 GPU의 벤더 ID를 VFIO에 추가합니다 (id를 자신의 것으로 교체하는 것을 잊지 마세요!):
echo "options vfio-pci ids=10de:1b81,10de:10f0 disable_vga=1"> /etc/modprobe.d/vfio.conf
마지막으로, 이 명령어를 실행합니다:
update-initramfs -u
그리고 재시작합니다:
reset
이제 Proxmox 호스트가 GPU를 패스스루할 준비가 되었습니다!
VM (Windows 10) 설정하기
이제 '재미있는' 부분입니다. 저는 제대로 설정하기까지 수많은 다른 구성 시도를 거쳤습니다. 저의 고통이 여러분에게 이득이 되어, 처음부터 제대로 일을 처리하는 데 도움이 되기를 바랍니다.
1단계: VM 만들기
가상 머신 만들기는 꽤 쉽고 자명하지만, 문제가 있다면 공식 Proxmox Wiki와 How-To 가이드를 찾아보는 것을 추천합니다.
이 가이드를 위해서는 가상 머신용 Windows ISO가 필요합니다. ISO 파일을 Proxmox로 직접 다운로드하는 유용한 가이드 가 여기 있습니다.
모든 .ISO 파일(아래에서 언급할 VirtIO 드라이버 ISO 파일 포함)을 Proxmox의 적절한 저장소 폴더에 복사해야 합니다.
예시 메뉴 화면
일반 => OS => 하드 디스크 => CPU => 메모리 => 네트워크 => 확인
중요: 아직 VM을 시작하지 마세요
이 가이드를 따르고 VirtIO를 사용한다면, VirtIO(SCSI)를 사용하여 Windows 10을 설치하기 위해 이 VirtIO 드라이버 ISO 파일이 CD-ROM으로 마운트되어야 합니다.
CD-ROM의 경우, IDE나 SATA를 사용해도 괜찮습니다. VM 생성을 마친 후 옵션 탭에서 CD-ROM이 기본 부팅 장치로 선택되었는지 확인하세요. 또한, 하드 디스크와 네트워크 어댑터에 VirtIO 블록이 아닌 VirtIO(SCSI)를 선택했는지 확인해야 합니다.
2단계: VM에 OMVF (UEFI) 활성화하기
VM의 옵션 탭/창 에서 다음과 같이 설정하세요:
잊지 마세요: BIOS를 SeaBIOS(기본값)에서 OMVF(UEFI)로 변경하면, Proxmox가 EFI 디스크를 추가하라는 메시지를 표시할 것입니다. 그러면 하드웨어 탭/창 으로 가서 추가 > EFI 디스크 를 선택하여 추가합니다.
3단계: VM 구성 파일 편집하기
셸 창으로 돌아가서 /etc/pve/qemu-server/<vmid>.conf를 편집해야 합니다. <vmid>는 VM 생성(일반 탭) 시 사용한 VM ID 번호입니다.
nano /etc/pve/qemu-server/<vmid>.conf
편집기에서 다음 명령어 라인들을 추가합니다 (어디에 추가하든 상관없지만, 새 줄에 있어야 합니다. 저장하면 Proxmox가 알아서 정리해 줍니다):
machine: q35 cpu: host,hidden=1,flags=+pcid
args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=NV43FIX,kvm=off'
저장하고 편집기를 종료합니다.
4단계: PCI 장치 (GPU)를 VM에 추가하기
VM의 하드웨어 탭/창 에서 상단에 있는 추가 버튼을 클릭합니다. 그런 다음 드롭다운 메뉴에서 PCI 장치 를 클릭합니다.
목록에서 GPU를 찾아 선택합니다. PCI 옵션 화면에서는 다음과 같이 설정하면 됩니다:
다음은 VM 생성을 마쳤을 때 하드웨어 탭/창이 어떻게 보여야 하는지에 대한 예시 이미지입니다.
이런, '모든 기능'이 체크되어 있는지 확인하세요.
4단계a (선택 사항): ROM 파일 문제
만약 마지막에 일이 제대로 풀리지 않는 경우, 이 단계로 돌아와 GPU의 ROM 파일을 지정해야 할 수도 있습니다.
이것은 그 자체로 하나의 과정이며, 아래에 설명된 몇 가지 추가 단계가 필요합니다.
4단계a1:
GPU의 ROM 파일 다운로드하기 https://www.techpowerup.com/vgabios/
또는
GPU의 ROM 파일 덤프하기:
cd /sys/bus/pci/devices/0000:01:00.0/
echo 1 > rom
cat rom > /usr/share/kvm/<GPURomFileName>.bin
echo 0 > rom
ROM 파일 덤프의 다른 방법:
a. GPU-Z 사용 (권장) https://nvidia.custhelp.com/app/answers/detail/a_id/4188/~/extracting-the-geforce-video-bios-rom-file
b. NVFlash 사용 https://www.overclock.net/forum/69-nvidia/1523391-easy-nvflash-guide-pictures-gtx-970-980-a.html
4단계a2: (다운로드했다면) ROM 파일을 /usr/share/kvm/ 디렉토리로 복사합니다.
이를 위해 SFTP를 사용하거나, Windows의 명령 프롬프트를 통해 직접 할 수 있습니다:
scp /path/to/<romfilename>.rom myusername@proxmoxserveraddress:/usr/share/kvm/<romfilename>.rom
4단계a3: VM 구성 파일에 ROM 파일을 추가합니다 (예시):
hostpci0: 01:00,pcie=1,romfile=<GTX1050ti>.rom
NVIDIA 사용자: 여전히 문제가 발생하거나 ROM 파일 자체가 문제를 일으킨다면, ROM 파일을 패치해야 할 수도 있습니다 (특히 NVIDIA 카드의 경우). GTX 10XX 시리즈 카드를 패치하는 훌륭한 도구가 여기에 있습니다: https://github.com/sk1080/nvidia-kvm-patcher 그리고 여기 https://github.com/Matoking/NVIDIA-vBIOS-VFIO-Patcher . 하지만 10XX 시리즈에서만 작동합니다. 더 오래된 카드를 가지고 있다면, 헥스 에디터를 사용하여 ROM 파일을 수동으로 패치해야 하며, 이는 이 튜토리얼 가이드의 범위를 벗어납니다.
Windows 10 설치 전, 하드웨어 탭/창의 예시
5단계: VM을 시작하세요!
이제 거의 다 왔습니다! VM을 시작하면, VM 탭 아래의 noVNC / 셸 탭/창을 열고 Windows 설치 프로그램이 부팅되는 것을 볼 수 있습니다. 이 시점에서 실수가 쉬우니 과정을 빠르게 살펴봅시다.
최종 설정: Windows 10 설치 / 구성
지금까지 가이드를 따랐고 VirtIO SCSI를 사용하고 있다면, Windows 10 설치 중에 하드 드라이브를 찾으려고 할 때 문제가 발생할 것입니다. 걱정 마세요!
1단계: VirtIO 드라이버 설치
간단히 VM의 하드웨어 탭/창 으로 다시 가서, CD-ROM 드라이브 파일(현재 Windows 10 ISO가 로드되어 있어야 함)을 더블 클릭하고, ISO 이미지를 VirtIO ISO 파일로 전환합니다.
noVNC 셸 창으로 다시 탭하여, 찾아보기 를 클릭하고, 새로 로드된 VirtIO CD-ROM 드라이브를 찾아 vioscsi > w10 > amd64 하위 디렉토리로 이동합니다. 확인 을 클릭합니다.
이제 Windows 설치 프로그램이 하드 드라이브용 Red Hat VirtIO SCSI 드라이버를 로드할 것입니다. 드라이브에 설치를 시작하기 전에, 다시 VirtIO CD-ROM으로 가서 NetKVM > w10 > amd64 하위 디렉토리에서 네트워크 어댑터 VirtIO 드라이버도 설치하세요.
중요 #1: VM 하드웨어 > CD-ROM에서 ISO 파일을 VirtIO ISO 이미지에서 Windows 설치 프로그램 ISO 이미지로 다시 전환하는 것을 잊지 마세요.
CD-ROM 드라이브를 Windows 설치 프로그램 ISO로 다시 변경했으면, 셸 창으로 돌아가 새로 고침 을 클릭합니다. 그러면 설치 프로그램이 VM의 하드 디스크를 표시하고 Windows를 설치할 준비가 될 것입니다. Windows 설치를 완료하세요.
중요 #2: Windows가 재시작을 요청하면, VM을 마우스 오른쪽 버튼으로 클릭하고 **'중지'**를 누릅니다. 그런 다음 VM의 하드웨어 탭/창 으로 가서 CD-ROM 드라이브에서 Windows ISO를 마운트 해제 합니다. 이제 VM을 다시 **'시작'**합니다.
2단계: Windows 원격 데스크톱 활성화
모든 것이 순조롭게 진행되었다면, 이제 Windows 10 VM 화면을 볼 수 있을 것입니다! 잠시 후 Proxmox의 noVNC / 셸 접근을 비활성화할 것이므로, 어떤 형태의 원격 데스크톱 접근을 활성화하는 것이 중요합니다. 저는 Windows 내장 원격 데스크톱 클라이언트를 선호합니다. RDP 접근을 활성화하는 간단하고 훌륭한 튜토리얼이 여기 있습니다.
참고: Windows VM에 있는 동안, VM의 사용자 이름, 내부 IP 주소 및/또는 컴퓨터 이름을 기록해 두세요.
3단계: Proxmox noVNC / 셸 접근 비활성화
GPU 드라이버를 설치하기 전에 모든 것이 제대로 구성되었는지 확인하기 위해, Windows VM에 나타나는 내장 비디오 디스플레이 어댑터를 비활성화하려고 합니다. 이를 위해 VM의 하드웨어 탭/창 으로 가서, 디스플레이 항목 아래에서 드롭다운 목록에서 **없음(none)**을 선택하면 됩니다. 쉽죠. 이제 가상 머신을 **'중지'**하고 **'시작'**합니다.
참고: 원격 데스크톱을 통해 VM에 (재)연결할 수 없는 경우(주어진 내부 IP 주소나 컴퓨터 이름 / 호스트 이름 사용), VM의 하드웨어 탭/창 으로 돌아가서 GPU의 PCI 장치 설정에서 주 GPU 를 체크하세요. 저장한 다음, VM을 다시 **'중지'**하고 **'시작'**합니다.
4단계: GPU 드라이버 설치하기
마침내, 거의 다 끝났습니다. 마지막 단계는 GPU의 비디오 카드 드라이버를 설치하는 것입니다. 이 튜토리얼에서는 NVIDIA를 사용하고 있으므로, http://nvidia.com으로 가서 특정 GPU 모델의 드라이버(이 경우, GTX 10XX 시리즈)를 찾으면 됩니다. 이 작업을 하는 동안, 저는 Windows의 장치 관리자 (제어판 아래)를 확인하여 누락된 VirtIO 드라이버가 있는지, 그리고/또는 GPU에서 코드 43 오류 가 발생하는지 확인하는 것을 좋아합니다. GPU에서 코드 43 오류를 볼 가능성이 높으며, 이것이 우리가 드라이버를 설치하는 이유입니다. 누락된 VirtIO('알 수 없는 장치'로 표시되며 노란색 느낌표가 있음)가 있다면, VM의 하드웨어 탭/창 으로 돌아가 VirtIO ISO 파일을 CD-ROM 드라이브에 마운트하는 단계를 반복한 다음, Windows의 장치 관리자에서 알 수 없는 장치의 드라이버를 추가/업데이트할 때 CD-ROM 드라이브를 가리키도록 하면 됩니다.
때로는 일반 NVIDIA 드라이버를 설치하는 것만으로도 오류(드라이버를 설치할 수 없다는 내용)가 발생할 수 있습니다. 이 경우, NVIDIA의 형편없는 GeForce Experience™ 설치 프로그램을 사용하여 설치해야 합니다. 계정을 만들어야 하는 등 번거롭지만, 그 후에는 드라이버 설치가 잘 될 것입니다.
축하합니다!
한두 번 재부팅하면, 이제 Windows VM에 NVIDIA 제어판이 설치된 것을 볼 수 있고, 장치 관리자에서도 GPU에 코드 43 오류가 없는 것을 확인할 수 있을 것입니다. 스스로를 칭찬하고, 팔짝팔짝 뛰어보고, 케이크를 주문하세요! 해냈습니다