在 virt-manager 中为 QEMU/KVM 虚拟机添加物理分区

在 virt-manager 中为 QEMU/KVM 虚拟机添加物理分区

我按照相关问题的答案中的说明进行操作:为KVM虚拟机添加物理磁盘

VM 的 .xml 文件中的最终代码如下:

<disk type='block' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source dev='/dev/disk/by-partuuid/d8b63353-34n6-6587-ac07-810dmf36d544'/>
  <target dev='vdb' bus='virtio'/>
  <boot order='2'/>
  <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
</disk>

请注意我如何使用/dev/disk/by-partuuid/d8b63353-34n6-6587-ac07-810dmf36d544元素<source>,而不是/dev/sda4

令我困扰的是,我的用例是通过分割到 QEMU,而不是磁盘。我安装了 Windows 10,安装程序无法识别存储,因此我不得不viostorFedora项目

Windows 安装顺利,性能惊人,但是当关闭虚拟机时,主机系统无法识别分区格式。

我发现一个有趣的现象:Windows 安装程序(viostor加载了驱动程序)创建了裸盘上 Windows 通常需要的附加分区。 换句话说,它在所谓的分区内创建了分区. 这不可能,至少我是这么认为的。

/dev/sda4存在于主机中,但未被识别为 NTFS 文件系统(确实不是预期的),也不是 LVM 或 LDM(已使用ldm工具)。

虚拟机正在正确启动UEFI 模式Q35 芯片组

问题:我向 virt-manager 添加分区的步骤是否正确,还是应该只针对磁盘执行此操作 - 而不针对分区执行此操作?此外,我最终得到的分区类型或格式是什么?

答案1

解决方案似乎正在通过整个块设备,类似/dev/sda或等同于/dev/disk/by-id/,到<source dev=''>设置。

这使得 Windows 安装程序可以看到现有的分区,包括主机中的根分区。

只要满足以下条件,就不会存在任何冲突:

  • 您不会尝试在客户机中挂载或修改已在主机中挂载的分区;并且

  • 当虚拟机处于开启状态时,您不会挂载/修改主机中客户机当前使用的分区。

关于第一点,在启动虚拟机之前,当然需要从主机卸载 ESP(EFI 系统分区)。我首先为此编写了一个脚本,然后想出了更好的解决方案以 QEMU 自动化钩子的形式提供。我将在https://gitlab.com/ranolfi/rvirtesp

很酷的是,您还可以通过在主板的启动菜单中选择新的条目,以本地启动虚拟化操作系统(就像双启动一样)。

我不确定这是否“受支持”。但我已经用了将近一年了,没有问题。

答案2

如果您想将分区作为原始设备传递,您只需将 /dev/sdaX 作为原始映像文件名,它就会使用它。但是,如果您使用例如 sda1,它不会理解它是哪个分区并将该分区视为整个磁盘。如果您出于显而易见的原因无法将 /dev/sda 作为源(使用主机上的其他 /dev/sdaY),您可以尝试 iscsi。但它也可能使分区被视为整个磁盘。这意味着您看不到您的文件和内容。

解决这个问题的最佳选择似乎是通过 samba 共享。另一个选项是将分区映射到虚拟磁盘上。另一个选项是将挂载的分区共享为文件夹,qemu 有这个选项... Fedora virtio 驱动程序可能有这个选项,如 vmwares vmtools。

我在 virtio 网络上使用超过 4GB/s 速度的 ISCSI。但我已将 virbr 和 virbr-nic0 的 mtu 更改为 9000,并增加了 txqueulen。无需更改客户机 mtu...

无论如何,如果您想尝试 iscsi,请访问以下网址:

首先安装 open-iscsi 和 tgt

sudo apt-get install open-iscsi tgt

然后你配置它

nano /etc/tgt/conf.d/iscsi.conf

输入你的分区名称来代替 sdb1(目标名称会有所不同):

<target iqn.2019-11.example.com:lun1>
     # Provided device as an iSCSI target
     backing-store /dev/sdb1                             
     initiator-address 192.168.0.102 
    incominguser iscsi-user password
     outgoinguser iscsi-target secretpass
</target>

然后重启服务

sudo systemctl restart tgt 

然后检查

tgtadm --mode target --op show

打开 Windows 并使用 iscsi 启动器连接它。Windows 会将其视为内部磁盘,享受高速块访问的乐趣。

如果您添加 NAT nic 并将其设置为 virtio 安装 virtio redhat 驱动程序,它可能会非常快。不要忘记通过 192.168.123.XXX 而不是您的桥接 LAN ip 进行连接。

注意:要小心,首先用测试分区进行测试... iqn 必须是 az 或 1-9。将密码和 secretpass 留空,这些有一个标准,它们可能不接受空格或下划线...

答案3

思考根据我在此处所读到的内容,即使您在主机操作系统中使用其余部分,您也可以将整个 /dev/sda(或任何一个)传递给您的客户操作系统。只要您不尝试在任一操作系统控制的空间中执行任何操作(因此,请卸载您的 E(FI)SP,并确保如果您已安装任何 Windows 和/或 NTFS 或 FAT* 数据分区,也请卸载它们(即使您不打算使用它们,Windows 也会随机拖走并使用任何 NTFS 或我认为甚至 FAT32 驱动器作为临时安装文件空间,至少对我来说是这样)。

因此,请确保主机操作系统上没有安装任何 Windows 知道如何交互的东西。(或者,您可能能够将它们重新安装为主机操作系统中的只读,但如果 Windows 使用它,您可能会得到垃圾输出……但至少没有永久性损害)。

Windows 不知道如何与非 Microsoft 分区交互,因此只要您不尝试更改现有非 MS 分区的布局,它就不会影响您的其他主机操作系统分区。现在,它可能会创建另一个系统保留分区或类似分区,但您可以通过刷新主机操作系统中的分区布局来解决这个问题:

hdparm -z /dev/sdX

或者

blockdev --rereadpt /dev/sdX

或者

sfdisk -R /dev/sdX

或者

partprobe /dev/sdX

相关内容