启动 Ubuntu 14.04:如何从我的 ks.cfg 创建“EFI 启动分区”?

启动 Ubuntu 14.04:如何从我的 ks.cfg 创建“EFI 启动分区”?

我正在 PXE 启动一台服务器,该服务器在 RAID-1 中配置了两个 4Gb 驱动器,以便启动 Ubuntu Server 14.04 实例。我在 EFI 模式下进行 PXE 启动,安装运行正常,直到我在分区时收到此错误:

磁盘上使用的分区表格式通常要求您为引导加载程序代码创建一个单独的分区。此分区应标记为“EFI 引导分区”,大小至少为 35MB。请注意,这与挂载在 /boot 上的分区不同。

我读过了此主题本文建议在我的 ks.cfg 中添加此内容:

part /boot/efi --fstype=efi --grow --maxsize=200 --size=20
part /boot --fstype=ext4 --size=512

但错误仍然显示。如果我回答“否”,即继续不使用此分区,服务器将启动并正常工作,但我希望安装能够无人值守运行,因此我不希望此响应步骤出现在那里。

我也尝试过类似于 biosboot 行的语法:

part efiboot  --fstype efi --size 200

part efi --fstype efi

但没有任何效果。

你能帮我/告诉我正确的语法是什么吗?谢谢!

这是我的整个分区配置:

part /            --fstype ext4 --size 2048  --asprimary
part /boot        --fstype ext4 --size 512
part /boot/efi    --fstype efi  --size 256
part /opt         --fstype ext4 --size 8192
part /var         --fstype ext4 --size 8192
part /media/video --fstype ext4 --size 65536 --grow
part swap                       --size 8192

答案1

不要将 kickstart 与基于 Debian 的发行版一起使用。Kickstart 将转换为 preseed,因此最好使用 preseed(http://en.wikipedia.org/wiki/Preseed) 直接地。

按照建议,先以一个示例预置开始:https://help.ubuntu.com/14.04/installation-guide/example-preseed.txt

然后使用预置的 URL 和 DEBCONF_DEBUG=5 启动安装程序。每次安装程序询问时,您都会看到控制台 4 上记录的配置选项。然后您可以使用此名称设置正确的值。

对于分区,您可以在链接的 example-preseed.txt 中看到一个示例,您需要使其适合您的 EFI 分区。

答案2

我知道这是一个老问题,但许多其他人可能遇到与我类似的问题。

我之前有一个可以运行的 kickstart,但是我无法调整它以使其与支持 UEFI 的机器配合使用,而且 kickstart/preseed 可能很棘手(网络上有很多文档,但由于 ubuntu/debian 版本不同、Red Hat 的 kickstart 与 Ubuntu Kickstart 仿真等原因,大多数文档都无法按预期工作)。

我尝试以 kickstart 方式创建分区(没有成功),并且将所有文件转换为预置现在对我来说不是一个选项(我将在未来的版本中执行此操作),因此,经过数百万次测试后,这是我的工作配置(在 16.04 上):

preseed --owner d-i partman-auto/method string regular

preseed --owner d-i partman-auto/expert_recipe 'string gpt-boot-root :: 256 256 256 fat32 $primary{ $iflabel{ gpt } $iflabel{ gpt } $reusemethod{ } method{ efi } format{ } mountpoint{ /boot/efi } . 512 512 512 ext4 $primary{ } $bootable{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /boot } . 4000 10000 -1 ext4 $primary{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ / } .'

preseed --owner d-i partman-auto/choose_recipe select gpt-boot-root

笔记:

1) 此配置创建 /boot (256MB)、/boot/efi (512MB) 和 / (剩余磁盘空间)。我选择不创建交换空间,因为我后来在 / 上使用交换文件创建了交换空间。如果您不想在单独的分区上创建交换空间,请记住使用“preseed --owner di partman-basicfilesystems/no_swap boolean false”(新版本的 ubuntu 不再需要它)

2)请注意“字符串”之前和行末都有单引号。

3) 所有语法必须在一行中。我读到过某处说 kickstart 不像 preseed 那样支持反斜杠语法,所以所有专家配方必须在同一行中。

答案3

我相信您需要添加到预置文件中才能对该特定问题回答“否”的行是:

d-i partman-partitioning/no_bootable_gpt_biosgrub boolean false

答案4

所以,我花了很长时间尝试“部分”启动选项却一无所获,然后我意识到许多 Redhat 选项都不受支持。如果您在 1 个选项中犯了一个简单的错误,Ubuntu 安装程序就会切换到引导式分区。此外,在这种情况下它无法进行引导式分区:它无法在安装结束时在 MBR 分区上安装 grub,也无法继续安装,因为它无法检测到引导式分区屏幕中建议的 EFI 启动分区。

我使用了@Anderson Zardo 的答案,但我必须在预置中添加几行,这样 partman 才不会提示用户“完成分区并将更改写入磁盘”,并且还包括一些可能的注意事项。

遵循 kickstart 分区配置适用于 EFI 和 MBR 配置,它会自动检测所有内容,甚至创建具有推荐大小的 /swapfile 并为已安装的系统激活它。

#System bootloader configuration
zerombr
bootloader --location=mbr
clearpart --all --initlabel

# preseeding partman partition information
preseed --owner d-i partman-auto/method string regular
preseed --owner d-i partman-auto/expert_recipe 'string gpt-boot-root :: 256 256 256 fat32 $primary{ $iflabel{ gpt } $iflabel{ gpt } $reusemethod{ } method{ efi } format{ } mountpoint{ /boot/efi } . 512 512 512 ext4 $primary{ } $bootable{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ /boot } . 4000 10000 -1 ext4 $primary{ } method{ format } format{ } use_filesystem{ } filesystem{ ext4 } mountpoint{ / } .'

# preseeding partman additional options for automation
preseed --owner d-i partman-auto/choose_recipe select gpt-boot-root
preseed --owner d-i partman-basicfilesystems/no_swap boolean false
preseed --owner d-i partman/choose_partition select finish
preseed --owner d-i partman-md/confirm boolean true
preseed --owner d-i partman-partitioning/confirm_write_new_label boolean true    
preseed --owner d-i partman-lvm/confirm_nooverwrite boolean true

因此 EFI 系统被分区为 GPT

# fdisk -l
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EE83EBC4-881D-4157-A627-AC46A14AE694

Device       Start      End  Sectors  Size Type
/dev/sda1     2048   499711   497664  243M EFI System
/dev/sda2   499712  1499135   999424  488M Linux filesystem
/dev/sda3  1499136 20969471 19470336  9.3G Linux filesystem
# swapon -s
Filename                Type        Size    Used    Priority
/swapfile                               file        448816  0   -2

非 EFI 系统分区为 MBR

# fdisk -l
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xaf7c9c63

Device     Boot  Start      End  Sectors  Size Id Type
/dev/sda1  *      2048   999423   997376  487M 83 Linux
/dev/sda2       999424 20969471 19970048  9.5G 83 Linux
# swapon -s    
Filename                Type        Size    Used    Priority
/swapfile                               file        460496  0   -2

我注意到它在 EFI 安装期间安装了 grub。我不知道为什么需要这样做,但似乎 grub 根本没有被使用,一切正常。希望我为大家节省了很多时间。

相关内容