内部数据结构
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.0
vz
:使用 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
:指向正在使用该磁盘的实例目录的符号链接
当使用 vmType: vz
(Virtualization.framework)时,在启动时,在 additionalDisks
中指定的任何 qcow2(默认)格式磁盘都将转换为 RAW,因为 Virtualization.framework 只支持挂载 RAW 磁盘。这种转换使额外磁盘能够与 Virtualization.framework 和 QEMU 一起工作,但在与磁盘交互时会产生一些后果。最重要的是,常规的 macOS 默认 cp
命令将复制 整个 虚拟磁盘大小,而不仅仅是 已使用/已分配 的部分。复制仅已使用数据的最简单方法是向 cp 添加 -c
选项:cp -c old_path new_path
。cp -c
使用 clonefile(2) 创建磁盘的写时复制克隆,应该会立即返回。
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.gz
boot.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.tgz
LIMA_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)