QEMU透传PCIE设备

将服务器上的一个真实NVMe SSD硬盘通过PCIe Passthrough方式透传给该虚拟机,要求在虚拟机里边可以看到并正常读写该NVMe SSD硬盘。

  • 创建虚拟机并安装ubuntu20.04系统

·使用QEMU命令行工具创建一个虚拟机。为虚拟机配置CPU、内存、虚拟硬盘(如QCOW2格式)以及网络等基本资源。加载Ubuntu安装镜像(ISO),并通过该镜像在虚拟机内安装操作系统

1、创建虚拟机磁盘镜像

qemu-img create -f qcow2 ubuntu20.04.img 60G

2、创建虚拟机

qemu-system-x86_64 --enable-kvm -m 8048 -smp 4 \

-hda ubuntu20.04.img \

-cdrom ubuntu-20.04-desktop-amd64.iso \

-boot d \

-net nic \

-net tap,ifname=tap0,script=no,downscript=no

  • NVMe SSD透传到虚拟机
  1. 启用IOMMU(允许虚拟机通过透传的方式直接高效访问物理设备

(1)设置启动参数(本机处理器为Intel,若为AMD开机启动参数有所差异):

vim /etc/default/grub

GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt"

(2)保存文件并更新 grub

grub2-mkconfig -o /boot/grub2/grub.cfg

(3)系统重启

reboot

  1. 透传准备

在虚拟机已经创建并且安装了操作系统后,将主机的物理硬件资源(如NVMe硬盘)直通到虚拟机。通过VFIO绑定设备到虚拟机,使得虚拟机中的操作系统能够直接使用主机上的物理硬件。

  1. 驱动加载

modprobe vfio-pci

确认是否加载成功

lsmod | grep vfio

(2)找到要透传的NVMe设备的PCI地址

lspci | grep -i Non-Volatile

(3)找到NVMe 设备的所在IOMMU 组

find /sys/kernel/iommu_groups/ -type l | grep NVMe设备的PCI地址

在进行PCI直通时,所有需要直通到虚拟机的设备必须在同一个IOMMU组中。这是因为IOMMU组中的设备共享相同的地址空间,如果它们不在同一个组中,无法保证数据的隔离性,可能会导致系统不稳定或安全问题。

(4)设备解绑

"0000:46:00.0" | tee /sys/bus/pci/devices/0000:46:00.0/driver/unbind

(5)驱动覆盖

echo "vfio-pci" | tee /sys/bus/pci/devices/0000:46:00.0/driver_override

(6)设备绑定

echo "0000:46:00.0" | tee /sys/bus/pci/drivers/vfio-pci/bind

(7)验证设备绑定状态

lspci -vvv -s pci地址

Kernel driver in use: vfio-pci

  1. 设备透传到虚拟机

qemu-system-x86_64 --enable-kvm -m 8048 -smp 4 \

-hda ubuntu20.04.img \

-net nic \

-net tap,ifname=tap0,script=no,downscript=no \

-device vfio-pci,host=46:00.0

4、虚拟机中验证NVMe设备

  1. 检查NVMe设备

lsblk

(2)测试读写性能

创建文件系统

sudo mkfs.ext4 /dev/nvme0n1

挂载NVMe SSD

sudo mkdir /mnt/nvme

sudo mount /dev/nvme0n1 /mnt/nvme

读写文件

echo "Hello, NVMe SSD!" | sudo tee /mnt/nvme/greeting.txt

cat /mnt/nvme/greeting.txt

写入测试

dd if=/dev/zero of=/mnt/nvme/testfile bs=1G count=1 oflag=sync

读取测试

dd if=/mnt/nvme/testfile of=/dev/null bs=1G

QEMU网络配置:网桥模式

软件:bridge-utils 用于创建和管理网桥接口

一、创建虚拟网桥

brctl addbr br0

二、启用虚拟网桥

ip link set dev br0 up

启用网桥接口,使其可以接受流量。

三、创建 TAP 接口

ip tuntap add dev tap0 mode tap

brctl addif br0 tap0

创建一个 TAP 设备 tap0 并将其添加到网桥 br0 中。

四、启用 TAP 接口

ip link set dev tap0 up

启用 TAP 接口,使其可以发送和接收数据包。

五、配置 IP 地址

ip addr add 192.168.100.1/24 dev br0

注销虚拟网桥br0以及tap端口tap0

一、注销 tap0 端口

首先,确保虚拟机已经关闭,然后可以将 tap0 接口从 br0 网桥中移除,并将其关闭。

删除 tap0 端口:

ip link set tap0 down

brctl delif br0 tap0

删除 tap0 接口

ip link delete tap0

二、 注销 br0 网桥

关闭 br0 接口

ip link set br0 down

删除 br0 网桥

brctl delbr br0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值