文件系统挂载

Lima 支持多种将主机文件系统挂载到客户机的方法。

默认挂载类型如下表所示:

Lima 版本默认
< 0.10reverse-sshfs + 内置 SFTP 服务器
>= 0.10reverse-sshfs + OpenSSH SFTP 服务器
>= 0.17QEMU 使用 reverse-sshfs + OpenSSH SFTP 服务器,VZ 使用 virtiofs
>= 1.0QEMU 使用 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.0Lima >= 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"

注意事项

  • 当访问原本在 Windows 磁盘上的文件时,WSL2 文件权限可能无法完全按预期工作(更多信息
  • WSL2 的磁盘共享系统使用 9P 协议服务器,使性能类似于 Lima 的 9p 模式(更多信息

挂载 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 事件