首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预置自动分区

预置自动分区
EN

Server Fault用户
提问于 2019-02-11 10:04:30
回答 2查看 7.4K关注 0票数 5

多年来,我一直在使用以下partman设置来自动安装VM:

代码语言:javascript
复制
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

这将在开头创建一个小交换分区,并为根分区使用磁盘的其余部分。当我需要增加虚拟磁盘的大小时,这可以很好地工作,并且允许简单的分区扩展。

现在,我正在尝试调整这个配方来安装一些相同的裸金属服务器。要做到这一点,我只需切换分区并将大小设置为具有256‘t和460’t系统磁盘的计算机(硬件RAID1中的SSD,但这不重要):

代码语言:javascript
复制
  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的交换分区。

它创建了一个450‘t的分区,然后是一个460’t的交换分区。

当我安装同一台带有VM预置种子的机器时,分区将按照预设文件中的定义正确创建:

那么,我对裸金属机的配方做了什么错事?

如果重要的话,安装iso是基于Ubuntu16.04.5服务器iso。

fdisk /dev/sdaparted /dev/sda print的输出:

我尝试了更多的变体:

代码语言:javascript
复制
# 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 { }               \              .                         
#              .

这并没有什么区别,结果的根分区总是只有453‘t。

EN

回答 2

Server Fault用户

回答已采纳

发布于 2019-02-21 07:41:04

TL;DR:

安装了错误的图像。谢谢彼得给我指路。

The长篇故事:

在彼得斯的评论之后,我重新检查了我的整个iso构建管道、.seed文件、isolinux txt.cfg、自定义引导标志、构建.iso的bash脚本,没有发现任何问题。我再次更改了.preseed文件,这次添加了第三个分区,应该以/var的形式挂载,重建映像,在服务器的BMC接口上单击“卸载”和“挂载”,重新启动,运行安装,然后猜怎么着,它的布局和以前一样,没有额外的分区。我开始怀疑,我检查了/target/etc/issue

代码语言:javascript
复制
Ubuntu 16.04.1 LTS

应该是16.04.5。在我的安装测试中,我完全重新创建了,它基于16.04.5而不是以前的16.04.1 (导致了一个不同的.iso名称,因为.iso文件包含版本号)。

我有两种方法将ISO图像安装到那些SuperMicro板上。我可以连接到单个BMC并在那里挂载ISO,或者可以使用SuperMicro服务器管理器一次在多台计算机上挂载ISO。我有许多机器要安装,所以我自然地使用SSM方法,并安装ISO无处不在。

在更改到16.04.5之后,我只在我正在处理的主机的BMC中直接更改了文件名并重新挂载它。我只得到There is an iso file mounted.作为确认,没有更多的细节。

单击挂载映像页上的Save按钮将导致以下错误消息:

我没有以这种方式输入路径,这是由服务器管理器设置的,所以我假设它是正确的。显然不是。在这之后,我用服务器管理器而不是直接在BMC上重新装入.iso文件,然后瞧.

正是我所配置的来测试这个。

这个故事的寓意是:我浪费了大约一个星期的时间(还有你们这些乐于助人的宝贵时间),仅仅是因为一个廉价的BMC界面的愚蠢。记住这一点,当你遇到无法解释的问题时,重新检查每件事。

票数 3
EN

Server Fault用户

发布于 2019-02-19 20:52:38

Special注释

没有提到是否有bios_grub、ESP、GPT或MBR,也没有提到固件使用哪种方法。当使用GPT时,您需要一个或另一个(或两者兼备)。因此,将会发生的是安装程序将为您选择,基于一些未知的标准,可能与磁盘大小有关。为了强制使用GPT,您可以设置这样的东西(我记得,尽管使用了我在这里找到的所有6种方法,但这并不一定总是有效的):

代码语言:javascript
复制
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

例如,对于bios_grub,您可以设置:

代码语言:javascript
复制
    1 1 1 free                          \
        $primary{}                      \
        $bios_boot{}                    \
        method{ biosgrub }              \
    .                                   \

(我没有在其中放一个$iflabel{ gpt },这可能很有用,因为如果出了什么问题,然后将它从MBR转换为GPT,您需要保留空间)

对于EFI (无耻地从预置debian安装- EFI复制和粘贴并且没有删除iflabel):

代码语言:javascript
复制
    538 538 1075 free
        $iflabel{ gpt }
        $reusemethod{ }
        method{ efi }
        format{ } .

回答问题的And

要使用剩余的值,您使用的是-1,而不是任意大的数字,然后将其他数字设置为伪值,如1。我只是对不同的硬件使用不同的预置文件,而不是debian的自动文件。所以我把它设定为65536,而不是一个范围。

代码语言:javascript
复制
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 { }               \
        .

并确保它是<#>真的使用您的新预置文件。我喜欢把它放在netboot initrd映像中,因为这样它就不依赖于网络等等,并且发现它很好用。如果您更改了上面的内容,但它不工作,检查它一次又一次。如果是http/tftp,请检查http/tftp日志或tcpdump。或者做一个你一定会注意到的改变,看看它是否做到了。

如果是initrd,看看initrd,看看它是否真的在那里。例如:

代码语言:javascript
复制
cd emptydir
gunzip -c path_to_initrd | cpio -i
# It must be named "preseed.cfg" if it's in the initrd.
cat preseed.cfg
票数 9
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/953322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档