我已经阅读了 curtin 和自动安装文档,但无法理解为什么这个自动安装脚本可以在我的开发笔记本电脑上运行,但不能在我的 vbox 安装(Ubuntu 主机上的版本 7.0.8)上运行。起初我认为问题是对/dev/mmcblk0
(virtualbox use /dev/sda
) 的引用,但在进行了许多不同的配置之后,我认为这实际上不是问题,因为它给出了错误消息。这是autoinstall config did not create needed bootloader partition
我的理论是,此自动安装可以在笔记本电脑上运行,因为笔记本电脑是 UEFI,但不能在 Virtualbox 上运行,因为它不是。我在其他地方找到了一些关于如何在 MBR 上进行适用于 UEFI 的自动安装的建议,但没有一个能够同时做到这两点。
这是自动安装分区布局的问题吗?有什么解决办法吗?由于该项目的特定要求,我无法使用内置布局(lvm 等)。我意识到我可以将 Virtualbox 设置更改为 EFI 引导,但必须将这个 ISO 安装在各种机器上,其中一些机器可能不支持 EFI。
这是我当前的分区布局,它正在一台设备为/dev/mmcblk0
该脚本需要如何修改才能在任何系统上运行?是的,/boot 分区对于此设置确实需要那么大。
autoinstall:
version: 1
storage:
config:
- ptable: gpt
wipe: superblock-recursive
preserve: false
name: ''
grub_device: false
type: disk
id: disk-mmcblk0
match:
size: largest
- device: disk-mmcblk0
size: 1127219200
wipe: superblock
flag: boot
number: 1
preserve: false
grub_device: true
type: partition
id: partition-0
- fstype: fat32
volume: partition-0
preserve: false
type: format
id: format-0
- device: disk-mmcblk0
size: 5GB
wipe: superblock
number: 2
preserve: false
type: partition
id: partition-1
- fstype: ext4
volume: partition-1
preserve: false
type: format
id: format-1
- device: disk-mmcblk0
size: -1
wipe: superblock
number: 3
preserve: false
type: partition
id: partition-2
- volume: partition-2
key: password
path: /dev/mapper/dm_crypt-0
preserve: false
type: dm_crypt
id: dm_crypt-0
- name: ubuntu-vg
devices:
- dm_crypt-0
preserve: false
type: lvm_volgroup
id: lvm_volgroup-0
- name: ubuntu-lv
volgroup: lvm_volgroup-0
size: -1
wipe: superblock
preserve: false
path: /dev/ubuntu-vg/ubuntu-lv
type: lvm_partition
id: lvm_partition-0
- fstype: btrfs
volume: lvm_partition-0
preserve: false
type: format
id: format-2
- path: /
device: format-2
type: mount
id: mount-2
options: 'noatime,discard,compress=zstd:1'
- path: /boot
device: format-1
type: mount
id: mount-1
- path: /boot/efi
device: format-0
type: mount
id: mount-0
正如@AndrewLowther 在答案中指出的那样,他的评论指出:
所以你有两个选择:
user-data
使用安德鲁建议的解决方法修改您的user-data
文件。一种用于 BIOS,一种用于 UEFI我将在下面概述第一个选项,这就是您想要的。这意味着它适用于 BIOS 或 UEFI 计算机。
首先,您
user-data
提供的文件缺少#cloud-config
第一行和该identity
部分。两者都是必需的,因此我在下面的示例中添加了它们。该identity
部分使用默认用户名ubuntu
和密码进行定义ubuntu
。此外,加密驱动器配置有密码ubuntu
。相应地改变。下面的文件有几处与
user-data
您的不同。grub_device: true
为磁盘设置而不是grub_device: false
flag: bios_grub
添加一个小的未格式化分区。来自科廷文档:
bios_grub
grub_device: false
为除 UEFI 安装使用的 ESP 分区之外的所有分区设置。对于此分区,grub_device: UEFI
设置为相反。目前这实际上只是一个占位符,将使用 进行编辑early-commands
,如下所述。early-commands
在文件中使用user-data
会autoinstall.yaml
根据计算机是 UEFI 还是 BIOS 来修改文件。这将修改grub_device: UEFI
上面定义的设置。看看以下内容:
这是
autoinstall.yaml
根据条件编辑文件。据我了解,该autoinstall.yaml
文件是在安装过程中创建的,位于实时安装的根目录中。user-data
这是您的文件和安装程序填写的默认自动安装未回答/未配置问题的组合。这会检查文件是否
/sys/firmware/efi
存在:if [ -e "/sys/firmware/efi" ]; then
如果属实:
表明系统是UEFI
替换
grub_device: UEFI
为grub_device: true
使用sed
:sed -i -e "s/grub_device: UEFI/grub_device: true/" /autoinstall.yaml
否则:
表示系统是BIOS
替换
grub_device: UEFI
为grub_device: false
使用sed
:sed -i -e "s/grub_device: UEFI/grub_device: false/" /autoinstall.yaml
就是这样。运行后
early-commands
,安装将继续。这是完整的
user-data
文件:如果您在 UEFI 和 BIOS 计算机上安装然后进行比较,您会发现分区方案是相同的。UEFI 安装将有一个未使用的
bios_grub
分区,BIOS 安装将有一个未使用的 ESP 分区安装在/boot/efi
。在 BIOS 安装中该文件/boot/efi
将为空,而在 UEFI 安装中将包含文件。以下安装是使用 ISO 完成的:ubuntu-22.04.3-live-server-amd64.iso。
user-data
将其解压并添加上述文件/nocloud
,然后重新打包。电喷安装:
BIOS安装: