失败笔记,希望对你有用:Ubuntu 18.04 安装 KVM 并配置硬件直通

由于近期比较折腾,另外也找不到好的虚拟化方案,于是就把目光留在了Ubuntu+KVM上。

之前尝试过的ESXi和Proxmox VE,发现ESXi不能直通宿主机的USB键鼠,但能完美直通N卡,Proxmox VE可以直通任何宿主机的USB设备,但是直通显卡后问题就来了,把直通了显卡的虚拟机电源关闭,然后再打开,系统当场奔溃。分析了大半天日志都没找到原因,也尝试过升级,切换方式等,都是相同结果,Google了一圈也没找到解决方法,我的R710前面板还报PCI-E错误,佛了。

但Proxmox VE是用KVM虚拟化的,所以还是上Ubuntu吧(???

下面步骤是我从网络上各大站点整理而来,如有疏忽或疑问,请评论区留言。

本教程中的Ubuntu版本为Ubuntu Server 18.04 LTS

配置iommu以支持PCI硬件直通

AMD和Intel的方法都一样只是添加的内容不同,如果你不想进行硬件直通,可以忽略这一步。

编辑grub

sudo vim /etc/default/grub

找到GRUB_CMDLINE_LINUX_DEFAULT=""这一行,并往里面添加值,如IntelAMD看下方代码框中

添加:intel_iommu=on
最终的结果为:GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"
AMD则将"intel_iommu=on"改为"amd_iommu=on"
如这行里面有其他值,网后面添加即可。

配置完成后,运行sudo update-grub更新一下,然后reboot服务器。

重启后输入命令 "dmesg | grep -i iommu "查看是否有反馈,如果有类似以下输出,说明成功。

来源: http://aspirer.wang/?p=1266

安装KVM等软件包

验证是否支持虚拟化和KVM

验证虚拟化"egrep -c ‘(vmx|svm)’ /proc/cpuinfo",如反馈出CPU核心数说明支持

验证KVM硬件加速

sudo apt install cpu-checker
sudo kvm-ok

如果反馈中有“KVM acceleration can be used”说明支持。

执行以下命令安装KVM并启动服务

sudo apt update
sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virtinst
sudo service libvirtd start
sudo update-rc.d libvirtd enable

编辑 /etc/netplan/50-cloud-init.yaml 配置网桥,比如我的eno4配置了静态IP,那就把dhcp4和6关掉。

network:
        version: 2
        ethernets:
                eno4:
                        dhcp4: no
                        dhcp6: no
        bridges:
                br0:
                        interfaces: [eno4]
                        dhcp4: no
                        addresses: [192.168.2.189/24]
                        gateway4: 192.168.2.1
                        nameservers:
                                addresses: [192.168.2.1]

请按照自己的实际环境修改。

使用下面命令查看网桥状态

sudo networkctl status -a
ifconfig

可以使用上下按键或者其他功能键翻页。

来源: https://www.linuxtechi.com/install-configure-kvm-ubuntu-18-04-server/

https://www.sysgeek.cn/install-configure-kvm-ubuntu-18-04/

直通准备

如果你已启用了IOMMU并配置好了KVM,那可以到这一步了。

配置Vfio

使用“ lspci -nnk ”查找你要直通的设备ID,注意是-nnk并非原文中的–nnk,–nnk不被识别。

比如我要直通的设备ID如下:

06:00.0 VGA compatible controller [0300]: NVIDIA Corporation GF119 [GeForce GT 610] [10de:104a] (rev a1)
    Kernel driver in use: nouveau
    Kernel modules: nvidiafb, nouveau
06:00.1 Audio device [0403]: NVIDIA Corporation GF119 HDMI Audio Controller [10de:0e08] (rev a1)
    Kernel driver in use: snd_hda_intel
    Kernel modules: snd_hda_intel

然后将设备的驱动加入黑名单:

echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf 

启用modules:编辑/etc/modules然后加入以下内容

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

将你的显卡ID加入vfio.conf中

执行下面命令

lspci -nn | grep -i nvidia
反馈:
06:00.0 VGA compatible controller [0300]: NVIDIA Corporation GF119 [GeForce GT 610] [10de:104a] (rev a1)
06:00.1 Audio device [0403]: NVIDIA Corporation GF119 HDMI Audio Controller [10de:0e08] (rev a1)

可见我的设备ID是10de:104a和10de:0e08,用下列命令添加。

echo "options vfio-pci ids=10de:104a,10de:0e08" > /etc/modprobe.d/vfio.conf

重新生成initrd

update-initramfs -u

重启服务器:reboot

来源: https://zhuanlan.zhihu.com/p/60389508

https://pve.proxmox.com/wiki/Pci_passthrough#Intel_CPU

新建虚拟机

创建虚拟机磁盘,容量随意,格式要为raw,如我的如下,请按照自己的实际情况修改:

qemu-img create -f raw /home/ssd/ssd-2019.raw 40G // SSD 系统盘
qemu-img create -f raw /home/kvm-disks/2019-data.raw 80G // HDD 数据盘

安装虚拟机,请按照自己的实际情况修改。

virt-install 
--name WinServer2019 
--memory 12288 
--cpu host 
--vcpus 8 
--disk path=/home/ssd/ssd-2019.raw 
--network bridge=br0,model='e1000' 
--cdrom=/home/kvm-disks/ISO/cn_windows_server_2019_updated_march_2019_x64_dvd_c1ffb46c.iso 
--boot cdrom 
--virt-type kvm 
--vnc 
--vncport=5902 
--vnclisten=0.0.0.0 
--os-type=windows 
--features kvm_hidden=on 
--machine q35

上述指令:name指定名称,memory指定内存(单位MB),vcpus指定虚拟核心数,disk指定磁盘位置,network指定网络,后面指定我们创建的网桥及虚拟网卡,cdrom指定镜像位置,boot指定启动方式,vnc部分指定了端口等。

来源: https://blog.acesheep.com/index.php/archives/720/

特别需要注意的参数 --machine q35 --features kvm_hidden=on

https://blog.acesheep.com/index.php/archives/720/

如果机器有防火墙的话,还需要开放在上面指定的vnc端口。 在运行命令后,会弹出X窗口,你可以安装xmanager,如果没有的话,那虚拟机任然会被创建。(理论是这样

直通USB设备和直通显卡

直通USB

限制:USB协议<= 2.0 使用lsusb查看usb的id
我要直通的USB设备的ID是1a40:0101,可以用以下命令进行编辑。
virsh edit WinServer2019 //改成你的虚拟机名字
在<devices>和</devices>之间添加如下代码
  <devices>
    <hostdev mode='subsystem' type='usb'>
      <source>
        <vendor id='0x1a40'/>
        <product id='0x0101'/>
      </source>
    </hostdev>
  </devices>
添加完成后需要重新定义虚拟机
virsh define /etc/libvirt/qemu/WinServer2019.xml //改成你的虚拟机名字.xml
还有其他方法,如热添加,请参考如下: https://blog.acesheep.com/index.php/archives/720 https://help.ubuntu.com/community/KVM/Managing#Adding_USB_Device_Pass-through

直通显卡

lspci -nn | grep -i nvidia
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti Rev. A] [10de:1e07] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10f7] (rev a1)
01:00.2 USB controller [0c03]: NVIDIA Corporation Device [10de:1ad6] (rev a1)
01:00.3 Serial bus controller [0c80]: NVIDIA Corporation Device [10de:1ad7] (rev a1)
这里列出的PCI 设备序号 01:00.0 01:00.1 01:00.2 01:00.3 01:00.0 这里需要对应配置文件的 <source> 节点里面 <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> <hostdev> 里面是直通一个PCI 设备, 例如我这里有4个需要穿透到里面,就要有4个<hostdev>

https://blog.acesheep.com/index.php/archives/720/
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </hostdev>

解释一下:bus对于的是 01:00.3 的第一串数字,后门以此类推 完成后需要重新定义虚拟机

virsh define /etc/libvirt/qemu/WinServer2019.xml //改成你的虚拟机名字.xml
https://blog.acesheep.com/index.php/archives/720/

添加数据盘

可见上面我还创建了一个数据盘,我们只要按照xml照葫芦画瓢就行
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/home/kvm-disks/2019-data.raw'/>
      <target dev='sdc' bus='sata'/>
      <address type='drive' controller='0' bus='0' target='0' unit='3'/>
    </disk>
将上面按照实际情况修改,下载完后重新定义。

End

既然写到这了,为何说是失败笔记呢? 因为时间不够了,也有些其他问题,但是到这步不出意外是可以成功的了。希望对你有用。 感谢本文中提到的所有链接的作者。 引用最多的是 https://blog.acesheep.com/index.php/archives/720/ ,并已取得授权

评论

  1. AceSheep
    3年前
    2020-12-25 19:41:20

    从零开始直通显卡, 直通设置好使用起来挺方便的.

    • 博主
      AceSheep
      3年前
      2020-12-25 19:59:19

      的确,后来我用ESXi了,再后来…就什么也不用了…

  2. 阿牛
    4年前
    2020-5-25 21:55:59

    我有问题咨询您,方便加工微信吗?或者给个邮箱,请教您一点做直通的问题,谢谢,我的邮箱30428272@qq.com

    • 博主
      阿牛
      4年前
      2020-5-25 22:01:56

      嗯嗯,在我能力范围之内的问题我会尽量帮忙的!

    • 博主
      阿牛
      4年前
      2020-5-25 22:03:24

      我的邮箱:ivampiresp@163.com

  3. 666
    4年前
    2020-3-05 11:28:13

    ????

  4. 4年前
    2020-3-04 15:50:57

    哦豁

    • 博主
      萌新杰少
      4年前
      2020-3-04 15:52:04

      好快!

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇