Эта статья — сквозное продолжение моей предыдущей части тык. Если вам нужно понять, как запускать систему без grub, первая часть может стать необязательной.

Короткая рекурсия: в первой части мы собрали свой собственный образ системы и запаковали его в squashfs-архив mate-rootfs.sqfs. Во второй части мы установим этот образ себе на диск как основную операционную систему, где загрузчиком выступит сама материнская плата.

Наш собранный архив не является live-системой. Прежде чем делать какие-либо операции, перенесите образ в сеть, ftp-хранилища или на другой диск. Вследствие чего нам понадобится usb-флешка с записанной live-системой, неважно какая, главное — успешно загрузиться до рабочего стола или консоли (кому как удобно). В нашем случае будет использован официальный загрузочный образ debian stable с рабочим столом mate вместо терминала. тык

В моем частном случае я использовал ventoy, но сути это не меняет: нам нужно запустить live-образ, загрузившись до рабочего стола:

загрузка произошла успешно, на рабочем столе иконка установщика calamares — значит, все правильно.
загрузка произошла успешно, на рабочем столе иконка установщика calamares — значит, все правильно.

На этом этапе все как в обычном дистрибутиве Linux. Выбираем свою сеть (если по проводу — можно пропустить), вводим пароль и подключаемся к интернету, если образ лежит на удаленном хранилище. Если лежит на другом разделе, то просто его монтируем, кликнув на иконку диска в файловом менеджере caja.

Вот здесь и начинается установка. Открываем mate-terminal, вводим sudo -s для получения перманентной root-сессии, создаем папку mkdir /media/rootfs. Монтируем наш образ командой mount /media/rootfs /path/to/mate-rootfs.sqfs note: папка точки монтирования может быть произвольной, но один раз я смонтировал диск в /mnt, а после перезагрузки данные магически пропали. Может, недоглядел, разное бывает, но я предупреждал!

диск смонтирован успешно
диск смонтирован успешно

Сейчас будет немного душно: установщики calamares привстали, деды-сисадмины устали. Кто знает, как размечать, или у кого диск уже размечен — переходим ниже. Узнаем имя нашего целевого диска командой lsblk, например /dev/nvme0n1, и создаем на нем новую gpt-разметку диска parted /dev/diskname mklabel gpt . В правильной очередности создаем нужные файловые системы и ставим флаги:

parted /dev/diskname mkpart "" fat32 1MiB 769MiB
parted /dev/diskname set 1 esp on    # флаг для efi что раздел загрузочный

# efi раздел, размер большой, там будет лежать наше ядро

Размечаем наш корневой диск с единым /home и корнем:

parted /dev/diskname mkpart "" ext4 769MiB -10GiB

note: 10 гигов. 768МБ отбрасываем от начала, 10 гигов отнимаем с конца. Если не нужен swap-раздел, пишите без аргумента -10GiB.

Маркируем наши 10 гигов как swap-раздел:

parted /dev/diskname mkpart "" linux-swap -10GiB 100%

Остается только форматирование размеченных областей в файловые системы строго по очередности:

mkfs.vfat -F 32 /dev/disknamep1
mkfs.ext4 /dev/disknamep2
mkswap /dev/disknamep3
вызываем blkid и запоминаем uuid наших разделов для fstab (его можно вызвать позже, когда будем прописывать пути).
вызываем blkid и запоминаем uuid наших разделов для fstab (его можно вызвать позже, когда будем прописывать пути).

Смонтированный образ нас заждался, приступаем к нему. Делаем еще один mkdir, но для конечной точки нашего путешествия: mkdir /media/target, и монтируем в папку раздел, отформатированный в ext4, например: mount /media/target /dev/disknamep2 note: p2 — это сам раздел на нашем диске. На других дисках может быть sda, sdb, но логика та же, конечная цифра — номер раздела.

Копируем все, что содержит наш собранный rootfs:

cp -a --preserve=ALL /media/rootfs/* /media/target

# сохраняя все права доступа

После копирования системы нам нужно создать в ней пользователей и задать пароли. Мы не будем ставить пакеты в систему, монтировать VFS ядра (/dev /proc /sys) необязательно. Делаем chroot /media/target, создаем своего пользователя командой adduser, после пишем passwd root и создаем пароль для root-пользователя, выходим из нашего окружения командой exit и переходим к нашему efistub.

Сначала еще раз создадим папку в /media, но уже с целью монтирования нашего efi-раздела: mkdir /media/efistb, и смонтируем раздел в нее: mount /media/efistb /dev/disknamep1. Важно: копируем ядро из нашего распакованного rootfs: /boot/vmlinuz-* и сгенерированный рамдиск initrd.img-* рядом с ним в папку /media/efistb/EFI/boot (если внутри раздела нет папок, нужно создать). Дальше для простоты переименовываем наше ядро в vmlinuz.efi, а его рамдиск — в initrd.img.

ядро оказалось здесь. Копировал с помощью caja, запущенной в той же root-сессии, но можно и в cli: cp /boot/vmlinuz-* /boot/initrd.img-* /media/efistb/EFI/boot и сделать mv /media/efistb/EFI/boot/initrd.img-* /media/efistb/EFI/boot/initrd.img  && mv /media/efistb/EFI/boot/vmlinuz-* /media/efistb/EFI/boot/vmlinuz.efi
ядро оказалось здесь. Копировал с помощью caja, запущенной в той же root-сессии, но можно и в cli: cp /boot/vmlinuz-* /boot/initrd.img-* /media/efistb/EFI/boot и сделать mv /media/efistb/EFI/boot/initrd.img-* /media/efistb/EFI/boot/initrd.img && mv /media/efistb/EFI/boot/vmlinuz-* /media/efistb/EFI/boot/vmlinuz.efi

Наша материнская плата должна знать, где лежит наше ядро. Для внесения изменений в nvram и регистрации нового загрузчика нам потребуется efibootmgr. В загрузочном образе debian в кэше apt уже лежит нужный нам пакет, его можно поставить без интернета:

apt install -y efibootmgr

Делаем запись в nvram:

efibootmgr --create --disk /dev/disknameX --part Y --label "linux loader" --loader '/EFI/boot/vmlinuz.efi' --unicode "root=UUID=your root id here rw initrd=\EFI\boot\initrd.img"

Выглядит страшно, но всё просто. --disk — расположение, где находится наш диск; --part — номер раздела на диске /dev/diskname, где лежит наше ядро vmlinuz.efi; --label — метка названия в биосе при выборе, что запускать; --loader — путь к нашему ядру; --unicode делает запись в юникод-формате (эмодзи не пробовал, забавно было бы). Само ядро без своего рамдиска упадет в панику. Далее идут аргументы запуска ядра, те самые cmdline из загрузчика grub: root=UUID= — путь к нашей корневой системе (вспоминаем его uuid или запускаем заново blkid и записываем свое значение); rw — монтирование корня на чтение/запись; initrd=\EFI\boot\initrd.img — путь к нашему рамдиску. note: В старых мануалах или в ответах от ИИ (куда уж без этого попугая) могут встречаться пути вида '\\EFI\boot\\vmlinuz.efi' в опции --loader. Это уже устарело: если так внести запись, она забьется бинарщиной и загрузка станет невалидной. efibootmgr сам переведет unix-формат в dos, но это правило не касается аргументов ядра.

Переходим к заполнению файла fstab в нашем rootfs, по умолчанию там пусто. Его нужно заполнить базовым содержимым: открываем его в nano /etc/fstab и вносим запись:

# Основной диск (корневой раздел ext4)
UUID=1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d  /      ext4  defaults,noatime  0  1

# EFI раздел (fat32, монтируется обычно в /boot/efi нужно для более легкого обновления ядра)
UUID=A1B2-C3D4                             /boot/efi  vfat  defaults          0  2

# swap раздел в конце диска
UUID=f9e8d7c6-b5a4-3f2e-1d0c-9b8a7f6e5d4c  none   swap  sw                0  0

Понятно, что значения примерочные: вызываем blkid и вписываем свои uuid, остальное не трогаем.

Все важные операции выполнены. Просто перезагружаемся из нашей live-системы. Если всё сделано правильно, у нас появится имя, заданное из --label, в списке загрузки биоса. Ставим его первым и загружаемся!

финишная прямая, нас встретил менеджер входа lightdm. Вводим свои данные, заданные при adduser, и попадаем на рабочий стол.
финишная прямая, нас встретил менеджер входа lightdm. Вводим свои данные, заданные при adduser, и попадаем на рабочий стол.

Итого: вот и подошел к концу цикл постройки нашего debian-корча с нуля. Прошли путь от архива с системой до полностью функционального и обезжиренного debian, попутно загрузив наше ядро без посредников-загрузчиков. При такой сборке система настолько маленькая, что нет даже sudo — нужен древний и забытый всеми su -l. На каждый чих система будет требовать пароль, но корч требует жертв. В конце концов, система на диске весит смешные по нашим меркам 2.4 гигабайта. Про обновление ядра, не забыл, тут ничего нового, просто скопируйте и замените старые файлы новыми и перезагрузитесь.

От автора: Вместо mate-core можно поставить cinnamon-core, лично таким дистрибутивом пользуюсь на постоянной основе.

Комментарии (3)


  1. Granulex
    22.07.2026 15:36

    Схема с EFIstub красивая, добавлю один практический момент про откат. Без grub у вас нет меню с запасным ядром: первое же неудачное обновление ядра приводит к чёрному экрану без вариантов. Лечится вторым UEFI-пунктом через efibootmgr, указывающим на заведомо рабочее ядро – получаете ту же страховку, что давал grub, только без самого grub. И стоит помнить, что часть прошивок чистит или переставляет записи в NVRAM после сброса или севшей батарейки CMOS, и загрузочный пункт может тихо исчезнуть.


    1. executionerrok Автор
      22.07.2026 15:36

      Помню платы gigabyte иногда забывают строчки загрузки на ровном месте. Касается только efibootmgr, с виндовым загрузчиком или grub проблем небыло


  1. AVX
    22.07.2026 15:36

    Есть один минус в такой системе - привязка к конкретной материнке. С обычным grub2 я один из жестких дисков переносил на множество разных компов, и всегда без проблем загружалось, без необходимости настраивать загрузчик или вносить что-то там в EFI или BIOS.