答案1
在客户机和主机之间打洞不是一件容易的事情,因为它是攻击/逃脱的完美载体。但我知道,有时用例大于风险。但我不会尝试使用 9pfs,而是建议看看伊夫什梅姆。
这虽然不是很好,而且也不是最常用的,但至少或多或少可以满足您的要求。
人们一直在尝试使用示例应用程序 ivshmem-server/client 进行生产(不应鼓励这样做),因此它们已在 Debian 和 Ubuntu 的 qemu 5.2 及更高版本中删除。但如果您想通过这种方式,您仍然可以自己构建和使用这些示例工具(或使用仍然拥有它们的 Ubuntu Focal 进行实验)。
如果你想直接针对接口进行编码,你可能想从这里开始ivshmem 教程示例。
这甚至可以很好地工作,并且更具表现力libvirt XML。 这:
<shmem name='my_shmem0' role='peer'>
<model type='ivshmem-plain'/>
<size unit='M'>4</size>
</shmem>
自动给我
-object '{"qom-type":"memory-backend-file","id":"shmmem-shmem0","mem-path":"/dev/shm/my_shmem0","size":4194304,"share":true}' \
-device '{"driver":"ivshmem-plain","id":"shmem0","memdev":"shmmem-shmem0","master":"off","bus":"pci.9","addr":"0x1"}' \
$ lspci
...
08:01.0 RAM memory: Red Hat, Inc. Inter-VM shared memory (rev 01)
您需要获得权限。例如,主机中写入的程序/用户可以成为 kvm 组的一部分(再次强调,不建议轻易授予权限,因为它授予的权限并非每个人都应该拥有)。
但是然后您就可以按照教程所概述的那样(嗯,相应地修改大小和 pci id)从客户机和主机访问它。