IT-инфраструктура • инструкции • практикаПоиск по сайту

Серверы и системное администрирование

Найти материал →

Установка debian без Grub: загрузка linux через efistub и Uefi

Собираем собственный Debian: EFIStub вместо GRUB

Эта часть посвящена установке ранее подготовленного образа Debian на диск и запуску системы без GRUB. Вместо привычного загрузчика будет использоваться сама прошивка материнской платы - UEFI, а ядро Linux будет запускаться напрямую через EFIStub.

В предыдущем материале был собран минимальный образ системы и упакован в squashfs-архив `mate-rootfs.sqfs`. Теперь этот образ предстоит развернуть на физический диск, создать необходимые разделы, настроить пользователей и зарегистрировать ядро в NVRAM. Тем, кто хочет разобраться в общей логике сборки системы, пригодится подробное описание процесса сборки собственного Debian и загрузки Linux через EFIStub.

Важно понимать: подготовленный squashfs-файл не является Live-системой. Он не предназначен для самостоятельной загрузки с флешки, поэтому все операции выполняются из любой рабочей Live-среды. Подойдёт официальный Debian Stable с графическим окружением MATE, другой дистрибутив или флешка с Ventoy. Главное - загрузиться в UEFI-режиме до рабочего стола либо консоли.

После запуска Live-системы подключите сеть, если образ хранится удалённо. При размещении архива на другом локальном разделе достаточно открыть файловый менеджер Caja и смонтировать нужный диск. Затем запустите терминал и получите root-сессию:

```bash
sudo -s
mkdir /media/rootfs
mount /media/rootfs /path/to/mate-rootfs.sqfs
```

Каталог `/media/rootfs` может называться иначе. Желательно заранее выбрать постоянные точки монтирования и придерживаться их до конца установки: ошибки в путях особенно легко допустить после перезагрузки.

Подготовка диска

Сначала определите имя целевого накопителя:

```bash
lsblk
```

Допустим, система установлена на NVMe-диск `/dev/nvme0n1`. Создайте новую GPT-разметку:

```bash
parted /dev/nvme0n1 mklabel gpt
```

Далее потребуется EFI-раздел, корневой раздел с `/home` и swap. Например, EFI-раздел можно сделать размером 768 МБ, корневой - 10 ГБ, а оставшееся пространство выделить под swap. Если swap-раздел не нужен, параметры разметки следует скорректировать.

После создания разделов установите необходимые флаги и отформатируйте файловые системы. EFI-раздел обычно форматируется в FAT32, корневой - в ext4, swap - специальной командой `mkswap`. Конкретные номера разделов зависят от выбранной схемы. Для NVMe они будут выглядеть как `/dev/nvme0n1p1`, `/dev/nvme0n1p2`, а для SATA-диска - например, `/dev/sda1` и `/dev/sda2`.

Создайте каталог назначения и подключите корневой раздел:

```bash
mkdir /media/target
mount /dev/nvme0n1p2 /media/target
```

Затем распакуйте или скопируйте содержимое подготовленного образа в новый корень системы. Если squashfs подключён в `/media/rootfs`, команда может выглядеть так:

```bash
cp -a /media/rootfs/. /media/target/
```

После копирования войдите в установленную систему через `chroot`:

```bash
chroot /media/target
```

Создайте обычного пользователя с помощью `adduser`, а затем задайте пароль суперпользователя:

```bash
adduser имя_пользователя
passwd root
```

На этом этапе необязательно монтировать `/dev`, `/proc` и `/sys`, поскольку пакеты внутри chroot устанавливаться не будут. После завершения выйдите из окружения:

```bash
exit
```

Настройка EFIStub

Теперь начинается собственно настройка EFIStub в Debian. Подключите EFI-раздел:

```bash
mkdir /media/efistb
mount /dev/nvme0n1p1 /media/efistb
```

Создайте каталог для загрузочных файлов, если его ещё нет:

```bash
mkdir -p /media/efistb/EFI/boot
```

Из установленной системы скопируйте ядро и initramfs:

```bash
cp /media/target/boot/vmlinuz-* /media/efistb/EFI/boot/vmlinuz.efi
cp /media/target/boot/initrd.img-* /media/efistb/EFI/boot/initrd.img
```

Имена файлов можно оставить исходными, но фиксированные названия упрощают дальнейшую настройку. Материнской плате необходимо сообщить, какой файл считать загрузочным. Для этого используется `efibootmgr`. В Debian Live нужный пакет обычно доступен в локальном кэше:

```bash
apt install -y efibootmgr
```

Затем создайте запись в NVRAM:

```bash
efibootmgr
--disk /dev/nvme0n1
--part 1
--label "Debian EFIStub"
--loader 'EFIbootvmlinuz.efi'
--unicode
'root=UUID=UUID_КОРНЕВОГО_РАЗДЕЛА rw initrd=EFIbootinitrd.img'
```

Параметр `--disk` указывает накопитель, `--part` - номер EFI-раздела, `--label` задаёт название пункта в меню прошивки, а `--loader` содержит путь к ядру. Аргумент `--unicode` нужен для передачи командной строки ядру в корректном формате.

Критически важен параметр `root=UUID=...`: вместо заглушки необходимо указать UUID корневого раздела. Узнать его можно командой:

```bash
blkid /dev/nvme0n1p2
```

Без initramfs ядро, скорее всего, не сможет найти корневую файловую систему и завершится kernel panic. Поэтому параметр `initrd=` должен точно соответствовать расположению рамдиска на EFI-разделе.

Что проверить перед перезагрузкой

Перед завершением работы убедитесь, что система действительно загружается в UEFI-режиме, а EFI-раздел имеет файловую систему FAT32 и флаг `esp`. Проверьте наличие файлов:

```bash
ls -l /media/efistb/EFI/boot/
```

В каталоге должны находиться `vmlinuz.efi` и `initrd.img`. Также полезно посмотреть созданные записи:

```bash
efibootmgr -v
```

Если запись отсутствует, проверьте, не запущена ли Live-система в режиме Legacy/CSM. В таком режиме прошивка может не позволить корректно изменить UEFI-NVRAM.

После перезагрузки откройте меню загрузки материнской платы и выберите пункт `Debian EFIStub`. При успешной настройке прошивка передаст управление ядру напрямую, без промежуточного GRUB. Такой подход сокращает количество компонентов в цепочке запуска, но требует вручную обновлять ядро и initramfs на EFI-разделе.

Обновление ядра

У EFIStub есть особенность: после установки нового ядра файлы в `/boot` изменятся, а копии на EFI-разделе останутся прежними. Поэтому обновление нужно автоматизировать. Например, можно создать небольшой скрипт, который после обновления пакетов копирует актуальные `vmlinuz-*` и `initrd.img-*` в `/EFI/boot/`, предварительно удаляя старые версии.

Другой вариант - использовать systemd-boot или механизм UKI, объединяющий ядро, initramfs и параметры запуска в единый EFI-файл. Однако для минимальной системы ручная схема остаётся прозрачной: достаточно контролировать UUID корневого раздела, имена файлов и содержимое NVRAM-записи.

Таким образом, установка Debian без GRUB сводится к четырём основным этапам: подготовке GPT-диска, копированию rootfs, размещению ядра на EFI-разделе и регистрации загрузочной записи через `efibootmgr`. Это и есть базовая схема того, как установить Debian на UEFI без загрузчика в привычном понимании, используя прямую загрузку Linux через прошивку.

Прокрутить вверх