Ubuntu 20.04自动安装时无需重新打包ISO,从外部磁盘加载cloud-init配置的Grub配置方法求助
Ubuntu 20.04自动安装时无需重新打包ISO,从外部磁盘加载cloud-init配置的Grub配置方法求助
你遇到的问题我之前用戴尔iDRAC做自动部署时也碰到过,Grub里直接用(hd3)这种设备标识在安装环境里不生效,因为安装阶段的设备命名规则和Grub里的不一样。这里给你几个可行的解决方案:
方法1:通过磁盘标签(LABEL)指定外部设备
这是最省心的方式,自定义标签不会随设备顺序变化:
- 先给你的外部.img文件里的分区设置一个唯一标签(比如
cloud-config):- 如果是ext文件系统,用
e2label工具:e2label /dev/你的分区路径 cloud-config - 如果是FAT32,用
mlabel工具:mlabel -i 你的img文件 ::cloud-config
- 如果是ext文件系统,用
- 修改Grub的linux启动参数为:
安装环境会自动挂载带有linux /casper/vmlinuz autoinstall ds=nocloud;s=/cloud-init/ root=LABEL=cloud-config ro ---cloud-config标签的分区,cloud-init就能顺利读取/cloud-init目录下的user-data和meta-data了。
方法2:通过UUID指定外部设备
如果不想用标签,也可以用分区的UUID(UUID是唯一且固定的,不会受设备顺序影响):
- 获取外部分区的UUID:用
blkid工具查看,比如blkid /dev/你的分区路径,会输出类似UUID="xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"的内容 - 修改Grub参数为:
这个原理和方法1一致,只是用UUID替代了标签,适合对磁盘标识有严格规范的场景。linux /casper/vmlinuz autoinstall ds=nocloud;s=/cloud-init/ root=UUID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro ---
方法3:通过硬件路径指定设备(应急测试方案)
如果只是临时测试不想修改磁盘标签/UUID,可以用基于硬件连接的固定路径,这个路径不会随设备顺序变化:
- 在Grub控制台里执行
ls /dev/disk/by-path/,找到对应外部设备的路径(比如pci-0000:02:00.0-scsi-0:0:1:0-part1) - 修改Grub参数为:
linux /casper/vmlinuz autoinstall ds=nocloud;dev=/dev/disk/by-path/你的设备路径;s=/cloud-init/ ---
⚠️ 注意:你的外部磁盘里的cloud-init目录必须同时存在user-data和meta-data两个文件,meta-data可以是空文件,但不能缺失,否则cloud-init会启动失败。
备注:内容来源于stack exchange,提问作者Gringeot
相关产品推荐
相关产品推荐

