Windows 11 Single GPU Passthrough Rehberi
Yıllardır Linux'a bazı Windows oyunlarını ya da programlarını oynamadığınız için geçmiyor olabilirsiniz. Ya da Linux kullanıyorsunuz ama bazı Windows programlarına hızlı bir şekilde erişmek istiyor olabilirsiniz.
Bunun bir çözümü sanal makine ama sanal makinede ekran kartımızı kullanamadığımız için oyunlar ya da yazılımlar hızlı çalışmıyor.
Ama size ekran kartınızı sanal makinede kullanabileceğinizi söylesem?
Bu rehberde sizlere ekran kartınızı sanal makineye nasıl aktarabileceğinizi ve bu sayede istediğiniz bütün Windows uygulamaları ve oyunlarına erişebileceğinizi anlatacağım.
Öncelikle birkaç uyarı:
- Bu rehber teknik bir rehberdir ve yeni başlayanlara önerilmez. Elimden geldiğince basitleştirerek anlatmaya çalışacağım ama süreç içerisinde hatayla karşılaşmanız olası. Bu rehberde hata ayıklamayı da göstereceğim ve hata ayıklamayla uğraşamam diyorsanız bu videoyu kapatın. Sonra teknik anlatım var diye bana kızmayın.
- Bu rehberde tek ekran kartlı sistemlerde ekran kartını sanal makineye aktarmayı göstereceğim ve bir ekran kartı maalesef sadece bir işletim sistemine bağlı olabilir. Dolayısıyla aşamaları tamamlayıp sanal makinenizi başlattığınızda Linux makinenizin kontrolünü kaybedeceksiniz ama Windows sanal makinenizi kapatır kapatmaz hemen Linux sisteminize geri döneceksiniz. Eğer ki çift ekran kartınız varsa başka rehberlerle bu durumu aşabilirsiniz.
- Valorant ve League of Legends oynamak için bunu takip ediyorsanız üzgünüm Vanguard sanal makineye GPU aktarsanız bile çalışmıyor. Önceden çalışıyordu ama sonra bunu engellediler. Ama Riot oyunları dışında her şeyi oynayabilmeniz lazım. Xbox Gamepass oyunları da dahil.
- Son uyarımızsa Riot games dışındaki bütün oyunlar çalışsa da anti cheat koruması olan oyunlar sanal makine konusunda genelde pek açık değiller. Bugüne kadar sanal makineden dolayı banlanan kimseyi duymadık, dolayısıyla içiniz rahat olsun ama ileride %100 böyle olacağı anlamına gelmez.
Bu rehber RisingPrismTV'nin ana rehberinden büyük ölçüde esinlenerek yazılmıştır ve Türkçeleştirilmiştir.
Gereksinimler
- Ekran kartınızın UEFI desteklemesi lazım. Desteklemiyorsa bu işlemi yapamazsınız.
- İşletim sisteminizin UEFI modunda yüklenmiş olması lazım.
- İşlemcinizin sanallaştırmayı destekliyor olması lazım.
1 - IOMMU Aktifleştirme
Ana makinemizdeki cihazları misafire aktarabilmek için IOMMU teknolojisini aktifleştirmemiz gerekli.
Öncelikle BIOS ayarlarında IOMMU'yu aktif etmeniz gerekli.
Ardından /etc/default/grub
dosyasını düzenleyeceğiz.
GRUB_CMDLINE_LINUX_DEFAULT=
yazan kısma AMD için "amd_iommu=on iommu=pt"
Intel için intel_iommu=on
yazısını ekliyoruz.
Örnek olarak benim ayar dosyam:
![](https://yusufipek.me/content/images/2024/06/image-39.png)
NOT: NVIDIA kısmı önemli değil. Onlar önceden vardı.
Ardından grub update komutunu çalıştırarak GRUB ayarlarımızı güncellememiz gerekli. Bunu yapmak dağıtımdan dağıtıma farklı.
Ubuntu/Mint/Debian'da sudo update-grub
Arch'ta sudo grub-mkconfig -o /boot/grub2/grub.cfg
Fedora'da sudo grub2-mkconfig -o /boot/grub2/grub.cfg
ile yapabilirsiniz.
Dağıtımınız farklıya GRUB güncelleme komutunu aratınız.
GRUB değil de systemd-boot kullanıyorsanız da /boot/efi/loader/entries/
kısmından .conf uzantılı dosyanızı bulup options kısmına yukarıdaki komutları gireceksiniz ve ardından sudo bootctl update
komutunu çalıştıracaksınız.
Bu işlemlerin ardından bilgisayarınızı yeniden başlatmanız gerekli!
2 - IOMMU Grupları
Bu adımda ekran kartımızı içeren IOMMU grubuna bakacağız. Ekran kartınız hangi IOMMU grubundaysa oradaki her ögeyi sanal makineye eklemeniz şart.
#!/bin/bash
shopt -s nullglob
for g in /sys/kernel/iommu_groups/*; do
echo "IOMMU Group ${g##*/}:"
for d in $g/devices/*; do
echo -e "\t$(lspci -nns ${d##*/})"
done;
done;
Bu scripti çalıştırdığınızda bütün IOMMU gruplarını listeleyecek.
Benim ekran kartımın olduğu IOMMU grubu:
IOMMU Group 12:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA104 [GeForce RTX 3060 Ti GDDR6X] [10de:24c9] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GA104 High Definition Audio Controller [10de:228b] (rev a1)
Yani ben 01:00.0 ve 01:00.1 cihazını sanal makineme eklediğimde işlem tamam olacak.
Eğer ki sizde bu durum bir grup değil de iki grupsa örneğin:
IOMMU Group 8:
00:1f.0 ISA bridge [0601]: Intel Corporation B85 Express LPC Controller [8086:8c50] (rev 05)
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] [10de:1c03] (rev a1)
00:1f.2 SATA controller [0106]: Intel Corporation 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] [8086:8c02] (rev 05)
00:1f.3 SMBus [0c05]: Intel Corporation 8 Series/C220 Series Chipset Family SMBus Controller [8086:8c22] (rev 05)
IOMMU Group 9:
01:00.1 Audio device [0403]: NVIDIA Corporation GP106 High Definition Audio Controller [10de:10f1] (rev a1)
O zaman hem grup 8 hem de 9'daki bütün ögeleri sanal makineye aktarmanız gerekecek.
Ayrıca anakartınızın ses kontrolcüsünü içeren IOMMU grubunu da not alın. Böylece Windows makinemizde ses sorunu yaşamayacağız. Benim için bu grup 11:
IOMMU Group 11:
00:1f.0 ISA bridge [0601]: Intel Corporation Device [8086:7a87] (rev 11)
00:1f.3 Audio device [0403]: Intel Corporation Alder Lake-S HD Audio Controller [8086:7ad0] (rev 11)
00:1f.4 SMBus [0c05]: Intel Corporation Alder Lake-S PCH SMBus Controller [8086:7aa3] (rev 11)
00:1f.5 Serial bus controller [0c80]: Intel Corporation Alder Lake-S PCH SPI Controller [8086:7aa4] (rev 11)
Şimdilik kenara not alın bu işlemi ilerleyen adımlarda yapacağız.
3 - Libvirt Kurulumu
Gerekli sanallaştırma ayarlarını yaptıktan sonra şimdi de sanallaştırmayı yapacak olan uygulamaları yükleyip ayarlamamız gerekiyor. Kendi dağıtımınıza göre aşağıdaki paketleri indirin.
Ubuntu, Mint, Pop_OS ve Debian tabanlı dağıtımlar: sudo apt install qemu-system-x86 libvirt-clients libvirt-daemon-system libvirt-daemon-config-network bridge-utils virt-manager ovmf
Arch Linux tabanlı dağıtımlar: sudo pacman -S virt-manager qemu vde2 ebtables iptables-nft nftables dnsmasq bridge-utils ovmf
Fedora tabanlı dağıtımlar: sudo dnf install @virtualization
OpenSuse: sudo zypper in libvirt libvirt-client libvirt-daemon virt-manager virt-install virt-viewer qemu qemu-kvm qemu-ovmf-x86_64 qemu-tools
3.1 Libvirt ve Virt-Manager'ı Ayarlama
3.1.1 libvirtd.conf
İlk olarak /etc/libvirt/libvirtd.conf
dosyasını düzenlememiz gerekli. Burada isteğinize bağlı olarak vim, nano veya nvim terminal metin editörlerini kullanabilirsiniz. Kolay olması açısından rehberde nano'yu baz alacağım.
sudo nano /etc/libvirt/libvirtd.conf
Grafik editörlerini kullanırsanız izin sıkıntılarıyla karşılaşabilirsiniz.
3.1.2 Okuma Yazma izinleri ve grup
Aşağıdaki satırlardan # karakterini silin.
unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"
3.1.3 Hata Ayıklama ve Kayıt Tutma
ÖNEMLİ: Karşılaşacağınız sorunları anlamak ve çözmek için bu satırları eklemeniz elzem!
Dosyanın sonuna aşağıdaki satırları ekleyin.
log_filters="3:qemu 1:libvirt"
log_outputs="2:file:/var/log/libvirt/libvirtd.log"
3.1.4 Kendinizi Libvirt Grubuna Ekleyin
Libvirt ile izin sorunu yaşamamak için kendinizi gruba eklemeniz gerekli.
sudo usermod -a -G kvm,libvirt $(whoami)
Daha sonrasında servisi başlatalım.
sudo systemctl enable --now libvirtd
Libvirt grubunda olup olmadığınızı aşağıdaki komutla doğrulayın.
sudo groups $(whoami)
3.2 qemu.conf
Bir diğer düzenleyeceğimiz ayar dosyasıysa qemu.conf
sudo nano /etc/libvirt/qemu.conf
518 ve 524. satırdaki # karakterini kaldırın.
user = "root"
group = "root"
root
yazısını kullanıcı adınızla değiştirin.
user = "kullanıcı adın"
group = "kullanıcı adın"
Daha sonrasında libvirt'ü yeniden başlatın.
sudo systemctl restart libvirtd
3.2.1 Sanal Makine Ağını Varsayılan Başlatmak
Bilgisayarınızı her açtığınızda sanal makine ağını başlat uyarısıyla karşılaşmak istemiyorsanız aşağıdaki komutu girin.
sudo virsh net-autostart default
4 - Virt Manager'ı Ayarlama ve Windows'u Yükleme
Şimdi sıra Windows'u yüklemeye geldi.
4.1 Gerekli Dosyalar
En son çıkan Virtio ISO dosyasını indirmelisiniz.
İsteğe bağlı Windows 10 veya Windows 11 resmi sitelerinden ISO dosyasını indirebilirsiniz
4.2 Sanal Makine Kurulumu
İlk olarak, Sanal Makine Yöneticisi penceresinin sol üst köşesindeki "Makine oluştur" düğmesine tıklayın. Varsayılan olarak sizden bir yükleme medyası seçmenizi isteyecek, açılan menüden ISO dosyasını seçin ve sistem türünü aşağıda otomatik olarak algılaması gerekir. Algılamazsa sistem türünüzü yazın.
![](https://yusufipek.me/content/images/2024/06/image-40.png)
Disk boyutu için Windows 10 kullanıyorsanız en az 50, Windows 11 kullanıyorsanız en az 128 GB yazmalısınız.
![](https://yusufipek.me/content/images/2024/06/image-43.png)
Bir sonraki ekranda RAM belirliyoruz. Bütün RAM'inizi sanal makineye vermeyin, bilgisayarınız çöker. Ana makinenizde 1 ila 3 GB arası bir RAM bırakmanız tavsiye edilir.
![](https://yusufipek.me/content/images/2024/06/image-44.png)
Özet kısmında "Customize configuration before install" tikini işaretleyin.
![](https://yusufipek.me/content/images/2024/06/image-45.png)
Bundan sonraki ayarlar için, her adımdan sonra sağ alttaki "Uygula" düğmesine basmayı unutmayın.
Şimdi, VM genel ayarlarınızda, Genel Bakış sekmesindesiniz. Bu sekmede, en altta, yonga setini "Q35" olarak ayarlayın. Dağıtımınıza bağlı olarak bir UEFI ürün yazılımı seçin, adlar değişebilir ancak her zaman "OVMF_.fd" veya "ovmf-.bin" ile biter.
![](https://yusufipek.me/content/images/2024/06/image-46.png)
Windows 11 kullanıyorsanız sec-boot ile biteni tercih etmelisiniz.
![](https://yusufipek.me/content/images/2024/06/image-47.png)
CPU sekmesine gidin. "Copy host CPU configuration" tikini işaretleyip "Topology'i genişletin. "Manually set CPU topology" tikini işaretleyin ve CPU'nuza bağlı olarak ayarı değiştirin. İşlemciniz hakkında daha fazla CPU için lscpu
komutunu çalıştırabilirsiniz.
![](https://yusufipek.me/content/images/2024/06/image-48.png)
Ardından, "Disk 1" sürücüsünü seçin. "Disk bus'ı" VirtIO olarak ayarlayın. "Advanced Options'ı" açın ve "Cache mode'u" seçeneğini "writeback" olarak ayarlayın.
![](https://yusufipek.me/content/images/2024/06/image-49.png)
"Boot Options" sekmesine gidin "SATA CDROM 1'in" seçili olduğundan ve ilk pozisyonda olduğundan emin olun. Bu Windows 10 veya Windows 11 ISO dosyanız.
![](https://yusufipek.me/content/images/2024/06/image-50.png)
Sol alttan "Add Hardware" seçeneğine tıklayıp "Device Type'ı" CD-ROM device olarak değiştirin ve daha önceden indirdiğiniz VirtIO ISO dosyanızı seçin. Boot options'ta Sata CD-Rom 2'nin tikli olduğuna emin olun ama birinci sırada olmasın. Bu da VirtIO sürücülerimizi yüklememize yardımcı olacak
Son olarak network sekmesine gelip sürücü modelini Virtio olarak seçin. Link state işaretini kaldırın, bu tik sanal makineye internet erişimini kesecektir. İnternet olmadan yükleme yapmak Windows'ta genelde daha sağlıklı oluyor.
![](https://yusufipek.me/content/images/2024/06/image-51.png)
Not: Windows 11 kullanıyorsanız sanal TPM eklemelisiniz. Bunun için sisteminizde swtpm paketinin kurulu olması gerekli.
![](https://yusufipek.me/content/images/2024/06/image-65.png)
4.3 Windows Kurulumu
Henüz GPU'yu sanal makineye eklemediğimizi fark etmişsinizdir. GPU'yu eklemeden önce Windows kurulumunu tamamlamamız gerekiyor.
![](https://yusufipek.me/content/images/2024/06/image-52.png)
Disk seçme ekranında diskimizin görünmediğini fark edeceksiniz çünkü VirtIO sürücüleri yüklü değil. Aşağıdaki load driver seçeneğine tıklayıp ISO dosyamızdan gerekli sürücüyü kuruyoruz.
![](https://yusufipek.me/content/images/2024/06/image-53.png)
Eğer Windows 11 kullanıyorsanız w11 yazan klasörü seçin.
![](https://yusufipek.me/content/images/2024/06/image-54.png)
Şimdi kurulumu gerçekleştirebiliriz.
5 - ROM Dosyasını Hazırlama ve Yerleştirme
Sanal makinenizin GPU'nuzla düzgün bir şekilde çalışabilmesi için ROM'una erişmesi gerekir. Bu çoğunlukla NVIDIA kartları ve bazı AMD kartları için geçerlidir. ROM'unuzu dosya haline getirmek için birden fazla seçeneğiniz var. ROM'unuzu TechPoweredUp'tan da indirebilirsiniz, ancak bu tavsiye edilmez. Çünkü eski ROM'ları indirip sorunla karşılaşabilirsiniz.
5.1 GPU ROM'unuzu Dosyaya Aktarma
5.1.1 Seçenek 1 (Linux Kullanıyorsanız)
NVIDIA İÇİN:
Öncelikle NVFlash Linux'un en son sürümünü kolay erişilebilir bir klasöre indirin ve dosyayı açın. Dosya adı nvflash olmalıdır.
AMD İÇİN:
AMDVBFlash / ATI ATIFlash Linux'un en son sürümünü kolay erişilebilir bir klasöre indirin ve dosyayı açın. Dosya adına dikkat edin, amdvbflash gibi bir şey olmalıdır.
Ctrl + Alt + F2
ile TTY ekranını açın. (Açılmazsa F tuşunu farklı deneyin.)
![](https://yusufipek.me/content/images/2024/06/image-55.png)
Kullanıcı adı ve şifrenizle giriş yaptıktan sonra Display Manager servisinizi durdurmanız gerekiyor. Hangi masaüstü ortamını kullandığınıza göre bu servisin adı değişebilir.
GNOME için: sudo systemctl stop gdm3
KDE için: sudo systemctl stop sddm
XFCE için: sudo systemctl stop lightdm
Ubuntu kullanıyorsanız ve gdm3'ü durdurduğunuz halde sorula karşılaşıyorsanız bu segmentin sonunda nasıl çözebileceğinizi göstereceğim.
GPU romunuzu başarılı bir şekilde dosyaya çevirmek için, çekirdeğinize bunun için sürücüleri kullanmayı bırakmasını söylememiz gerekir. Bunu modprobe -r
komutu ile yapabiliriz.
Ekran kartınıza göre aşağıdaki komutları çalıştırın:
NVIDIA | AMD |
---|---|
sudo modprobe -r nvidia_uvm | sudo modprobe -r drm_kms_helper |
sudo modprobe -r nvidia_drm | sudo modprobe -r amdgpu |
sudo modprobe -r nvidia_modeset | sudo modprobe -r radeon |
sudo modprobe -r nvidia |
Ayrıca ekran kartınızı başka yazılımlar kullanıyorsa da kaldırılmama hatası alabilirsiniz. Örneğin ben ollama'yı kullandığım için hata almıştım. Ona da dikkat etmekte fayda var.
Şimdi ROM'u dosyaya aktarabiliriz. Hangi yazılımı kullanacağınıza bağlı olarak aşağıdaki komutları girin.
NVIDIA | AMD |
---|---|
sudo chmod +x nvflash | sudo chmod +x amdvbflash |
sudo ./nvflash --save vbios.rom | sudo ./amdvbflash -s 0 vbios.rom |
AMD GPU'lar için not: Parametredeki 0 sizin adaptörünüzdür, sizinki 0 değilse, sudo ./amdvbflash -i komutunu kullanarak buraya hangi numarayı koymanız gerektiğini öğrenebilirsiniz.
Şimdi modülleri geri yükleyerek sistemimize geri dönebiliriz.
NVIDIA | AMD |
---|---|
sudo modprobe nvidia | sudo modprobe drm_kms_helper |
sudo modprobe nvidia_uvm | sudo modprobe amdgpu |
sudo modprobe nvidia | sudo modprobe radeon |
sudo modprobe nvidia_modeset |
Aynı şekilde display managerı geri başlatabiliriz.
GNOME için: sudo systemctl start gdm3
KDE için: sudo systemctl start sddm
XFCE için: sudo systemctl start lightdm
Az önce Ubuntu kullananların sıkıntı çekebileceğini söylemiştim. Eğer ki Ubuntu kullanıyorsanız modülleri çıkarabilmeniz için aşağıdaki adımları yapıp ROM dosyanızı çıkartın.
sudo systemctl set-default multi-user
gnome-session-quit
ROM dosyasını aldıktan sonra aşağıdaki komutla sisteminize dönebilirsiniz.
sudo systemctl set-default graphical
sudo systemctl start gdm3
5.1.2 SEÇENEK 2 (Windows Kullanıyorsanız)
GPU-Z programını yükleyip oktaki kısma bastığınızda sizin için ROM'u dışarıya aktaracak. Bunu da bir şekilde Linux sisteminize ulaştırın.
![](https://yusufipek.me/content/images/2024/06/image-56.png)
5.2 ROM Dosyamızı Yamalıyoruz
ROM'unuzu yamalamak çok kolay. Bu işlem AMD ROM'ları için gerekli değildir. Linux'ta Okteta gibi bir hex editörüne ya da hala Windows kullanıyorsanız HxD'ye ihtiyacınız olacak. Rom dosyanızın bir kopyasını, orijinalini güvenli bir yerde saklayarak, seçtiğiniz editörde açın. Arama fonksiyonuna erişmek için Ctrl + F tuşlarına basın ve Char ayarında VIDEO'yu arayın:
![](https://yusufipek.me/content/images/2024/06/image-57.png)
![](https://yusufipek.me/content/images/2024/06/image-58.png)
Şimdi, imlecinizi az önce aradığımız VIDEO'dan önceki ilk U'dan önce, bu şekilde yerleştirin ve ondan önceki her şeyi seçin:
![](https://yusufipek.me/content/images/2024/06/image-59.png)
U'dan önceki her şey seçildiğinde DEL tuşuna basın ve seçiminizi silin. Okteta'da silemiyorsanız, INSER tuşunuza basarak veya Okteta penceresinin altındaki çubuktan mod değiştirerek (INS veya OVR modu) düzenleme modunu değiştirin. Sonunda buna benzer bir sonuç elde etmelisiniz:
![](https://yusufipek.me/content/images/2024/06/image-60.png)
Dosyayı patched.rom gibi farklı bir isimle kaydedin. ROM'unuz artık yamalı ve kullanılabilir!
5.3 ROM'u Yerleştirme
Bu adım Linux dağıtımınıza göre farklılık göstermektedir. Lütfen ROM'unuzu dağıtımınıza göre yerleştirin.
Birçok Dağıtım İçin:
sudo mkdir /usr/share/vgabios
cp ./patched.rom /usr/share/vgabios/
cd /usr/share/vgabios
sudo chmod -R 644 patched.rom
sudo chown kullanıcıadın:kullanıcıadın patched.rom
Fedora Tabanlı Dağıtımlar İçin:
sudo mkdir /var/lib/libvirt/vgabios
cp ./patched.rom /var/lib/libvirt/vgabios/
cd /var/lib/libvirt/vgabios/
sudo chmod -R 644 patched.rom
sudo chown yourusername:yourusername patched.rom
sudo semanage fcontext -a -t virt_image_t /var/lib/libvirt/vgabios/patched.rom
sudo restorecon -v /var/lib/libvirt/vgabios/patched.rom
ROM'unuz şöyle görünmelidir:-rw-r--r-- 1 wormstweaker wormstweaker 962048 9 oct. 21:30 patched.rom
6 - Scriptler ve Kayıt Dosyaları
Sanal makinemizi başlattığımızda bazı scriptlerin arka planda çalışması lazım. Bunu qemu hook ile yapacağız.
6.1 Depoyu İndirme
Bu scriptleri hazırlayan kişi Risingprism.
git clone https://gitlab.com/risingprismtv/single-gpu-passthrough.git
Ardından inen klasörün içerisine girip aşağıdaki komutu çalıştıracağız.
sudo chmod +x install_hooks.sh
sudo ./install_hooks.sh
Bütün dosyaların doğru şekilde yerleştiğinden emin olun. Aşağıdaki gibi olması lazım.
/etc/systemd/system/[email protected]
/usr/local/bin/vfio-startup.sh
/usr/local/bin/vfio-teardown.sh
/etc/libvirt/hooks/qemu
/etc/libvirt/hooks/qemu
dosyasına gelip if [[ $OBJECT == "win11" ]]; then
kısmındaki "win11" yazısını sanal makinenizin adı neyse onu yazmanız gerekli. Yoksa hook çalışmayacaktır.
KDE Kullanıcıları İçin Not: KDE kullanıyorsanız scripte benim yazdığım aşağıdaki eklemeyi yapmak isteyebilirsiniz.
function kill_yusuf_processes_except_ssh {
# Get the list of SSH and Bash process IDs for user yusuf
ssh_pids=($(pgrep -u yusuf ssh))
bash_pids=($(pgrep -u yusuf bash))
echo "ssh pids: $ssh_pids"
echo "bash pids $bash_pids"
# Combine SSH and Bash process IDs into one array
exclude_pids=("${ssh_pids[@]}" "${bash_pids[@]}")
# Kill all processes of user yusuf except the SSH and Bash processes
for pid in $(pgrep -u yusuf); do
if [[ ! " ${exclude_pids[@]} " =~ " ${pid} " ]]; then
kill -9 $pid
fi
done
echo "$DATE All processes of user yusuf killed except SSH and Bash processes"
}
kill_yusuf_processes_except_ssh
sleep "1"
Bunu eklememin nedeni, KDE'de systemctl ile servisi durdurduğumuzda kullanıcının işlemleri kapatılmadığından nvidia modülünü kaldırırken sorun yaşıyordum. Yukarıdaki komut SSH ve Bash haricindeki kullanıcıya ait bütün işlemleri öldürüyor. Tabii siz yusuf
yazan kısma kendi kullanıcı adınızı girmelisiniz. /usr/local/bin/vfio-startup
scriptine modüllerin kaldırılmasından hemen önce bunu ekleyebilirsiniz.
6.2 Hata Ayıklama / Kayıt Dosyalarının Lokasyonu
3.1.3'teki ayarı yaptıysanız kayıt dosyalarınız aşağıdaki gibi olacaktır. Bu kısım önemli çünkü beklemediğiniz hatalarla karşılaşabilirsiniz ve nerede neyin çalışmadığını anlamazsanız sorunları çözemezsiniz.
sanal-makine-adı.log => /var/log/libvirt/qemu/sanal-makine-adın.log
custom_hooks.log => /var/log/libvirt/
libvirtd.log => /var/log/libvirt/
Sorun yaşamanız halinde sırasıyla custom_hooks.log, sanal-makine-adı.log ve libvirtd.log kayıtlarını incelemenizi tavsiye ederim.
Ayrıca ikinci bir bilgisayarınızla SSH bağlantısı kurup bu ana bilgisayarınızı yönetmenizi tavsiye ederim. Böylece anlık olarak kayıt dosyalarınıza çok daha hızlı ulaşabilirsiniz.
SSH bağlantısı kurmak için ana bilgisayarınızda sudo systemctl start ssh
yazıp ikinci bilgisayarınızdan ssh kullanıcıadın@lokalipadresin
şeklinde bağlantı kurabilirsiniz.
7 - Sanal Makinenize GPU'yu Atama
Şimdi GPU'yu sanal makineye ekleyeceğiz!
7.1 Sanal Görüntü Sunucusunu Silme
Varsayılan olarak görüntü prokolü Spice ile gelir ama artık buna ihtiyacımız yok.
Virt Manager => Edit => Preference kısmına gelip "Enable XML editing" seçeneğini aktif edin.
![](https://yusufipek.me/content/images/2024/06/image-61.png)
Ardından sanal makinenizin XML kısmına gelin.
![](https://yusufipek.me/content/images/2024/06/image-62.png)
Ve aşağıdaki kısımları silin:
<graphics type="spice" autoport="yes">
<listen type="address"/>
<gl enable="no"/>
</graphics>
`<audio id="1" type="none"/>`
<video>
<model type="bochs" vram="16384" heads="1" primary="yes"/>
<address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/>
</video>
<channel type="spicevmc">
<target type="virtio" name="com.redhat.spice.0"/>
<address type="virtio-serial" controller="0" bus="0" port="1"/>
</channel>
7.1.2 GPU'yu ve ROM Dosyamızı Ekliyoruz
IOMMU gruplarımızdan kaydettiğimiz cihazları hatırlayacaksınız (adım 2) şimdi sol alttan "add hardware" kısmına tıkladıktan sonra "PCI Host Device" sekmesine gelip IOMMU grubumuzda bulduğumuz cihazları ekliyoruz.
![](https://yusufipek.me/content/images/2024/06/image-63.png)
GPU'nuzun XML sekmesine gidip aşağıdaki satırı ekliyoruz:
<rom file='/usr/share/vgabios/patched.rom'/>
Tabii bu kullandığınız dağıtıma göre değişir. (Adım 5.3)
![](https://yusufipek.me/content/images/2024/06/image-64.png)
Fedora tabanlı dağıtım kullanıyorsanız:
<rom file='/var/lib/libvirt/vgabios/patched.rom'/>
7.1.3 (Opsiyonel) 1000 Serisi ve Eski NVIDIA Kartları
GTX 1000 serisinden (dahil) daha eski NVidia GPU'lar için aşağıdaki parametreleri XML'inize eklemeniz gerekebilir. XML'inizin <features>
bölümüne gidin ve aşağıdaki satırları ekleyin:
<features>
<acpi/>
<apic/>
<hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<vendor_id state='on' value='123456789123'/>
</hyperv>
<kvm>
<hidden state='on'/>
</kvm>
<vmport state='off'/>
<ioapic driver='kvm'/>
Mobil kartlar için, bir pili taklit etmek ve kartınızın satıcı kimliğini iletmek gerekir.
XML'inizin ilk satırını şu şekilde değiştirin:
<domain xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0" type="kvm">
Ve XML'nizin en altına, </domain>
'den önce bu bloğu ekleyin:
</qemu:commandline>
<qemu:override>
<qemu:device alias='hostdev0'>
<qemu:frontend>
<qemu:property name='x-pci-sub-vendor-id' type='unsigned' value='4136'/>
<qemu:property name='x-pci-sub-device-id' type='unsigned' value='1909'/>
</qemu:frontend>
</qemu:device>
</qemu:override>
</domain>
8 - XML Dosyasına Son Ayarlar
AMD CPU'lar için, hyperthreading'e izin vermek için topoext'i etkinleştirebilirsiniz.
<cpu mode='host-passthrough' check='none'>
<topology sockets='1' dies='1' cores='12' threads='2'/>
<feature policy='require' name='topoext'/>
</cpu>
Intel CPU'lar için SMEP'i (Supervisor Mode Execution Protection) şu şekilde etkinleştirebilirsiniz:
<cpu mode='host-passthrough' check='none'>
<topology sockets='1' dies='1' cores='12' threads='2'/>
<feature policy='disable' name='smep'/>
</cpu>
Her şeyi doğru yaptıysanız artık sanal makinenizi başlattığınızda Linux makineniz arka planda inaktif hale gelecek ve Windows makineniz başlayacak. Windows kapatıldığındaysa Linux makineniz geri gelecek!
Son Söz
Çok şanslıysanız hiçbir problem çıkmadan bu işlemi gerçekleştirebilirsiniz ama muhtemelen bir iki yerde hata yapacaksınız veya bu rehberin tahmin etmediği bir hatayla karşılaşacaksınız. Bunu çözmek için lütfen 6.2 adımını tekrar inceleyin.
Foruma gelip konu açabilirsiniz ama mutlaka konu açmadan önce kayıt dosyalarınızı paylaşın.
Evet uzun oldu ama bu kadardı! Sonuna kadar geldiyseniz umarım başarılı olursunuz! Bu arada sonuna kadar geldiğin için size biraz daha kısa bir rehber önermek istiyorum. Websiteniz dahil olmak üzere birçok uygulamayı evinde nasıl güvenli bir şekilde barındırabileceğinizi merak ediyorsanız "19 dakikada ev sunucusu kur" videomuzu izlemenizi tavsiye ederim!