前提
在 Windows 上,Windows Subsystem for Linux(我使用 WSL 2,但据我所知,这也适用于 WSL 1)使客户 Linux 实例的文件系统通过 9p(特别是 9p2000.L)可供 Windows 主机使用。有没有办法在 VirtualBox 客户操作系统和主机操作系统之间做类似的事情?我对多个主机操作系统感兴趣,包括:
- 苹果系统
- 视窗
以及多个客户操作系统,包括:
- 苹果系统
- FreeBSD
- Linux
- 后来,当我稍微勇敢一点,准备和他们混在一起时:
-
(主要/部分题外话: 是的,我知道这个项目看起来好像已经死了,但网站已经过时了。目前大多数活动都在项目的 Discord 服务器上。最近记忆中最令人兴奋的事情是比塞尔曼 在他用自己从源代码构建的内核替换苹果自带的 XNU 内核后,成功让 macOS 启动,但那是 2022 年中期了。)
ravynOS(网站,GitHub 存储库)
(ravynOS 基于 FreeBSD,因此这个问题的答案可能目前适用于它。ravynOS 中的 macOS 兼容性是龍距离目标还很远,所以 macOS 答案还不适用于 ravynOS。)
-
(请完全自由地关注其中更知名和维护更好的;我在这里并不要求过多的努力。)
我知道的一些潜在的调查途径是:
9p,如前所述,WSL2 所使用的。
虚拟
(笔记:
- 苹果系统自 macOS Mojave 10.14 以来,已经具备一些基本的 virtio 功能,包括由 virtio 支持的 9p kext。但我不确定它是服务器、客户端还是两者兼而有之。)
虚拟文件系统
不是 虚拟,因为其最突出的文档指出它用于从主机操作系统到客户操作系统共享文件,而不是像我希望的那样反过来。
virt-manager,也许......?
SSH文件系统
(答案可以选择使用其中一个或多个作为其涵盖的解决方案。)此外,我知道 QEMU/KVM 支持 virito/9p,但我想知道/看看我正在寻找的那种文件共享安排是否可以通过 VirtualBox 实现。我对它很熟悉,而且它更容易设置,至少在您不必修改原始配置文件或执行 CLI 命令的意义上。
背景原理
我想知道如何与主机操作系统共享虚拟机客户操作系统的文件系统内容的原因是:
为了:
- 内核和操作系统开发
- 未来可能会进行内核扩展开发
性能开销发挥作用的地方:
- 当主机操作系统访问客户操作系统文件系统中的文件时,
- 并非每次客户操作系统都需要访问构建和其他项目文件时都如此。
我不想将构建/项目文件存储在主机操作系统文件系统的某个位置,从而迫使客户操作系统承受性能开销和必须通过所使用的文件共享机制往返的成本。客户操作系统访问其包含的 VM 磁盘映像中的文件系统位置应该获得接近本机/原始性能,或至少更接近本机或更高的性能。
答案1
我自己从来没有听说过 9p,但我发现https://wiki.qemu.org/Documentation/9psetup尤其是https://wiki.qemu.org/Documentation/9p有趣。
我还认为 Qemu 和 Virsh 可能更适合您的开发和调试要求(而且速度可能更快)。Qemu 和/或 libvirt 在 MacOS 平台上受支持,Windows 可能也可以使用,但我觉得 MS 的选择和设计限制更多(HyperV 是他们的东西)
为什么不是 Linux 主机?但我将继续回答您的广泛问题。考虑到您的背景原理,为什么不在需要时安装虚拟硬盘?libguestfs 或我最喜欢的 qemu-nbd 可能允许您在需要时安装它。qemu-ndb 过去曾为我使用过多种客户端操作系统,包括 mac、xbox 和 ntfs(windows)
如何在 QEMU 中无需网络即可与主机共享目录?似乎可以部分回答您的问题?Qemu 的系统和内核调试能力也为工具箱增添了许多功能。Virsh 作为其前端可能有点笨拙,但在某种程度上更加自动化。
答案2
VirtualBox 具有共享文件夹功能,当您在客户机操作系统中安装客户机添加项时,该功能即可使用(第 4 章 宾客添加)。
我没有使用共享文件夹的经验,但我已经在一些虚拟机中安装了 Guest Additions 以支持鼠标指针集成。
编辑:我只是仔细阅读上面的链接,发现了访客控制文件管理器(4.8. 访客控制文件管理器) 可能比共享文件夹更友好。