在Arm64硅MacBook Pro上用Vagrant+Qemu运行amd64 AlmaLinux9 VM遇SSH卡顿
在Arm64 Silicon MacBook Pro上解决Vagrant+Qemu运行amd64 AlmaLinux 9的SSH卡顿问题
问题背景
在Arm64(Silicon)MacBook Pro上,使用Vagrant 2.4.3和Qemu 9.2.0运行amd64架构的AlmaLinux 9虚拟机时,执行vagrant up --provider qemu会卡在SSH连接阶段,日志显示等待虚拟机启动但无后续SSH响应;尝试通过串口连接控制台也出现卡顿,无法查看虚拟机内部状态。但使用centos/7镜像时可正常启动并完成SSH配置。
可能原因
AlmaLinux 9的官方镜像在Qemu跨架构(Arm64模拟x86_64)环境下,存在CPU兼容性、内核启动参数或SSH服务初始化适配问题,导致虚拟机启动后无法正常响应SSH请求。
解决方案
1. 调整Qemu CPU配置
将原配置中的qe.cpu = "qemu64"替换为更兼容的CPU参数,避免内核兼容性检测失败:
qe.cpu = "max,-hypervisor"
该配置启用Qemu支持的最大CPU特性集,同时关闭hypervisor标识,适配AlmaLinux 9的内核检测逻辑。
2. 启用串口控制台输出
添加串口配置,直接查看虚拟机启动日志,便于定位内核或服务启动问题:
qe.serial_port = "stdio"
启动时会在终端输出虚拟机的内核启动和系统初始化日志,可直观判断是否卡在启动环节。
3. 延长超时时间
跨架构模拟启动速度较慢,默认超时时间可能不足以完成系统初始化和SSH服务启动:
config.vm.boot_timeout = 120 config.ssh.timeout = 60
4. 更换为适配多虚拟化平台的镜像
官方almalinux/9镜像更偏向VirtualBox等平台,改用generic/almalinux9镜像,该镜像针对Qemu等多种虚拟化平台做了优化:
config.vm.box = "generic/almalinux9"
修改后的完整配置
Vagrant.configure(2) do |config| config.vm.box = "generic/almalinux9" config.vm.boot_timeout = 120 config.ssh.timeout = 60 config.vm.provider "qemu" do |qe| qe.arch = "x86_64" qe.machine = "q35" qe.cpu = "max,-hypervisor" qe.net_device = "virtio-net-pci" qe.extra_netdev_args = "net=192.168.51.0/24,dhcpstart=192.168.51.10" qe.serial_port = "stdio" end end
额外排查步骤
如果调整后仍有问题,通过串口日志检查:
- 内核是否正常启动完成,有无panic或错误信息
- SSH服务(
sshd)是否正常初始化 - 虚拟机是否通过DHCP获取到了配置的网段IP
若内核启动卡住,可尝试增加虚拟机内存:
qe.memory = "2048"
内容的提问来源于stack exchange,提问作者Pieter Vogelaar
相关产品推荐
相关产品推荐

