Не удается применить Netplan при установке udevadm во время автоустановки 20.04
Во время выполнения сетевого раздела нового автоустановщика сервера Subiquity происходит сбой с ненулевым кодом возврата наnetplan apply
, который, в свою очередь, запускается udevadm settle -t 0
снова и снова, который возвращает код выхода 1, пока, наконец, не сдается.
Из /var/crash
отчет:
# date/time removed for readability
DEBUG subiquitycore.netplan:111 config for ens2f0 = {}
DEBUG subiquitycore.netplan:111 config for ens2f0 = {}
DEBUG subiquitycore.netplan:135 config for bond0 =
{'dhcp4': True, 'interfaces': ['ens2f0', 'ens2f1'], 'parameters': {'lacp-rate': 'slow', 'mode': '802.3ad', 'transmit-hash-policy', 'layer2'}}
DEBUG subiquitycore.utils:74 arun_command called: ['netplan', 'apply']
DEBUG subiquitycore.utils:48 run_command called: ['udevadm', 'settle', '-t', '0']
DEBUG subiquitycore.utils:61 ['udevadm', 'settle', '-t', '0'] exited with code 1
DEBUG subiquitycore.controller.network:196 waiting 0.1 to let udev event queue settle
<repeating udevadm settle commands issued>
(Соответствующий) конфигурация автоустановки:
#cloud-config
autoinstall:
version: 1
# double network due to a bug
# see https://ubuntu.com/server/docs/install/autoinstall-reference#network
network:
network:
version: 2
ethernets:
ens2f0: {}
ens2f1: {}
bonds:
bond0:
dhcp4: true
interfaces:
- ens2f0
- ens2f1
parameters:
mode: 802.3ad
lacp-rate: slow
transmit-hash-policy: layer2
Что генерирует следующую конфигурацию Netplan (/etc/netplan/00-installer-config.yaml
):
# This is network config written by 'subiquity'
network:
bonds:
bond0:
dhcp4: true
parameters:
mode: 802.3ad
lacp-rate: slow
transmit-hash-policy: layer2
ethernets:
ens2f0: {}
ens2f1: {}
version: 2
Я также пробовал использовать более простую конфигурацию netplan со статическим адресом на одном порту (ens2f0
) или даже по умолчанию, который запускает DHCPv4 на любом интерфейсе, соответствующем eth*
или же en*
(в этом случае ens2f0
и ens2f1
).
Моя теория заключается в том, что есть модуль или что-то, что создает необработанное и, возможно, даже не связанное с ним событие в udev, но как мне это отладить?
Более того, не является ли со стороны Netplan большой агрессивностью никогда не продолжать, если в udev есть такие необработанные события, даже если соответствующие устройства и интерфейсы настроены правильно?
Настройка:
Ubuntu 20.04, ежедневная сборка 20200923 (пробовал 20.04.1 и исходный выпуск LTS)
Netplan 0.99-ubuntuu3~20.04.2
Systemd 245.4-4ubuntu3.2
Supermicro X11DDW-L
Mellanox ConnectX-5 (PCI-E)
BIOS / Legacy boot (из-за несовместимости между этой сетевой картой / материнской платой в UEFI)
1 ответ
На самом деле это оказалось из-за ошибки в моем разделе хранилища конфигурации автоустановщика, а не из-за самого Netplan.
На моем сервере есть 2 диска, которые я хотел настроить в программном RAID, используя
mdadm
. Поскольку я использую загрузку BIOS и таблицу разделов gpt, я создал неформатированный раздел размером 1 МБ для grub на каждом из моих дисков, как указано в документации curtin.
Если хост-система для curtin была загружена с использованием UEFI, curtin установит grub в раздел esp. Если установочный носитель системы был загружен с использованием MBR, grub будет установлен в MBR диска. Однако на диске с таблицей разделов gpt после MBR недостаточно места для grub для хранения core.img второго уровня, поэтому необходим небольшой неформатированный раздел с флагом bios_grub. Этот раздел должен быть размещен в начале диска и должен иметь размер 1 МБ. Он не должен содержать файловую систему или монтироваться где-нибудь в системе.
В дополнение к этому, однако, я ошибочно предположил, что мне нужно было создать RAID для этих разделов размером 1 МБ, что не является необходимым. Сообщение об ошибке, которое ускользнуло от меня, было найдено в системном журнале (curtin_log.<pid>
идентификатор), и не упоминается в обычных журналах подобласти (/var/log/installer
а также
/var/crash
). Это также можно было увидеть в собственных журналах Куртина (/var/log/curtin
), о котором я раньше не знал.
# /var/log/curtin/install.log
# wrapped for readability
An error occured handling 'md0-bios-boot': ProcessExecutionError -
Unexpected error while running command.
Command: ['mdadm', '--create', '/dev/md0', '--run',
'--metadata=default', '--homehost=ubuntu-server', '--level=raid1',
'--raid-devices=2', '/dev/sda1', '/dev/sdb1']
Exit code: 1
Reason: -
Stdout: ''
Stderr: mdadm: no free space left on /dev/sda1
mdadm: no free space left on /dev/sdb1
mdadm: create aborted
finish: cmd-install/stage-partitioning/builtin/cmd-block-meta: FAIL: configuring raid: md0-bios-boot
<some more noise from curtin>
Похоже, это вызвало необработанное событие udev, и причина, по которой
udevadm settle
возвращается с кодом выхода 1, останавливая Netplan и программу установки. Странно как код выхода 1 из
mdadm
in curtin не хватило, чтобы также вывести его из строя до того, как он попал в Netplan.
Удаление этой части конфигурации хранилища устранило проблему,
- id: md0-bios-boot
type: raid
preserve: false
raidlevel: 1
devices:
- sda-bios-boot
- sdb-bios-boot
name: md0
ptable: gpt
Полная конфигурация хранилища:
storage:
config:
- id: disk-sda
type: disk
preserve: false
ptable: gpt
wipe: superblock
grub_device: true
path: /dev/sda
- id: disk-sdb
type: disk
preserve: false
ptable: gpt
wipe: superblock
grub_device: true
path: /dev/sdb
- id: sda-bios-boot
type: partition
preserve: false
device: disk-sda
number: 1
size: 1MB
flag: bios_grub
- id: sdb-bios-boot
type: partition
preserve: false
device: disk-sdb
number: 1
size: 1MB
flag: bios_grub
# NOTE: part that had to be removed
- id: md0-bios-boot
type: raid
preserve: false
raidlevel: 1
devices:
- sda-bios-boot
- sdb-bios-boot
name: md0
ptable: gpt
- id: sda-root
type: partition
preserve: false
device: disk-sda
number: 2
size: -1
- id: sdb-root
type: partition
preserve: false
device: disk-sdb
number: 2
size: -1
- id: md1-os
type: raid
preserve: false
raidlevel: 1
devices:
- sda-root
- sdb-root
name: md1
ptable: gpt
- id: md1-os-rootfs
type: format
preserve: false
volume: md1-os
fstype: ext4
- id: mount-rootfs
type: mount
device: md1-os-rootfs
path: /