Я использую следующие partman
настройки автоматической установки ВМ уже несколько лет:
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 ГБ и системным диском 460 ГБ (SSD в аппаратном RAID1, но это не имеет значения):
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 ГБ в конце.
Что ж, это не так. Он создает раздел размером 450 МБ, за которым следует раздел подкачки размером 460 ГБ.
Когда я устанавливаю тот же компьютер с preseed для виртуальных машин, разделы создаются правильно, как определено в файле preseed:
Итак, что я делаю не так с рецептом машины без покрытия?
Если это важно, установочный ISO-образ основан на ISO-образе сервера Ubuntu 16.04.5.
Выход 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 { } \ .
# .
Это не имеет значения, результирующий корневой раздел всегда имеет только 453 МБ.
Особые примечания
Не упоминалось, есть ли 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 (беззастенчивое копирование и вставка из Предварительная установка debian - EFI и не удалил iflabel):
538 538 1075 free
$iflabel{ gpt }
$reusemethod{ }
method{ efi }
format{ } .
И чтобы ответить на вопрос
Чтобы использовать остаток, вы используете -1
, а не произвольно очень большое число, а затем просто установите для других чисел фиктивные значения, например 1. И я бы не стал доверять диапазонам ... Я просто использую другой файл preseed для другого оборудования, а не автоматические вещи 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 { } \
.
И убедитесь, что это действительно используя ваш новый файл preseed. Мне нравится помещать его в образ 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
TL; DR:
Примонтирован неправильный образ. Спасибо @Peter за то, что указал мне на это.
Длинная история:
После комментария Петерса я перепроверил весь свой конвейер сборки iso, файлы .seed, файл isolinux txt.cfg, пользовательский загрузочный логотип, сценарий bash, который строит .iso, и не нашел ничего неправильного. Я снова изменил файл .preseed, на этот раз добавив третий раздел, который должен быть смонтирован как /var
, перестроил образ, щелкнул «Размонтировать» и «Смонтировать» в интерфейсе BMC сервера, перезагрузился, запустил установку, и угадайте, что, это был тот же макет, что и раньше, без дополнительного раздела. Подозрительно я проверил /target/etc/issue
:
Ubuntu 16.04.1 LTS
Это должно было быть 16.04.5. Во время тестов на установку я полностью воссоздал Ubuntu .iso, взяв за основу его 16.04.5 вместо предыдущего 16.04.1 (в результате получилось другое имя iso, поскольку файл .iso содержит номер версии).
У меня есть два способа установить ISO-образы на эти платы SuperMicro. Я могу подключиться к одному BMC и смонтировать ISO там, или я могу использовать SuperMicro Server Manager для монтирования ISO сразу на нескольких машинах. Мне нужно было установить несколько машин, поэтому, естественно, я использовал метод SSM и везде монтировал ISO.
После перехода на 16.04.5 я только изменил имя файла непосредственно в BMC хоста, над которым работал, и перемонтировал его. Я только получаю There is an iso file mounted.
в качестве подтверждения больше никаких подробностей.
Нажав на Save
кнопка на странице монтирования образа приводит к следующему сообщению об ошибке:
Я не вводил путь таким образом, он был установлен диспетчером сервера, поэтому я предположил, что он правильный. Очевидно, это не так. После этого я перемонтировал файл .iso с помощью диспетчера серверов напрямую на BMC, и вуаля ...
Именно то, что я настроил для проверки.
Мораль этой истории: я потратил около недели своего времени (и часть драгоценного времени ваших помощников) только из-за глупости дешевого интерфейса BMC. Помните об этом и перепроверяйте ВСЕ, когда столкнетесь с необъяснимыми проблемами.