文件系统挂载
Lima 支持多种将主机文件系统挂载到客户机的方法。
默认挂载类型如下表所示:
Lima 版本 | 默认 |
---|---|
< 0.10 | reverse-sshfs + 内置 SFTP 服务器 |
>= 0.10 | reverse-sshfs + OpenSSH SFTP 服务器 |
>= 0.17 | QEMU 使用 reverse-sshfs + OpenSSH SFTP 服务器,VZ 使用 virtiofs |
>= 1.0 | QEMU 使用 9p(非 Windows),VZ 使用 virtiofs |
挂载类型
reverse-sshfs
“reverse-sshfs” 挂载类型通过在主机上运行 SFTP 服务器来暴露主机文件系统。 虽然主机作为 SFTP 服务器工作,但主机不打开任何 TCP 端口, 因为主机发起与客户机的 SSH 连接并让客户机通过 stdin 连接到 SFTP 服务器。
配置示例:
limactl start --mount-type=reverse-sshfs
mountType: "reverse-sshfs"
mounts:
- location: "~"
sshfs:
# 启用 SSHFS 缓存将提高挂载文件系统的性能,
# 但代价是可能无法及时反映主机上所做的更改。
# 警告:当缓存被禁用时,PHP 文件系统访问似乎无法正常工作。
# 🟢 内置默认值:true
cache: null
# SSHFS 有一个名为 'follow_symlinks' 的可选标志。这允许挂载
# 在客户操作系统中正确解析,并允许访问
# 符号链接的内容。因此,主机系统上的符号链接文件和文件夹
# 在客户操作系统中看起来和感觉就像常规文件目录。
# 🟢 内置默认值:false
followSymlinks: null
# SFTP 驱动程序,"builtin" 或 "openssh-sftp-server"。推荐使用 "openssh-sftp-server"。
# 🟢 内置默认值:如果找到 OpenSSH SFTP Server 二进制文件则为 "openssh-sftp-server",否则为 "builtin"
sftpDriver: null
自 Lima v0.10 起,当在主机上检测到 OpenSSH SFTP Server 二进制文件(如 /usr/libexec/sftp-server
)时,sftpDriver
的默认值已设置为 “openssh-sftp-server”。
Lima v0.10 之前使用 “builtin” 作为 SFTP 驱动程序。
注意事项
- 当 SSH 连接被关闭时,挂载被禁用。
- 客户机中受损的
sshfs
进程可能可以访问未暴露的主机目录。
9p
“9p” 挂载类型是通过使用 QEMU 的 virtio-9p-pci 设备实现的。 virtio-9p-pci 也被称为 “virtfs”,但请注意这与 virtio-fs 无关。
配置示例:
limactl start --vm-type=qemu --mount-type=9p
vmType: "qemu"
mountType: "9p"
mounts:
- location: "~"
9p:
# 支持的安全模型有 "passthrough"、"mapped-xattr"、"mapped-file" 和 "none"。
# "mapped-xattr" 和 "mapped-file" 对持久 chown 有用,但与符号链接不兼容。
# 🟢 内置默认值:"none"(自 Lima v0.13 起)
securityModel: null
# 选择 9P 协议版本。有效选项有:"9p2000"(传统)、"9p2000.u"、"9p2000.L"。
# 🟢 内置默认值:"9p2000.L"
protocolVersion: null
# 用于 9p 数据包有效载荷的字节数,其中 4KiB 是绝对最小值。
# 🟢 内置默认值:"128KiB"
msize: null
# 指定缓存策略。有效选项有:"none"、"loose"、"fscache" 和 "mmap"。
# 如果你看到默认 "fscache" 的稳定性问题,请尝试选择 "mmap" 或 "none"。
# 参见 https://www.kernel.org/doc/Documentation/filesystems/9p.txt
# 🟢 内置默认值:非可写挂载为 "fscache",可写挂载为 "mmap"
cache: null
“9p” 挂载类型需要 Lima v0.10.0 或更高版本。
注意事项
- “9p” 挂载类型已知与 CentOS、Rocky Linux 和 AlmaLinux 不兼容,因为它们的内核不支持
CONFIG_NET_9P_VIRTIO
。
virtiofs
警告 “virtiofs” 模式在 Linux 主机上是实验性的
⚡ 要求 | Lima >= 0.14, macOS >= 13.0 | Lima >= 0.17.0, Linux, QEMU 4.2.0+, virtiofsd (Rust 版本) |
---|
“virtiofs” 挂载类型通过 virtio-fs 设备实现,在 macOS 上使用 apple Virtualization.Framework 共享目录,在 Linux 上使用 virtiofsd。 Linux 客户内核必须启用 CONFIG_VIRTIO_FS 支持才能使用此功能。
配置示例:
limactl start --vm-type=vz --mount-type=virtiofs
vmType: "vz" # 仅适用于 macOS;Linux 使用 'qemu'
mountType: "virtiofs"
mounts:
- location: "~"
注意事项
- 对于 macOS,“virtiofs” 挂载类型仅在 macOS 13 或更高版本上配合
vmType: vz
配置受支持。另请参阅vmtype
。 - 对于 Linux,“virtiofs” 挂载类型需要 Rust 版本的 virtiofsd。
使用来自 QEMU 的版本(通常打包为
qemu-virtiofsd
)不会工作,因为它需要 root 访问权限才能运行。
wsl2
警告 “wsl2” 模式是实验性的
⚡ 要求 | Lima >= 0.18 + (Windows >= 10 Build 19041 或 Windows 11) |
---|
“wsl2” 挂载类型依赖于使用 WSL2 的原生磁盘共享,其中根磁盘默认在 /mnt/$DISK_LETTER
(例如 /mnt/c/
)可用。
配置示例:
limactl start --vm-type=wsl2 --mount-type=wsl2
vmType: "wsl2"
mountType: "wsl2"
注意事项
挂载 Inotify
警告 “mountInotify” 是实验性的
⚡ 要求 | Lima >= 0.21.0 |
---|
mountInotify
支持为所有不同的挂载类型(如 9p、virtiofs 等)启用 inotify 支持。
当启用 mountInotify 时,
- hostagent 将监听并从主机发送 inotify 事件到客户机。
- 客户机将修改文件以在客户机端触发 inotify
此支持仅对可写挂载启用,因为只有可写挂载的客户机才能触发 inotify
配置示例:
limactl start --mount-inotify
mountInotify: true
mounts:
- location: "~"
writable: true
注意事项
- 对于
mountType: 9p
,从监听目录的嵌套文件不会触发 Inotify 事件。 - 当从主机删除文件时,不会触发 Inotify 事件