SATA controller 比 RDM 直通複雜一些,但可以讓客體看到SMART。
參考
https://gist.github.com/emanuellopes/a43d978f1b3604b07209a12cdf951ae3
https://blog.csdn.net/Devout_programming/article/details/129109114
https://qiedd.com/1894.html
https://upsangel.com/htpc-nas/iommu-vfio-gpo-proxmox-pve-pcie%E7%9B%B4%E9%80%9A%E5%92%8C%E6%A0%B8%E9%A1%AFhdmi%E7%9B%B4%E9%80%9A%E8%A8%AD%E7%BD%AE%E5%8F%83%E6%95%B8%E8%A7%A3%E9%87%8B/
https://hackmd.io/@davidho9713/pve_pci_passthrough
裡面雖然有些是說GPU直通,但其實直通都會遇到類似的問題 (包括 nvme)
https://gist.github.com/r15ch13/ba2d738985fce8990a4e9f32d07c6ada
這個 sh 好用,可以看 IOMMU group。
原因: 多個裝置可能會被分在同一個 IOMMU group 下,如果你想把其中一個裝置直通給客體,那客體啟動時,可能會因為要抓裝置reset,影響到同 group 下的其他裝置導致整個系統不穩。
所以要利用 iommu、 vfio 和 ACS override 讓裝置盡量分到不同的 group 中。
1. 用上面附的 iommu.sh 看 group
可以看到我的 ASM1166 被分配到了 group,我直接在 VM 使用會導致 host 跟著死機
2. 改開機設定,分為
2-1. grub (一般把PVE安裝在 ext4,會用這個引導開機)
https://blog.csdn.net/Devout_programming/article/details/129109114
https://docs.redhat.com/zh_hans/documentation/red_hat_virtualization/4.1/html/installation_guide/appe-configuring_a_hypervisor_host_for_pci_passthrough#appe-Configuring_a_Hypervisor_Host_for_PCI_Passthrough
編輯 grub
nano /etc/default/grub
找到 GRUB_CMDLINE_LINUX_DEFAULT,加上 amd_iommu=on pcie_acs_override=downstream,multifunction;如果是 intel CPU請把 amd_iommu 改成 intel_iommu
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on pcie_acs_override=downstream,multifunction"
2.2. systemd-boot (如果把PVE安裝在 zfs 上,則會用這個引導開機)
nano /etc/kernel/cmdlineroot後方加入iommu的設定
root=ZFS=rpool/ROOT/pve-1 boot=zfs amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunctionssh:
proxmox-boot-tool refresh
3. 編輯 modules 加入 vfio 模組
nano /etc/modules加入 vfio 模組
vfio vfio_iommu_type1 vfio_pci vfio_virqfd
啟用iommu unsafe interrupts
nano /etc/modprobe.d/iommu_unsafe_interrupts.conf
加入
options vfio_iommu_type1 allow_unsafe_interrupts=1
套用
update-grub update-initramfs -u -k all reboot
4.再度用 iommu.sh
可以看到 ASM1166 被配到獨立的 group 裡面了,此時就可以正常地把它直通客體了
後續直接用 VM web GUI,設定 PCI 裝置直通即可


留言
張貼留言