Ubuntu

預置自動分區

  • February 21, 2019

多年來,我一直在使用以下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。

TL;博士:

安裝了錯誤的圖像。感謝@Peter 指點我。

長篇大論:

在 Peters 發表評論後,我重新檢查了我的整個 iso 建構管道、.seed 文件、isolinux txt.cfg、自定義引導徽標、建構 .iso 的 bash 腳本,沒有發現任何問題。我再次更改了.preseed文件,這次添加了應該掛載為的第三個分區/var,重建映像,點擊伺服器BMC界面中的“解除安裝”和“掛載”,重新啟動,執行安裝,猜猜是什麼,和以前一樣的佈局,沒有額外的分區。變得可疑我檢查了/target/etc/issue

Ubuntu 16.04.1 LTS

那應該是 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 界面的愚蠢。請記住這一點,並在遇到無法解釋的問題時重新檢查所有內容。

特別說明

沒有提到是否有 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

例如,對於 bios_grub,您可以設置:

   1 1 1 free                          \
       $primary{}                      \
       $bios_boot{}                    \
       method{ biosgrub }              \
   .                                   \

(我沒有放在$iflabel{ gpt }那裡,這可能很有用,因為如果出現任何問題並且您稍後將其從 MBR 轉換為 GPT,您需要保留空間)

對於 EFI(從Preseeding debian install中無恥地複制和粘貼- EFI並且沒有刪除 iflabel):

   538 538 1075 free
       $iflabel{ gpt }
       $reusemethod{ }
       method{ efi }
       format{ } .

並回答這個問題

要使用餘數,請使用-1,而不是任意大的數字,然後將其他數字設置為虛假值,例如 1。而且我也不相信範圍……我只是為不同的硬體使用不同的預置文件,而不是 Debian 的自動魔法。所以我把它設置為只有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 { }               \
       .

並確保它確實在使用您的新預種子文件。我喜歡將它放在 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

引用自:https://serverfault.com/questions/953322