添加额外磁盘后Chef Kitchen Vagrant Box无法启动求助
我之前也碰到过类似的Vagrant磁盘配置导致Kitchen启动卡住的情况,结合你的场景,给你几个针对性的排查和修复方向:
1. 修正.kitchen.yml的配置格式问题
你贴的配置里有明显的缩进错误,Vagrant的自定义配置层级没对齐,这大概率是启动失败的核心原因。正确的缩进结构应该是这样:
driver: name: vagrant ssh: insert_key: false customize: cableconnected1: 'on' createhd: - filename: /tmp/disk1.vdi size: 128 storagectl: - name: SATA Controller portcount: 4 storageattach: - storagectl: SATA Controller port: 0 device: 0 type: hdd medium: /tmp/disk1.vdi privileged: true
注意每个子配置项要和父级保持正确的缩进(通常用2或4个空格),之前的配置里customize、createhd等项直接和driver平级,导致Vagrant无法正确解析磁盘挂载逻辑,进而卡住启动流程。
2. 自动清理残留虚拟磁盘文件
每次kitchen destroy后手动删除/tmp/disk1.vdi太繁琐,你可以给driver添加销毁钩子,自动清理这个文件:
driver: # 其他原有配置... hooks: destroy: - command: rm -f /tmp/disk1.vdi
这样每次执行kitchen destroy时,系统会自动删除残留的磁盘文件,避免下次启动时因磁盘已存在导致的SSH连接重试卡住问题。
3. 延长Vagrant启动超时时间
额外磁盘的初始化会增加虚拟机启动时长,默认超时时间可能不够用。你可以通过自定义Vagrantfile模板来调整:
- 在Cookbook的
.kitchen目录下创建custom_vagrantfile.erb,内容如下:
Vagrant.configure("2") do |config| config.vm.box = "<%= @box_name %>" config.vm.boot_timeout = 120 # 把超时时间改为120秒,默认通常是30/60秒 config.vm.provider "virtualbox" do |v| v.customize ["createhd", "--filename", "/tmp/disk1.vdi", "--size", 128] v.customize ["storagectl", :id, "--name", "SATA Controller", "--portcount", 4] v.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", 0, "--device", 0, "--type", "hdd", "--medium", "/tmp/disk1.vdi"] end end
- 在
.kitchen.yml里指定这个模板:
driver: name: vagrant vagrantfile_erb: .kitchen/custom_vagrantfile.erb # 其他原有配置...
这样能更灵活地控制Vagrant的启动参数,避免因初始化超时导致卡住。
4. 验证VirtualBox控制器兼容性
虽然你确认SATA Controller适用,但部分旧Box可能默认使用IDE控制器,强制切换SATA可能引发磁盘识别问题。你可以先查看Box的默认控制器类型:
vagrant box show <你的Box名称>
如果默认是IDE,就把storagectl里的名称改成IDE Controller,或者调整port参数(比如用port 1而非0,避免和系统盘冲突)。
5. 启用调试日志定位问题
启动Kitchen时开启调试日志,能看到具体卡在哪个环节:
KITCHEN_LOG=debug kitchen verify
也可以脱离Kitchen环境,单独用Vagrant测试磁盘配置:创建临时Vagrantfile并添加你的磁盘设置,执行vagrant up,从输出中直接查看错误信息,排查会更高效。
内容的提问来源于stack exchange,提问作者lzukel

