Назад | Перейти на главную страницу

Автоматическое разбиение на разделы Preseed

Я использую следующие 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. Помните об этом и перепроверяйте ВСЕ, когда столкнетесь с необъяснимыми проблемами.