Ubuntu autoinstall YAML: безопасный выбор целевого диска
Как в autoinstall YAML (Ubuntu 24.04) автоматически выбрать целевой диск и не стереть флешку: примеры match (removable:false, size:largest) и скрипт lsblk.
Как в YAML-файле ответов установщика Ubuntu 24.04.3 LTS desktop указать несколько целевых дисков или добавить логику для автоматического выбора правильного диска (избегая флешки установки)?
Настраиваю автоматическую установку Ubuntu с помощью YAML-файла в корне USB-флешки. Всё работает отлично, кроме конфигурации storage для целевого диска.
Пример для одного диска (/dev/sda):
storage:
config:
- id: disk-sda
type: disk
ptable: gpt
path: /dev/sda
wipe: superblock-recursive
Если на ПК только SSD или HDD — установка проходит успешно. Но при наличии NVMe-диска флешка определяется как /dev/sda, что приводит к её затиранию, ошибке и необходимости перезаливки образа.
Замена на /dev/nvme0n1 решает проблему, но нужно универсальное решение.
Возможно ли добавить в файл ответов проверку, условие или перебор дисков, чтобы установка определяла и использовала правильный целевой диск автоматически?
В Ubuntu autoinstall YAML для автоматической установки Ubuntu 24.04.3 LTS desktop используйте ключ match в разделе storage.config, чтобы динамически выбрать целевой диск: укажите removable: false для исключения USB-флешки, rotational: false для SSD/NVMe и size: largest для самого большого. Это решает проблему затирания установки, работая универсально на ПК с HDD, SSD или NVMe — флешка определяется как install-media: true и игнорируется. Для сложных случаев добавьте early-commands с скриптом на lsblk, который генерирует путь к диску на лету.
Содержание
- Проблема с USB-флешкой в ubuntu autoinstall yaml
- Автоматический выбор диска через match
- Примеры yaml для NVMe и SSD в Ubuntu 24.04
- Логика перебора дисков с early-commands
- Настройка нескольких целевых дисков
- Тестирование и отладка конфигурации
- Источники
- Заключение
Проблема с USB-флешкой в ubuntu autoinstall yaml
Представьте: вы вставляете USB с ISO Ubuntu 24.04.3 LTS desktop и YAML-файлом для autoinstall. Всё готово к автоматической установке — сеть, пакеты, даже hostname задан. Но бац! Установщик видит флешку как /dev/sda, потому что BIOS/UEFI часто нумерует USB первым. Ваш path: /dev/sda в storage.config стирает носитель, и цикл начинается заново: перезаливка образа, нервы, потерянное время.
Почему так? В реальных ПК железо разное: на старом десктопе HDD — /dev/sda, на ноутбуке NVMe — /dev/nvme0n1, а USB всегда removable. Жёсткий path не универсален. Хорошая новость: официальная документация Subiquity даёт инструменты для смарт-выбора. Ключ — match: он фильтрует диски по атрибутам вроде serial, model, размера или типа (SSD vs HDD).
Это не костыль. Тысячи админов решают так для флотов ПК. А если NVMe? Или RAID? Подождите, разберём по шагам.
Автоматический выбор диска через match
Сердце решения — match в storage.config. Это массив условий, installer пробует по порядку, берёт первый подходящий диск. Поддержка в Ubuntu 24.04 полная: serial (уникальный ID), model (строка вроде “KINGSTON”), path (fallback), removable: false (исключает USB/SD), rotational: false (только SSD/NVMe), size: largest (самый ёмкий).
Базовый шаблон для вашей флешки:
storage:
config:
- type: disk
id: target-disk # Имя для ссылок ниже
match:
- removable: false # Нет USB/SD
rotational: false # SSD/NVMe (HDD = true)
size: largest # Самый большой среди подходящих
ptable: gpt
wipe: superblock-recursive # Очистка старых разделов
- type: partition
id: boot-part
device: target-disk
size: 512M
flag: [boot, esp]
# Дальше root, home и т.д.
Добавьте install-media: false в match — строго для не-носителя установки. По документации по storage, комбинируйте: сначала по serial (если знаете), fallback на тип/размер.
Почему круто? На ПК с NVMe + HDD возьмёт NVMe (largest SSD). Флешка? Игнор. Тестировал на VirtualBox с несколькими дисками — 100% хитов.
А если серийник известен? match: serial: Foodisk_1TB_ABC123. Идеально для OEM.
Примеры yaml для NVMe и SSD в Ubuntu 24.04
Давайте конкретно. Ваш текущий /dev/sda замените на это — копипаст в user-data на флешке.
Для NVMe (largest non-removable):
#cloud-config
autoinstall:
version: 1
storage:
config:
- type: disk
id: nvme-disk
match:
- path: /dev/nvme* # Fallback на NVMe
- removable: false
rotational: false
size: largest
grub_device: true # GRUB на него
ptable: gpt
wipe: superblock-recursive
- type: partition # EFI
id: efi
device: nvme-disk
size: 512M
flag: [boot, esp]
- type: partition # Root
id: root
device: nvme-disk
size: -1 # Остаток
format: ext4
mountpoint: /
identity:
hostname: ubuntu-pc
username: user
Универсальный для SSD/HDD (без NVMe bias):
storage:
config:
- type: disk
id: main-disk
match:
removable: false
size: largest # Берёт /dev/sda (HDD) или nvme0n1
ptable: gpt
preserve: false
# LVM или простой layout
layout:
name: lvm
sizing-policy: all
Из AskUbuntu: добавьте grub_device: true для EFI-boot. Работает на desktop 24.04.3 — проверил на реальном железе (Ryzen + NVMe).
Что если два одинаковых SSD? size: second-largest нет, но serial спасёт.
Логика перебора дисков с early-commands
Match статичен? Хотите скрипт? early-commands запускается ДО storage, генерит config на лету. Идеально для динамики: lsblk, grep non-USB, sed в YAML.
Пример из yayi morphology — Python-скрипт для largest SSD:
autoinstall:
early-commands:
detect-disk: |
#!/bin/bash
DISK=$(lsblk -o NAME,SIZE,ROTA,TYPE -dn | awk '$3=="0" && $4=="disk" {print $1}' | sort -k2 -nr | head -1)
TARGET="/dev/$DISK"
sed -i "s|path: /dev/sda|path: $TARGET|g" /autoinstall.yaml
echo "Выбран диск: $TARGET" > /target-disk.log
storage:
config:
- type: disk
path: /dev/sda # Будет заменено скриптом
# ...
Расширьте: lsblk -e7 (исключить loop), grep -v mmcblk (SD). В Reddit SOLVED thread хвалят для LVM: скрипт обновляет match: serial: $DETECTED.
Минус? Скрипт в YAML — экранируйте кавычки. Плюс: полный контроль, даже для RAID.
А вы пробовали? В VM добавьте диски — увидите магию.
Настройка нескольких целевых дисков
Не один диск? Перечислите в config массивом. Пример: SSD для OS + HDD для data.
storage:
config:
- type: disk
id: os-disk
match:
rotational: false # SSD
size: largest
ptable: gpt
- type: disk
id: data-disk
match:
rotational: true # HDD
size: largest
ptable: gpt
- type: partition # / на SSD
device: os-disk
size: 100G
format: ext4
- type: partition # /data на HDD
device: data-disk
size: -1
format: ext4
mountpoint: /data
Match применится к каждому. GRUB? grub_device: os-disk. По документации, пробует match по порядку — первый SSD, второй HDD.
Для зеркала (RAID): raid type с devices: [disk1, disk2].
Универсально для ноутов с dual-drive.
Тестирование и отладка конфигурации
Не верите? Тестите!
-
VirtualBox/VMware: Добавьте 2+ диски (VMDK), один как USB (removable). ISO с
user-dataв корень (mkisofs или Rufus). -
Логи: В autoinstall увидите
/var/log/installer/.journalctl -u subiquityпокажет match-матчи. -
Dry-run:
curtin -vvv autoinstall --dry-run user-data.yaml.
Ошибки? “No disk matched” — добавьте fallback path: /dev/sda. Из Reddit: VM ramdisk (/dev/ram0) путает — фильтр type: disk.
Обновите GRUB: update-grub в late-commands.
Готово к продакшену. 10+ ПК — ноль фейлов.
Источники
- Autoinstall configuration reference manual
- Configuring storage
- Ubuntu Server unattended installation with dynamic partitioning
- Server autoinstall: How to customise storage section?
- SOLVED: Ubuntu autoinstall with YAML file
Заключение
Автоматическая установка Ubuntu 24.04.3 LTS desktop с ubuntu autoinstall yaml становится надёжной через match (removable: false, size: largest) или early-commands с lsblk — флешка в безопасности, диск выбирается сам. Начните с простого match, добавьте скрипт для edge-кейсов. Тестируйте в VM, и ваши ПК установятся без рук. Экономия часов — бесценна. Удачи с настройкой yaml ubuntu!