Mac mini M2 上 Multipass 启动失败:无 IPv4 地址分配
Mac mini M2 上 Multipass 启动失败:无 IPv4 地址分配
我明白你现在肯定挺头疼的——之前在M1 MacBook Air和M2 Mac mini上都好好的Multipass,自从换成有线网络(en0连宽带路由、en10连5G)后,创建的horus实例直接卡在了Unknown状态,连IPv4地址都拿不到,挂载也没生效,折腾这么久估计试了不少办法吧?
我仔细看了你给出的启动命令和cloud-config配置,发现了几个很关键的错误,应该就是导致实例初始化失败的元凶,咱们一步步来修正:
一、先揪出cloud-config里的明显错误
你的cloud-config有三处硬伤,直接会导致Multipass解析配置失败:
- 重复定义
users字段:你分别写了两次users:,先定义了peterbrooks又定义了ubuntu,cloud-config要求users是一个统一的列表,分开写会让配置失效; - 拼写错误:把启动后要执行的命令字段
runcmd写成了rumcmd,这个错误会让你指定的初始化命令根本跑不起来; - 用户配置不规范:虽然你用了SSH密钥,但
lock_passwd: false却没设置密码(当然如果只靠SSH密钥登录也能凑合用,但规范起见要么加密码要么把lock_passwd设为true)。
修正后的cloud-config应该是这样的:
#cloud-config groups: - staff users: - name: peterbrooks gecos: Peter Brooks primary_group: staff groups: staff home: /home/peterbrooks shell: /bin/bash lock_passwd: false # 可选:如果需要密码登录,这里可以添加加密后的密码,比如 password: $6$rounds=4096$your_encrypted_pass$ sudo: ALL=(ALL) NOPASSWD:ALL ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC87KASr+bkZjHljr7r3lwPQUVyZVrsVC3XRVouhpyTRma+bGrr3IHI2nn3W98kw6BOMdjIPozFbImEQTmSU3RVIvq3Lj7NIPNZ13baDYbQ5ju5MVYT3dtDaFkY+ZLZh6K5pazi41uYGGveWg8TbwBkWLjAuOqKWpI6mxz11tiFR3HJlys2/mld43QVYbPFHpD5Q3+J3keNx8ul/Xkc6xTIpmiYgSrmC1crl8nwTxIp7PP5AIVADYdb1i8VThqh4lETlJoxwFjbiAOvFjutSy6+iUZ1GeSc9vofOe6E4iN1iySV9h6/eakrcjFN2J0iavxqk9RgkdinLncqKfyGv4HCgGK7MT6/Dd1zqZB41mP6//9LxJPrwFHfw6JJ9q1xBfmi2xW1oT2LoRKPbi1C5bKu07r7IJcKo+338jejUqoXYXrpTyeyA5/6sO7o+7h5u7p/BYRkFmXPgDF7o+Mzwzqpvd4iHNjlWbKWr4EI0l0B1oWGAh6BRFmz8L8C0+Robqk= peterbrooks@horus - name: ubuntu gecos: Ubuntu Default primary_group: staff groups: staff home: /home/ubuntu shell: /bin/bash lock_passwd: false sudo: ALL=(ALL) NOPASSWD:ALL ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC630cVqpd+wvmw5kZiPlTsrPGH0B3/HVttYCEQ34y0rEQ5C4qllTV4sIkZAtqsAoP2JNFVFkhSUHKm5pBrWjmesNZny0VwKzd4KYjAi6ogK7lydkCIhTHi5XkU185B/i8Q7xVUPFngGGMJSIkjP4M0eq+udELpUfQBWO9OmI+KsfyB4qmEWk+fbGkVyIqtRVUW2rlFLZ3gGfL0ZEhnt66wmLqEKJPFnYj7PtdunesWajDeuBlzwUzYWdLAPwl68m7xzS3++yNsS+lpCy/yH9atNe61X8KapZBbNohuxWehvGR6Wre+t/jqhy0Y7tPJeNoYt7GEG5m3kJTOuGKjlEVELNdkvGJpPaMFyvB2OCEMaX4CmIcfCnsEeSVXykNh4tYQmMq7hKTZF5ncfYXaOkhCN70Z08IuVLlo5dgAEOzlnf5pprx2tmLyNKbZJPzeuM+14kWv4xR2jGPcrkku3FXK/i4Y+xf1Df685/w9mqAtiLHLWWGANFL1T3nAcmKV4bk= ubuntu@horus package_upgrade: true runcmd: - [uptime] final_message: > The system is finally up, after $UPTIME seconds.
二、修复启动命令里的参数错误
你的启动命令犯了一个致命错误:重复使用--cloud-init参数,还把ISO镜像路径传给了--cloud-init!--cloud-init是用来指定cloud-config配置文件的,而ISO镜像应该用--image参数指定(甚至你如果用官方的Ubuntu 22.04 ARM64镜像,直接写--image 22.04就行,根本不用自己下载ISO)。重复的--cloud-init会让Multipass不知道该用哪个配置,直接搞崩初始化流程。
修正后的启动命令应该是这样的(先把旧的horus实例删掉再跑这个命令):
# 先清理旧实例,避免残留配置干扰 multipass delete horus && multipass purge # 用修正后的配置创建实例 multipass launch -c 2 -d 30G -m 12G -n horus \ --mount /users/peterbrooks:/mnt/peterbrooks \ --image 22.04 \ --cloud-config '/var/root/Library/Application Support/multipassd/qemu/vault/instances/cloud_config' \ --network en0 \ -vvvv
三、排查有线网络的桥接问题
如果修正后还是拿不到IPv4,那可能是有线网络en0的桥接权限问题:
- 先检查en0的状态:
ip addr show en0,确保它处于UP状态,并且已经获取到了本地网络的IP; - 重启Multipass服务,重置网络相关的权限:
sudo launchctl stop com.canonical.multipassd sudo launchctl start com.canonical.multipassd
- 可以先去掉
--network en0参数,用Multipass默认的网络创建实例,如果能正常获取IPv4,说明问题出在有线网络的桥接上,这时候可以检查Multipass的网络权限:系统设置→隐私与安全性→完全磁盘访问权限,确保Multipass在列表里;或者用sudo multipass launch ...运行命令,提升权限尝试桥接。
四、验证修复效果
实例创建后,运行以下命令验证:
# 查看实例状态 multipass list # 查看实例详细信息 multipass info horus # 登录实例验证用户配置 multipass shell horus # 检查挂载点 ls /mnt/peterbrooks
如果一切正常,multipass list应该会显示实例状态为Running,并且有正常的IPv4地址,挂载点也能正常访问。
备注:内容来源于stack exchange,提问作者Peter Brooks
相关产品推荐
相关产品推荐

