多年来,我一直在使用以下partman
设置来自动安装 VM:
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-lvm/confirm boolean true
d-i partman/alignment string "optimal"
d-i partman-auto/expert_recipe string \
boot-root :: \
64 512 300% linux-swap \
$primary{ } \
method{ swap } format{ } \
. \
500 10000 1000000000 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
.
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
这会在开始时创建一个小的交换分区,并将磁盘的其余部分用作根分区。当我需要增加虚拟磁盘的大小时,这很好用并且可以轻松扩展分区。
现在我正在尝试调整这个配方来安装许多相同的裸机服务器。为此,我只是切换了分区并将大小设置为具有 256GB RAM 和 460GB 系统磁盘(硬件 RAID1 中的 SSD,但这不重要)的机器更合理的值:
boot-root :: \
32768 65536 1000000000 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
. \
16384 16384 65536 linux-swap \
$primary{ } \
method{ swap } format{ } \
.
其余partman*
指令是相同的。
据我了解文档(以及类似的其他帖子),这应该创建一个几乎跨越整个磁盘的大根分区,最后有一个 16 到 64 GB 的交换分区。
好吧,它没有。它创建一个 450MB 的分区,然后是一个 460GB 的交换分区。
当我使用虚拟机的预种子安装同一台机器时,分区会按照预种子文件中的定义正确创建:
那么,我在裸机机的配方上做错了什么?
如果重要,安装 iso 是基于 Ubuntu 16.04.5 服务器 iso。
fdisk /dev/sda
和的输出parted /dev/sda print
:
我尝试了更多变体:
# this belongs to tha last block, as suggested by @Peter
#d-i partman-basicfilesystems/choose_label string gpt
#d-i partman-basicfilesystems/default_label string gpt
#d-i partman-partitioning/choose_label string gpt
#d-i partman-partitioning/default_label string gpt
#d-i partman/choose_label string gpt
#d-i partman/default_label string gpt
d-i partman-auto/expert_recipe string \
boot-root :: \
##########################
65536 1 -1 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
. \
65536 65536 65536 linux-swap \
$primary{ } \
method{ swap } format{ } \
.
##########################
# 1 1 -1 ext4 \
# $primary{ } $bootable{ } \
# method{ format } format{ } \
# use_filesystem{ } filesystem{ ext4 } \
# mountpoint{ / } \
# . \
# 65536 65536 65536 linux-swap \
# $primary{ } \
# method{ swap } format{ } \
# .
##########################
# 32768 50 5242880 ext4 \
# $primary{ } $bootable{ } \
# method{ format } format{ } \
# use_filesystem{ } filesystem{ ext4 } \
# mountpoint{ / } \
# . \
# 16384 100 65536 linux-swap \
# $primary{ } \
# method{ swap } format{ } \
# .
##########################
# use along with the annoted partman-* directives above
# 538 538 1075 free \
# $iflabel{ gpt } \
# $reusemethod{ } \
# method{ efi } \
# format{ } \
# . \
# 1 1 -1 ext4 \
# $primary{ } $bootable{ } \
# method{ format } format{ } \
# use_filesystem{ } filesystem{ ext4 } \
# mountpoint{ / } \
# . \
# 65536 65536 65536 linux-swap \
# $primary{ } \
# method{ swap } format { } \ .
# .
没有什么区别,生成的根分区总是只有 453MB。
特别说明
没有提到是否有 bios_grub、ESP、GPT 或 MBR,或者固件使用哪种方法。使用 GPT 时,您需要一个或另一个(或两者)。因此,安装程序会根据一些未知标准为您选择,可能与磁盘大小有关。要强制使用 GPT,您可以设置如下内容(我记得不一定总是有效,尽管使用了我在这里找到的所有 6 种方法):
例如,对于 bios_grub,您可以设置:
(我没有放在
$iflabel{ gpt }
那里,这可能很有用,因为如果出现任何问题并且您稍后将其从 MBR 转换为 GPT,您需要保留空间)对于 EFI(从Preseeding debian install中无耻地复制和粘贴- EFI并且没有删除 iflabel):
并回答这个问题
要使用余数,请使用
-1
,而不是任意大的数字,然后将其他数字设置为虚假值,例如 1。而且我也不相信范围......我只是为不同的硬件使用不同的预置文件,而不是 Debian 的自动魔法。所以我把它设置为只有65536,而不是一个范围。并确保它确实在使用您的新预种子文件。我喜欢将它放在 netboot initrd 映像中,因为它不依赖于网络等,并且发现效果很好。如果您更改了上述内容,但它不起作用,请再次检查。如果是 http/tftp,请检查 http/tftp 日志或 tcpdump。或者做一个你肯定会注意到的改变,看看它是否做到了。
如果是 initrd,请查看 initrd 并查看它是否真的存在。例如:
TL;博士:
安装了错误的图像。感谢@Peter 指点我。
长篇大论:
在 Peters 发表评论后,我重新检查了我的整个 iso 构建管道、.seed 文件、isolinux txt.cfg、自定义引导徽标、构建 .iso 的 bash 脚本,没有发现任何问题。我再次更改了.preseed文件,这次添加了应该挂载为的第三个分区
/var
,重建映像,单击服务器BMC界面中的“卸载”和“挂载”,重新启动,运行安装,猜猜是什么,和以前一样的布局,没有额外的分区。变得可疑我检查了/target/etc/issue
:那应该是 16.04.5。在我的安装测试期间,我完全重新创建了 Ubuntu .iso,它基于 16.04.5 而不是之前的 16.04.1(导致不同的 iso 名称,因为 .iso 文件包含版本号)。
我有两种在 SuperMicro 板上安装 ISO 映像的方法。我可以连接到单个 BMC 并在那里安装 ISO,或者我可以使用 SuperMicro Server Manager 一次在多台机器上安装 ISO。我有很多机器要安装,所以我自然使用了SSM方法并将ISO安装在任何地方。
更改为 16.04.5 后,我只在我正在处理的主机的 BMC 中直接更改了文件名并重新安装了它。我只得到
There is an iso file mounted.
确认,没有更多细节。单击
Save
挂载映像页面上的按钮会导致此错误消息:我没有这样输入路径,这是由服务器管理器设置的,所以我认为它是正确的。显然不是。在此之后,我使用服务器管理器直接在 BMC 上重新安装了 .iso 文件,然后瞧...
正是我为测试而配置的。
故事的寓意:我浪费了大约一周的时间(以及你们乐于助人的一些宝贵时间),只是因为廉价 BMC 界面的愚蠢。请记住这一点,并在遇到无法解释的问题时重新检查所有内容。