1.硬件條件
首先要確定主板和CPU都支持VT-d技術,即Virtualization Technology for Direct I/O(英特爾虛擬技術)。近年的產(chǎn)品應該都支持此技術纵寝。 在BIOS里將
還要確定要直通的顯卡支持PCI Pass-through。似乎A卡對于直通的支持比N卡好,但N卡性能比A卡好,這個大家都知道骄蝇。目前市面上的顯卡一般都支持直通。我用過的NVIDIA 的M60和GeForce系統(tǒng)960操骡,970九火,1080系列都支持的。注意做顯卡直通需要兩塊顯卡册招,一塊主機用岔激,另一塊虛擬機用,主板有集成顯卡的可以采用將集成顯卡給宿主機是掰,PCI的獨立顯卡給虛擬機用虑鼎。
2.準備工作
在BIOS將VT-d設置成enable(主板BIOS設置項名稱不一樣,類似于虛擬化技術的項目打開即可)冀惭。
3.安裝Ubuntu系統(tǒng)震叙。
宿主機操作系統(tǒng):ubuntu?16.X和18.X都可以掀鹅,18版本較新在有的機器上圖形界面登錄的位置卡的比較厲害散休,16版本比較穩(wěn)定。
安裝完ubuntu系統(tǒng)打開命令行終端乐尊,輸入如下命令戚丸,將系統(tǒng)更新至最新:
sudo apt-get update
sudo apt-get upgrade
如果是原本就已經(jīng)有了ubuntu系統(tǒng),則不需要重新安裝扔嵌,可以通過如下命令限府,確認CPU是否支持硬件虛擬化,有內容輸入即可
egrep -o '(vmx|svm)' /proc/cpuinfo
4.安裝KVM
輸入如下命令安裝KVM及Libvirt:
sudo apt-get install qemu-kvm libvirt-bin bridge-utils ubuntu-vm-builder virt-manager virtinst
啟動libvirt服務:
/etc/init.d/libvirtd start
5.確認內核是否支持iommu
cat /proc/cmdline | grep iommu
如果沒有輸出結果痢缎,添加intel_iommu=on到grub的啟動參數(shù),需要重啟胁勺。
加"名稱=值”的鍵值對到GRUB_CMDLINE_LINUX_DEFAULT變量,添加多個時用空格隔開,
例如GRUB_CMDLINE_LINUX_DEFAULT="...... name=value"
(注意:理論上添加到GRUB_CMDLINE_LINUX變量和GRUB_CMDLINE_LINUX_DEFAULT任意一個都可以)
使用命令:sudo view /etc/default/grub 編輯grub
找到GRUB_CMDLINE_LINUX_DEFAULT或GRUB_CMDLINE_LINUX加入iommu開關,如下:
GRUB_CMDLINE_LINUX="intel_iommu=on"
然后使用grub-mkconfig -o /boot/grub/grub.cfg更新grub.cfg文件
或者独旷,使用sudo update-grub來更新grub文件署穗。
之后需要重啟服務器(即便不做第五步最好也重啟的一下)。
6.使用dmesg | grep IOMMU 或dmesg | grep -e DMAR -e IOMMU檢查VT-d(AMD芯片時是 IOV)是否工作嵌洼。若沒有相應輸出案疲,需要重新檢查之前的步驟。
7.查看pci設備信息
lspci -nn | grep NVIDIA
如果不是NVIDIA的顯卡麻养,可以換自己顯卡的關鍵字查詢褐啡。重查詢結果上注意查看自己獨立顯卡(也就是要直通的顯卡)的設備ID和地址,形如:?[10de 1b80] 和?[10de 10f0]鳖昌, 01.00.0和01.00.1备畦。(Gefore顯卡一般會集成一個聲卡芯片)
查看驅動
lspci -vv -s 01:00.0 | grep driver
>Kernel driver in use: nouveau? ? (ubuntu系統(tǒng)為顯卡綁定的默認驅動)
lspci -vv -s 01:00.1 | grep driver
>Kernel driver in user: snd_hda_intel?(顯卡上附帶的集成聲卡的默認驅動)
禁用顯卡的默認驅動
禁用nouveau低飒, snd_hda_intel,將其添加到/etc/modprobe.d/blacklist.conf文件最后
blacklist nouveau
blacklist snd_hda_intel
8.將顯卡從宿主機解綁定
$ modprobe pci_stub
$ echo "10de 1b80" > /sys/bus/pci/drivers/pci-stub/new_id
$ echo 0000:01:00.0 > /sys/bus/pci/devices/0000:01:00.0/driver/unbind
$ echo 0000:01:00.0 > /sys/bus/pci/drivers/pci-stub/bind
$ echo "10de 10f0" > /sys/bus/pci/drivers/pci-stub/new_id
$ echo 0000:01:00.1 > /sys/bus/pci/devices/0000:01:00.1/driver/unbind
$ echo 0000:01:00.1 > /sys/bus/pci/drivers/pci-stub/bind
這步的前后忘記了是否需要重啟懂盐,如果遇到問題逸嘀,自己重啟一下試試吧。
9.查看顯卡設備所在組
find /sys/kernel/iommu_groups/ -type l
在做直通的時候允粤,需要將同組內的所有設備全部直通給虛擬機(也就是一個獨立完整的設備直通給虛擬機崭倘,不能一個設備一部分直通給虛擬機一部分在宿主機),比如剛才上面的顯卡包括顯卡和聲卡类垫,都需要一起直通給虛擬機司光。另外需要注意有的顯卡硬件在查詢所在組的時候,同組內除了顯卡和聲卡以外還會顯示一個設備(比如00:01.0),這個好像是CPU和PIC設備之間的橋設備(本人不從事硬件相關工作悉患,所以具體名稱我也叫不好残家,勿拍),這個設備在稍后做直通的時候可以忽略售躁,不同直通給虛擬機坞淮。
?
10.安裝OVMF
apt-get install ovmf
11.創(chuàng)建Windows虛擬機,通過在ubuntu圖形界面上找到virt-manager工具陪捷,創(chuàng)建Windows10虛擬機回窘,這個和其他創(chuàng)建虛擬機軟件差不多(比如,Vmware市袖,Virtualbox等)啡直,如果不了解的,可以自己百度查詢苍碟。
注意創(chuàng)建虛擬機時選擇自己配置酒觅,在最初的設定頁面上選擇引導方式為UFFI(這個功能也就是剛才安裝的OVMF支持的)一直到把Windows系統(tǒng)安裝完成。
安裝完以后微峰,將Windows更新至最新舷丹。然后關閉虛擬機。
在KVM管理界面(virt-manager)上蜓肆,通過添加設備颜凯,將顯卡(以及集成的聲卡)PCI設備一并分配給虛擬機。
然后啟動虛擬機症杏,聯(lián)網(wǎng)下載對應的顯卡驅動装获,安裝驅動,安裝完驅動厉颤,在設備管理中發(fā)現(xiàn)顯卡驅動出現(xiàn)43#錯誤穴豫,停止工作。
下載TightVNC,在虛擬機上安裝并運行VNC Server(默認端口5900)精肃,允許開機自動運行秤涩。
關閉虛擬機。
12.更改Windows10虛擬機設置司抱。
虛擬機配置文件在/etc/libvirt/qemu/目錄下筐眷,打開編輯,按照紅色部分修改
...
...
<loader readonly='yes' type='pflash'>/usr/share/OVMF/rom/OVMF_CODE.fd</loader>
<nvram template='/usr/share/OVMF/OVMF_VARS-pure.efi.fd'>/var/lib/libvirt/qemu/nvram/win10-2_VARS.fd</nvram>
loader 和nvram的template值是使用的OVMF提供的习柠,nvram標簽內的值是取決于自己創(chuàng)建的虛擬機的名字匀谣。
注:上面這部分是為了解決Windows中安裝完顯卡驅動顯示驅動異常43#錯誤的問題,也就是Nvidia的驅動中對Geforce的顯卡做了檢查资溃,消費級顯卡不允許在虛擬機中運行武翎,只允許專業(yè)卡比如M60進行虛擬化。所以我們將Geforce顯卡做了直通的時候溶锭,驅動就會自己檢查報錯停止工作宝恶。我們在hyperv中提供虛假vender_id,隱藏KVM以達到欺騙的目的,但只做這兩點還不行趴捅,所以才需要安裝OVMF在rom引導上做手腳垫毙,使用OVMF提供的ROM引導系統(tǒng)。這樣就躲過了驅動的檢查拱绑。不過這樣做之后综芥,在宿主機的Virt-Manager中看不見虛擬機的Windows界面了,顯示黑屏欺栗,我們需要通過VNC連接虛擬機進行操作和使用毫痕。
修改完配置文件征峦,保存退出迟几。
13.啟動Windows虛擬機,看見OVMF 的UFFI引導界面栏笆,過一會兒在另一臺機器上通過VNC客戶端連接虛擬機(服務端)的Ip类腮,沒有意外,就可以連接上了蛉加,查看顯卡設備的驅動就應該正常了蚜枢。
歡迎大家交流:
都市凡塵
平行云科技(北京)有限公司
QQ:18100053
Email:dwj@pingxingyun.com
公司主頁:http://www.pingxingyun.com
訓課在線:http://www.vrapponline.com