Ger*_*der 5 ubuntu partition supermicro preseed
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
Run Code Online (Sandbox Code Playgroud)
这会在开始时创建一个小的交换分区,并将磁盘的其余部分用作根分区。当我需要增加虚拟磁盘的大小时,这很有效并且可以轻松扩展分区。
现在我正在尝试修改这个方法来安装许多相同的裸机服务器。为此,我只是为具有 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{ } \
.
Run Code Online (Sandbox Code Playgroud)
其余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 { } \ .
# .
Run Code Online (Sandbox Code Playgroud)
它没有区别,生成的根分区始终只有 453MB。
特别说明
没有提到是否有bios_grub、ESP、GPT或MBR,以及固件使用的方法。使用 GPT 时,您需要其中一个(或两者)。因此,安装程序会根据一些未知标准为您选择,可能与磁盘大小有关。要强制使用 GPT,您可以设置如下内容(我记得它不一定总是有效,尽管使用了我在这里找到的所有 6 种方法):
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
Run Code Online (Sandbox Code Playgroud)
例如,对于 bios_grub,您将设置:
1 1 1 free \
$primary{} \
$bios_boot{} \
method{ biosgrub } \
. \
Run Code Online (Sandbox Code Playgroud)
(我没有$iflabel{ gpt }
在那里放一个,这很有用,因为如果出现任何问题,然后您将其从 MBR 转换为 GPT,您需要保留空间)
对于 EFI(从Preseed debian install - EFI无耻地复制和粘贴,并且没有删除 iflabel):
538 538 1075 free
$iflabel{ gpt }
$reusemethod{ }
method{ efi }
format{ } .
Run Code Online (Sandbox Code Playgroud)
并回答这个问题
要使用余数,您使用-1
,而不是一个任意大的数字,然后将其他数字设置为像 1 这样的虚假值。而且我也不相信这些范围......我只是为不同的硬件使用不同的预置文件,不是 debian 的 automagic 东西。所以我把它设置为只有 65536,而不是一个范围。
d-i partman-auto/expert_recipe string \
boot-root :: \
1 1 -1 ext4 \
$primary{ } $bootable{ } \
method{ format } format{ } \
use_filesystem{ } filesystem{ ext4 } \
mountpoint{ / } \
. \
65536 65536 65536 linux-swap \
$primary{ } \
method{ swap } format { } \
.
Run Code Online (Sandbox Code Playgroud)
并确保它确实在使用您的新预置文件。我喜欢将它放在 netboot initrd 映像中,因为这样它就不再依赖于网络等,并且发现它非常有效。如果您更改上述内容,但不起作用,请再次检查。如果是 http/tftp,请检查 http/tftp 日志或 tcpdump。或者做一个你肯定会注意到的改变,看看它是否做到了。
如果是 initrd,请查看 initrd,看看它是否真的存在。例如:
cd emptydir
gunzip -c path_to_initrd | cpio -i
# It must be named "preseed.cfg" if it's in the initrd.
cat preseed.cfg
Run Code Online (Sandbox Code Playgroud)
长话短说:
安装了错误的图像。感谢@Peter 向我指出了这一点。
长话短说:
在 Peters 评论之后,我重新检查了整个 iso 构建管道、.seed 文件、isolinux txt.cfg、自定义 bootlogo、构建 .iso 的 bash 脚本,没有发现任何问题。我再次更改了 .preseed 文件,这次添加了应该挂载的第三个分区/var
,重新构建映像,在服务器的 BMC 界面中单击“卸载”和“挂载”,重新启动,运行安装,你猜怎么着,和以前的布局一样,没有额外的隔断。变得可疑我检查了/target/etc/issue
:
Ubuntu 16.04.1 LTS
Run Code Online (Sandbox Code Playgroud)
那应该是 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
安装映像页面上的按钮会导致以下错误消息:
我没有以这种方式输入路径,这是由服务器管理器设置的,所以我认为它是正确的。显然不是。之后,我使用服务器管理器重新安装 .iso 文件,而不是直接在 BMC 上安装,瞧...
正是我为测试这个而配置的。
这个故事的寓意是:仅仅因为廉价的 BMC 界面的愚蠢,我就浪费了大约一周的时间(以及你们乐于助人的人的一些宝贵时间)。请记住这一点,并在遇到无法解释的问题时重新检查所有内容。
归档时间: |
|
查看次数: |
5089 次 |
最近记录: |