虚拟机

Linux开源虚拟机KVM

安装

# 首先安装KVM虚拟机
sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

# 设置服务开机启动
sudo systemctl enable libvirtd --now

配置

网桥配置

如果网络管理使用的是netplan,将原来的配置修改为:

# 主要区别在于:1)物理网口不设置ip;2)物理网口包在网桥br0中,物理网桥配置IP。
network:
    version: 2
    ethernets:
      eno1:
        dhcp4: no
    bridges:
        br0:
            dhcp4: false
            interfaces: [eno1]
            addresses:
              - 192.168.111.222/24
            routes:
              - to: default
                via: 192.168.111.1
            nameservers:
              addresses: [192.168.111.1, 8.8.8.8, 119.29.29.29]

操作

# 创建虚拟机
# 图形界面搜索virtual machine manager
# 随后图形界面操作创建虚拟机

EXSI

参考信息:

基础配置

配置PCI设备直通

  1. 进入ESXi Host Client中
  2. 在左侧菜单选择主机-管理
  3. 右侧选择硬件-PCI设备
  4. 在右上角搜索中输入NVIDIA
  5. 在表格中选中所有名字中带有NVIDIA的设备
  6. 点击切换直通按钮。 完成后,表格中的直通将变为活动

配置虚拟机

关闭虚拟机后,进入虚拟机设置,进行如下操作:

  1. 进入虚拟硬件选项卡
  2. 内存-预留中选择预留所有客户机内存 (全部锁定)
  3. 点击添加其他设备按钮,选择PCI设备
  4. 新PCI设备中选择需要使用的显卡
  5. 如果有多个PCI设备请重复第3、4步
  6. 进入虚拟机选项选项卡
  7. 关闭引导选项-启动UEFI安全引导中的是否为此虚拟机启用 UEFI 安全引导 完成后,可以开机并进入虚拟机。

修改内核配置

nouveau是第三方开发的开源显卡驱动,安装NVIDIA官方的显卡驱动之前,需要先禁用它。执行命令:

# /etc/modprobe.d/blacklist.conf文件写入以下内容
# 用于禁用nouveau
blacklist nouveau
options nouveau modeset=0

# /etc/modprobe.d/nvidia.conf文件写入
# 用于为不支持的NVIDIA GPU启用实验性支持。
options nvidia NVreg_OpenRmEnableUnsupportedGpus=1

# 更新初始化内存文件系统(initramfs),initramfs通常位于/boot目录。
sudo update-initramfs -u

# 重启后,可以通过以下命令验证:
lsmod | grep nouveau
# 如果没有输出就是nouveau禁用成功。

安装NVIDIA显卡驱动

安装显卡驱动的方法很多,比如ubuntu-drivers autoinstallapt install等。 无论使用哪种方法,请注意需要安装开源Linux内核(Open Linux Kernel)版本。

我使用的是run文件安装法,最新版的下载链接可以在官方网站找到,以530.30.02为例。执行命令:

# 下载run文件
wget http://download.nvidia.com/XFree86/Linux-x86_64/530.30.02/NVIDIA-Linux-x86_64-530.30.02.run
# 删除原有驱动
# 视安装方法不同,卸载方法也不同,以下3个命令可以都试试
sudo nvidia-uninstall
sudo apt remove --purge '^nvidia-.*'
sudo sh ./NVIDIA-Linux-x86_64-530.30.02.run --uninstall
# 安装过程的必要依赖
sudo apt install gcc make
# 运行run文件
sudo sh ./NVIDIA-Linux-x86_64-530.30.02.run

磁盘扩容

首先在操作面板增加虚拟磁盘的容量 随后进入到系统中执行:

# 实用parted工具
sudo parted /dev/sdb
# 进入交互式之后执行
resizepart 1
# 然后输入100%,然后quit
quit

# 在外部执行e2fsck 进行磁盘分区检测
sudo e2fsck -f /dev/sdb1

# 然后resize文件系统,就可以了.
sudo resize2fs /dev/sdb1

总结

想要正常在ESXi 8中的Linux虚拟机中使用显卡直通,以下缺一不可:

  • bios中关闭fast boot。
  • bios中开启VT-D(支持PCIE直通),开启CPU虚拟化支持。
  • 虚拟机关闭UEFI安全引导。
  • 内核禁用nouveau
  • 使用开源Linux内核版本驱动-m=kernel-open
  • 设置NVreg_OpenRmEnableUnsupportedGpus1

命令行操作

开启命令行

迁移vmdk

网页端总会出现各种情况导致页面刷新,从而迁移过程可能会遇到问题,这里还是用命令行更安全

# nohup: 让命令忽略挂起信号,配合&可以让命令在后台运行。
# > <文件路径>:写入日志
# 2>&1: 表示把错误信息也一并写入
nohup vmkfstools -i "/vmfs/volumes/hdd/backup/常用服务/常用服务_2.vmdk" "/vmfs/volumes/ssd-system/常用服务/常用服务_2.vmdk" -d thin > /vmfs/volumes/ssd-data/常用服务/copy_log.txt 2>&1 &

常见问题

nvlink导致显卡风扇和功率ERR!

找不到具体问题,只能进行尝试,目前稍微稳定点的办法是修改显卡功率,长期维持出现问题的显卡有一定量的显存占用,就可以了,测试下来稳定运行几个月了。

nvidia-smi -pm 1 # enable persistance mode
nvidia-smi -pl 220 # set power limit to 220w

配置开启自动配置

[Unit]
Description=nvidia-smi power limit
After=systemd-modules-load.service
Requires=nvidia-driver.service
 
[Service]
# sleep主要是nvidia-smi执行命令直接 &&的话会导致同时执行两条命令,会报错
ExecStart=/bin/sh -c "nvidia-smi -pm 1 > /var/log/nvidia-power-limit.log 2>&1 && sleep 2 && nvidia-smi -pl 220 >> /var/log/nvidia-power-limit.log 2>&1 || exit 1"
Type=simple
Restart=always
RestartSec=5
User=root
 
[Install]
WantedBy=multi-user.target

PCI-E直通全部灰色

要想支持PCI-E直通,需要再bios开启VT-D支持

遇到nvidia-smi no devices

以下步骤检查是否做好:

  • 记得重启宿主机,来刷新显卡内部寄存器状态,不然更新驱动会导致显卡状态异常出现nvidia-smi no devices
  • 查看异常信息:sudo dmesg | grep -i nv
  • bios中关闭fast boot
  • 开启VT-D和CPU虚拟化。
  • 虚拟机或者物理机关闭secret boot
  • 虚拟机设置预留内存。
  • 禁用nouveous,并且添加未支持的GPU:
    # 修改/etc/modprobe.d/blacklist.conf,写入
    # 用于禁用nouveau
    blacklist nouveau
    options nouveau modeset=0
    
    # 修改文件/etc/modprobe.d/nvidia.conf,写入
    # 用于为不支持的NVIDIA GPU启用实验性支持。
    options nvidia NVreg_OpenRmEnableUnsupportedGpus=1
    
    # 更新初始化内存文件系统(initramfs),initramfs通常位于/boot目录。
    sudo update-initramfs -u
  • 安装驱动:./NVIDIA_xxxxx.run