Ай Лайн
Связаться
Отдел продаж +7 (812) 385-74-84
Время работы пн-пт с 9:00 до 18:00

Ubuntu autoinstall на машине с 2 ГБ ОЗУ

Автоматическая установка Ubuntu Server по сети падает с нехваткой памяти на машинах с 2 ГБ ОЗУ, хотя обычная ручная установка на этой же машине проходит. Причина — в том, что образ скачивается в оперативную память дважды. Основная инструкция по сетевой установке — Установка Ubuntu Server по PXE (autoinstall).

Симптом

При загрузке по сети с параметром autoinstall установщик начинает скачивать ISO-образ и падает, не дойдя до конца, — заканчивается память. Типичная строка загрузки, на которой это воспроизводится:

ramdisk_size=1500000 root=/dev/ram0 fsck.mode=skip autoinstall splash
'ds=nocloud-net;s=http://192.0.2.10/autoinstall/' ip=dhcp
'url=http://releases.ubuntu.com/focal/latest-live-server-amd64.iso'

Та же машина с тем же объёмом памяти в интерактивном режиме (без autoinstall) устанавливается нормально — это и сбивает с толку.

Причина

Параметр url= в строке ядра обрабатывают два компонента:

  • casper — считает его адресом ISO-образа, который нужно скачать и развернуть в ramdisk. Это и есть нужное поведение;
  • cloud-init — исторически тоже понимает url= как адрес своей конфигурации и пытается скачать по нему файл.

В итоге образ уходит в оперативную память дважды: один раз как установочный ISO, второй — как «конфигурация» cloud-init. На 3 ГБ это проходит незаметно, на 2 ГБ — заканчивается нехваткой памяти.

Решение

cloud-init проверяет параметр cloud-config-url= раньше, чем url=. Достаточно задать его явно — и url= перестаёт интерпретироваться как источник конфигурации. Вариант 1 — указать на настоящий файл конфигурации:

root=/dev/ram0 ramdisk_size=1500000 fsck.mode=skip autoinstall ip=dhcp
url=http://192.0.2.10/ubuntu-20.04.3-live-server-amd64.iso
cloud-config-url=http://192.0.2.10/user-data

Вариант 2 — указать на заведомо пустой источник, если конфигурация отдаётся через ds=nocloud-net:

cloud-config-url=/dev/null

Второй вариант используется в нашей основной инструкции по PXE — он короче и не требует отдельного файла.

Эффект помимо снятия ошибки: меньше сетевого трафика и заметно более быстрая загрузка, потому что образ скачивается один раз.

Параметр ramdisk_size задаётся в килобайтах и должен вмещать распакованный образ: ramdisk_size=1500000 — это примерно 1,4 ГБ. Если памяти в обрез, уменьшать его не нужно — нужно убирать вторую закачку образа, как описано выше.

Если не помогло

  • убедитесь, что cloud-config-url= стоит в строке ядра до появления ошибки, то есть прописан в конфигурации загрузчика, а не введён вручную после старта;
  • проверьте, что каталог из ds="nocloud-net;s=…" заканчивается слэшем и в нём лежат оба файла — meta-data и user-data;
  • посмотрите журнал установщика: /var/log/installer/ на целевой машине (после падения доступен из shell установщика по Ctrl+Alt+F2);
  • как временная мера — поднимите память ВМ до 3 ГБ, выполните установку и верните 2 ГБ: ограничение касается только процесса установки, установленной системе столько памяти не нужно.

Связанные статьи

Оставить заявку