内部数据结构
Lima 主目录 (${LIMA_HOME})
默认为 ~/.lima。
注意,我们故意避免在 macOS 上使用 ~/Library/Application Support/Lima。
我们使用 ~/.lima 以便为套接字路径留有足够的空间,在 macOS 上套接字路径必须少于 104 个字符。
Unix:该目录不能位于 NFS 文件系统上,它需要是本地的。
配置目录 (${LIMA_HOME}/_config)
配置目录包含适用于所有实例的全局 lima 设置。
用户身份:
Lima 创建一个默认身份并使用其公钥作为授权密钥来访问所有 lima 实例。此外,lima 还会配置来自 ~/.ssh/*.pub 的所有公钥,因此用户可以使用 ssh 端点而无需显式指定身份。
user:私钥user.pub:公钥
实例目录 (${LIMA_HOME}/<INSTANCE>)
实例目录包含以下文件:
元数据:
lima-version:用于创建此实例的 Lima 版本lima.yaml:YAML 配置文件protected:空文件,由limactl protect使用
cloud-init:
cloud-config.yaml:cloud-init 配置,仅供参考。cidata.iso:cloud-init ISO9660 镜像。参见cidata.iso。
Ansible:
ansible-inventory.yaml:Ansible 节点清单。参见 ansible。
磁盘:
basedisk:基础镜像diffdisk:差异镜像 (QCOW2)
内核:
kernel:内核kernel.cmdline:内核命令行initrd:initrd
QEMU:
qemu.pid:QEMU PIDqmp.sock:QMP 套接字qemu-efi-code.fd:QEMU UEFI 代码(不总是存在)
VZ:
vz.pid:VZ PIDvz-identifier:虚拟机的唯一机器标识符文件vz-efi:虚拟机的 EFI 变量存储文件
串口:
serial.log:默认串口日志(仅 QEMU),用于调试serial.sock:默认串口套接字(仅 QEMU),用于调试(用法:socat -,echo=0,icanon=0 unix-connect:serial.sock)serialp.log:PCI 串口日志(仅 QEMU (ARM)),用于调试serialp.sock:PCI 串口套接字(仅 QEMU (ARM)),用于调试(用法:socat -,echo=0,icanon=0 unix-connect:serialp.sock)serialv.log:virtio 串口日志,用于调试serialv.sock:virtio 串口套接字(仅 QEMU),用于调试(用法:socat -,echo=0,icanon=0 unix-connect:serialv.sock)
SSH:
ssh.sock:SSH 控制主套接字ssh.config:用于ssh -F的 SSH 配置文件。Lima 自身不使用。
VNC:
vncdisplay:VNC 显示主机/端口vncpassword:VNC 显示密码
客户机代理:
每个驱动程序使用自己的通信模式
qemu:使用 virtio-portio.lima-vm.guest_agent.0vz:使用 vsock 端口 2222wsl2:使用空闲的随机 vsock 端口 回退是通过 ssh 端口使用端口转发ga.sock:通过 SSH 转发到客户机中的/run/lima-guestagent.sock
主机代理:
ha.pid:hostagent PIDha.sock:hostagent REST APIha.stdout.log:hostagent 标准输出(JSON 行,参见pkg/hostagent/events.Event)ha.stderr.log:hostagent 标准错误(人类可读消息)
磁盘目录 (${LIMA_HOME}/_disk/<DISK>)
磁盘目录包含以下文件:
数据磁盘:
datadisk:附加到实例的 qcow2 或 raw 磁盘
锁:
in_use_by:指向正在使用该磁盘的实例目录的符号链接user-data:Cloud-init 用户数据meta-data:Cloud-init 元数据network-config:Cloud-init 网络配置版本 2lima.env:在boot.sh处理期间可用的LIMA_CIDATA_*环境变量(见下文)param.env:对应于lima.yaml中param设置的PARAM_*环境变量lima-guestagent:Lima 客户机代理二进制文件nerdctl-full.tgz:nerdctl-full-<VERSION>-<OS>-<ARCH>.tar.gzboot.sh:启动脚本boot/*:启动脚本模块util/*:实用程序命令脚本,在启动脚本模块中执行provision.data/*:自定义配置文件(数据)provision.dependency/*:自定义配置脚本(依赖项)provision.system/*:自定义配置脚本(系统)provision.user/*:自定义配置脚本(用户)provision.yq/*:自定义配置脚本(yq)etc_environment:要添加到/etc/environment的环境变量(也在boot.sh期间加载)
ls 也只会显示磁盘的完整/虚拟大小。要查看已分配的空间,可以使用 du -h disk_path 或 qemu-img info disk_path。更多详情请参见 #1405。
模板目录 (${LIMA_HOME}/_templates)
模板目录可以存储可以用 template:// 模式引用的额外模板文件。
如果模板目录存在(且未设置 $LIMA_TEMPLATES_PATH),则会在搜索包含 Lima 自身捆绑的所有模板的 /usr/local/share/lima/templates 默认目录之前搜索此目录。
Lima 缓存目录 (~/Library/Caches/lima)
在 macOS 上目前硬编码为 ~/Library/Caches/lima。
在 Linux 上使用 $XDG_CACHE_HOME/lima,通常为 $HOME/.cache/lima。
在 Windows 上使用 %LocalAppData%\lima,即 C:\Users\<USERNAME>\AppData\Local\lima。
下载缓存 (~/Library/Caches/lima/download/by-url-sha256/<SHA256_OF_URL>)
该目录包含以下文件:
url:原始 url 文本,不带 “\n”data:数据<ALGO>.digest:数据的摘要,采用 OCI 格式。 例如,文件名sha256.digest,内容为sha256:5ba3d476707d510fe3ca3928e9cda5d0b4ce527d42b343404c92d563f82ba967
Ansible
实例目录包含一个清单文件,可能与 Ansible playbook 和命令一起使用。 参见 构建 Ansible 清单 关于动态清单。
cidata.iso
cidata.iso 包含以下文件:
user-data:Cloud-init 用户数据meta-data:Cloud-init 元数据network-config:Cloud-init 网络配置版本 2lima.env:在boot.sh处理期间可用的LIMA_CIDATA_*环境变量(见下文)param.env:对应于lima.yaml中param设置的PARAM_*环境变量lima-guestagent:Lima 客户机代理二进制文件nerdctl-full.tgz:nerdctl-full-<VERSION>-<OS>-<ARCH>.tar.gzboot.sh:启动脚本boot/*:启动脚本模块util/*:实用程序命令脚本,在启动脚本模块中执行provision.system/*:自定义配置脚本(系统)provision.user/*:自定义配置脚本(用户)etc_environment:要添加到/etc/environment的环境变量(也在boot.sh期间加载)
最大文件名长度 = 30
卷标签
卷标签是 “cidata”,由 cloud-init NoCloud 定义。
环境变量
LIMA_CIDATA_DEBUG:limactl start命令的--debug标志的值。LIMA_CIDATA_NAME:lima 实例名称LIMA_CIDATA_MNT:磁盘的挂载点。/mnt/lima-cidata。LIMA_CIDATA_USER:用户名字符串LIMA_CIDATA_UID:数字 UIDLIMA_CIDATA_COMMENT:全名或注释字符串LIMA_CIDATA_HOME:客户机主目录LIMA_CIDATA_SHELL:客户机登录 shellLIMA_CIDATA_HOSTHOME_MOUNTPOINT:主机主目录的挂载点,如果未挂载则为空LIMA_CIDATA_MOUNTS:Lima 挂载的数量LIMA_CIDATA_MOUNTS_%d_MOUNTPOINT:Lima 挂载的第 N 个挂载点(N=0, 1, …)LIMA_CIDATA_MOUNTTYPE:Lima 挂载的类型(“reverse-sshfs”、“9p”、…)LIMA_CIDATA_DATAFILE_%08d_OVERWRITE:如果数据文件已存在时应该覆盖,则设置为 “true”。LIMA_CIDATA_DATAFILE_%08d_OWNER:设置为数据文件的所有者。LIMA_CIDATA_DATAFILE_%08d_PATH:设置为数据文件应复制到的路径。LIMA_CIDATA_DATAFILE_%08d_PERMISSIONS:设置为数据文件的文件权限(八进制)。LIMA_CIDATA_CONTAINERD_USER:如果要设置无根 containerd,则设置为 “1”LIMA_CIDATA_CONTAINERD_SYSTEM:如果要设置系统级 containerd,则设置为 “1”LIMA_CIDATA_CONTAINERD_ARCHIVE:containerd 归档的名称。nerdctl-full.tgzLIMA_CIDATA_SLIRP_GATEWAY:设置为 SLIRP 网络上主机的 IP 地址。192.168.5.2。LIMA_CIDATA_SLIRP_DNS:设置为 SLIRP 网络上 DNS 的 IP 地址。192.168.5.3。LIMA_CIDATA_SLIRP_IP_ADDRESS:设置为 SLIRP 网络上客户机的 IP 地址。192.168.5.15。LIMA_CIDATA_UDP_DNS_LOCAL_PORT:设置为 hostagent dns 服务器的 udp 端口号(未启用时为 0)。LIMA_CIDATA_TCP_DNS_LOCAL_PORT:设置为 hostagent dns 服务器的 tcp 端口号(未启用时为 0)。
虚拟机生命周期

(基于 Lima 0.8.3)