KVM 硬盘直通操作方法

本文最后更新于:2021年12月11日 上午

虚拟机是隔绝系统又享受多重快乐的工具,但过于隔绝导致虚拟机使用宿主机硬件时不是很方便,本文记录虚拟机直通宿主机硬盘的操作方法。

背景

由于走上了把NAS装在KVM虚拟机里的道路,为了速度和可靠性以及OMV的可用性,不得不研究KVM硬盘直通的方法。

  • 宿主机操作系统 Ubuntu 20.04
  • KVM 虚拟机操作系统 debian 9 (Windows 也可以)
  • 宿主机装有 6T 的物理磁盘,需要直通给虚拟机系统使用

操作流程

确定设备

  • 首先需要确定当前想要挂载的磁盘
1
lsblk -f
1
2
3
4
5
6
7
8
9
10
11
$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda xfs VS1 9a2c7b09-cc65-400d-b3c0-fc7709c8b3fd 5.4T 1% /disk/nas1
sdb xfs disk2 3bbbdabc-438e-46be-b2d7-b01f09baa8de 5.4T 1% /disk/nas2
sdc
├─sdc1 vfat 8256-9294 505.7M 1% /boot/efi
├─sdc2 xfs e3be39bc-a3d9-4a83-886f-af706c070147 525.9M 28% /boot
└─sdc3 LVM2_member XqJkfT-9pQk-SxcV-FpXV-D53R-8DNP-LKOpi2
├─ubuntu--vg-root xfs 7744d87a-3c9f-418e-b47f-4e23d4432d53 93.1G 15% /
└─ubuntu--vg-swap_1 swap 9f90bf3a-e5e0-43a7-9c59-5a08a37ade7e [SWAP]

我需要挂载的是 sda sdb 两块磁盘,这里以其中一块为例

打开虚拟机管理器

  • 关闭虚拟机
  • 打开虚拟机管理器
1
virt-manager
  • 打开要直通的虚拟机

添加设备

  • 点击蓝色叹号 -> 添加硬件

  • 选择存储 -> 自定义存储 -> 磁盘设备 -> SATA (下拉菜单有 bug 的话可以使用方向键调整选项) -> 管理

  • 选择 本地浏览 -> 找到 /dev/sdb 设备文件

此时可以查看一下旁边的 XML 配置信息

本质上刚刚的操作就是添加了一段 XML 在虚拟机的配置文件当中

  • 单击完成,可以看到用这个方法我添加了两块硬盘

测试

  • 开启虚拟机
  • 查看虚拟机磁盘设备信息
1
lsblk -f
1
2
3
4
5
6
7
8
9
$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda xfs VS1 9a2c7b09-cc65-400d-b3c0-fc7709c8b3fd
sdb xfs disk2 3bbbdabc-438e-46be-b2d7-b01f09baa8de
sr0
vda
|-vda1 ext4 d15943f9-07e3-4b0a-a9c7-21c25583fc7b 24.6G 8% /
|-vda2
`-vda5 swap bb586ff3-7d32-4d3b-b3fb-6e72ddc9edd8 [SWAP]
  • 其中 sda sdb 为我直通的磁盘

后记

  • 事实上网上大多数方法讲的是直接编辑虚拟机配置文件,此方法使用图形界面,新手容易操作
  • 在宿主机中输入命令:
1
virsh edit kvm-name
  • 可以看到指定虚拟机的配置 xml 文件
  • 我经过上述操作后在配置文件中多了两个块:
1
2
3
4
5
6
7
8
9
10
11
12
13
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/sda'/>
<target dev='sdb' bus='sata'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/sdb'/>
<target dev='sdc' bus='sata'/>
<address type='drive' controller='0' bus='0' target='0' unit='2'/>
</disk>

  • 也就是说,如果直接在xml中添加上述信息可以达到相同的效果,供大家参考

参考资料


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!