我按照相关问题的答案中的说明进行操作:为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,安装程序无法识别存储,因此我不得不viostor
从Fedora项目。
Windows 安装顺利,性能惊人,但是当关闭虚拟机时,主机系统无法识别分区格式。
我发现一个有趣的现象:Windows 安装程序(viostor
加载了驱动程序)创建了裸盘上 Windows 通常需要的附加分区。 换句话说,它在所谓的分区内创建了分区. 这不可能,至少我是这么认为的。
/dev/sda4
存在于主机中,但未被识别为 NTFS 文件系统(确实不是预期的),也不是 LVM 或 LDM(已使用ldm工具)。
问题:我向 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