我在同一个磁盘上安装了两台虚拟机,每台虚拟机都安装了 clamav。两台虚拟机都会同时定期运行相同病毒扫描签名的更新,这每次都会给磁盘性能带来不必要的压力。由于下载的是相同的签名,我想在这种情况下减少冗余。
最初的想法是让它们共享一个虚拟磁盘,这些签名会下载一次,这样虚拟机就只需从那里读取它们。因此,只有一个虚拟机需要对磁盘具有写访问权限才能下载,而另一个虚拟机具有只读访问权限。
我使用以下命令将虚拟磁盘连接到第一个虚拟机:
$ virsh attach-disk <VM1> <virtDisk> vdb --cache none
但是,在尝试将同一个虚拟磁盘成功连接到第一个虚拟机后,再将其连接到第二个虚拟机时,会出现以下情况:
$ virsh attach-disk <VM2> <virtDisk> vdb --cache none --mode readonly
发生错误
unable to execute QEMU command 'device-add': Failed to get shared "write" lock
。是不是这样就不可能了,还是我漏掉了一个选项?
为了这个目的,在虚拟机之间共享这些签名的最佳方法是什么?
答案1
您需要一些集群感知文件系统来在多个非 R/O 使用者之间共享任何块设备。请参阅此处的完整内容:
https://forums.starwindsoftware.com/viewtopic.php?f=5&t=1392
对于任何块存储(例如 SAS、FC、iSCSI 或虚拟块设备)来说都是相同的。
答案2
虚拟机管理程序不支持同时将虚拟存储共享给两个不同的虚拟机。这样做毫无意义,因为一个虚拟机(或两个虚拟机)不可能拥有一致的存储视图,即使其中一个虚拟机是“只读”的。客户操作系统不会期望任何其他内容写入存储。
要在虚拟机之间共享存储,请使用为此目的而设计的现有解决方案(例如 NFS 或 iSCSI),或者如果您确实想使其比用例实际需要的复杂得多,则可以使用集群文件系统。