Ubuntu自动安装Late Commands未执行:CDROM无法卸载求助
解决Ubuntu自动安装(IPXE引导)中“cannot unmount CDROM”导致late-commands未执行的问题
核心修复方案
1. 修改casper-stop脚本,强制卸载CDROM并禁用弹出操作
在early-commands中替换原有配置,确保casper停止时能强制卸载CDROM,同时跳过弹出命令:
early-commands: # 注释掉casper-stop中的eject命令 - sed -i 's/^eject -p/#eject -p/' /sbin/casper-stop # 将懒卸载改为强制卸载,避免进程占用导致卸载失败 - sed -i 's/^umount -l "$iso_mountpoint"/umount -f "$iso_mountpoint"/' /sbin/casper-stop # 禁用casper的卸载提示 - touch /run/casper-no-prompt
2. 将ISO内容复制到内存,脱离物理CDROM依赖
如果上述修改仍无法解决介质占用问题,可在early-commands中将ISO内容复制到内存tmpfs,彻底解除对原CDROM挂载的依赖:
early-commands: # 创建内存挂载点 - mkdir -p /mnt/tmpiso # 挂载tmpfs到内存 - mount -t tmpfs tmpfs /mnt/tmpiso # 复制ISO全部内容到内存 - cp -a /cdrom/* /mnt/tmpiso/ # 卸载原CDROM挂载 - umount /cdrom # 将内存中的ISO内容绑定到原/cdrom路径,保持安装流程正常 - mount --bind /mnt/tmpiso /cdrom
3. 明确Grub安装目标,避免干扰CDROM
在storage配置中指定Grub安装到目标硬盘,同时禁用UEFI启动顺序自动重排:
storage: grub: reorder_uefi: False install_devices: ["/dev/sda"] # 替换为你的目标硬盘设备名 config: - type: disk id: disk-sda device: /dev/sda wipe: superblock preserve: false grub_device: true # 标记此硬盘为Grub安装目标
4. 确保late-commands正确执行并验证
调整late-commands,使用curtin in-target在目标系统环境中执行命令,同时添加验证标记:
late-commands: # 调整UEFI启动顺序(替换为你的目标启动项编号,可通过efibootmgr查看) - curtin in-target -- bash -c "efibootmgr -o 0000,0001" # 创建验证文件,确认late-commands已执行 - curtin in-target -- bash -c "touch /var/log/late_commands_executed.log"
关键说明
- 强制卸载(
umount -f)会直接终止占用CDROM的进程,避免因进程未退出导致卸载失败 - 将ISO复制到内存后,原CDROM挂载被解除,后续流程不再依赖物理介质,彻底解决卸载问题
- 明确Grub安装目标可防止安装程序误操作CDROM设备,避免额外的挂载/卸载冲突
内容的提问来源于stack exchange,提问作者mkoch
相关产品推荐
相关产品推荐

