平台|Unraid等采用libvirt平台下的带SMART信息的硬盘直通教程

很水的一篇教程,就是讲讲怎么像VMware的RDM一样,带SMART信息地把硬盘直通给虚拟机。适用于几乎所有基于libvirt的平台,包括但不限于Unraid, virt-manager, virsh等。
这个的原理是lun passthrough,限制比较多,比如说直通的硬盘必须挂在SCSI总线下,不一定适用于全部场合。性能上可能不如块设备直通,即使采用最快的virtio-scsi也不一定有virtio-blk的水平,虽然这个差异大部分情况下可以忽略不计。
下面是正文部分。这边以在Ubuntu 20.04上用virsh为例,其它平台可能有非常细微的不同,请自行调整。
首先开一个终端,用下面这条命令找到要直通的硬盘
ls /dev/disk/by-id/
平台|Unraid等采用libvirt平台下的带SMART信息的硬盘直通教程
文章插图
会有像这样的一大堆结果,以 part* 结尾的是分区,我们先不管它们。这里设备的命名规则是“[总线名]_[设备型号]_[设备序列号]”
这里一个设备会出现多次,比如图上的"ata-WDC_WD10EZEX-00RKKAO_WD-WMCXXXXXXXXX" 和 "scsi-1ATA_WDC_WD10EZEX-00RKKAO_WD-WMCXXXXXXXXX"表示的是同一个设备,接下来将以前者为例。我们先记下这个路径,也就是"/dev/disk/by-id/ata-WDC_WD10EZEX-00RKKAO_WD-WMCXXXXXXXXX"。
接下来我们给虚拟机添加一个虚拟的SCSI控制器(之前已经添加过了就不用添加了),进入xml编辑界面,找到 ,在下面加入一行:

model首选virtio-scsi,性能最好。如果需要兼容性,比如用在黑群晖下,请设成lsisas1068,这个就是VMware的LSI Logic SAS。
最后是把直通的硬盘挂到SCSI控制器下,还是在 当中,加入下面的内容:



source的dev修改成你需要直通的设备的路径,然后target的dev请自行调整,格式是sd[a-z],例如sda,sdb,并且不能与已有的重复。超过26个磁盘的话是sdaa,sdab……,和Excel的列号类似,最多可以到sdzzz。
保存退出,然后启动虚拟机,虚拟机里就可以读到硬盘的smart了。
平台|Unraid等采用libvirt平台下的带SMART信息的硬盘直通教程
文章插图
平台|Unraid等采用libvirt平台下的带SMART信息的硬盘直通教程