Подготовка к переходу
Zotac (Тестовый стенд)
Используется UEFI, так как после перепрошивки UEFI нормально заработал. Разметка на диске GPT. На Zotac используется Systemd-boot. Директория /boot
является одновременно и EFI разделом и boot разделом.
Каталог /boot
имеет атрибут EFI раздела. Примонтирован в отдельный раздел. Каталог /efi
отсутствует. Размер каталога в 1Гб достаточен что бы разместить там множество ядер. Это является условием возможности использования Systemd-boot.
user@lan-zotac /boot> ls -la /boot/ /efi/
ls: cannot access '/efi/': No such file or directory
/boot/:
total 29508
drwxr-xr-x 5 root root 4096 Jan 1 1970 ./
drwxr-xr-x 1 root root 142 Jun 23 17:35 ../
drwxr-xr-x 6 root root 4096 Jun 23 14:30 EFI/
drwxr-xr-x 6 root root 4096 Jun 23 14:49 grub/
-rwxr-xr-x 1 root root 13286400 May 12 20:56 intel-ucode.img*
drwxr-xr-x 4 root root 4096 Jun 24 00:30 loader/
-rwxr-xr-x 1 root root 16908800 Jun 23 06:34 vmlinuz-linux-zen*
Команда установки Systemd-boot:
sudo bootctl list
sudo bootctl install
Команда установки Grub:
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo grub-install --force --recheck --efi-directory=/boot/ --boot-directory=/boot/ --debug /dev/sda
На Zotac каталог нужно переименовать в /efi
, настроить монтирования и переустановить загрузчики.
Lan-lucky (Основной ПК)
На Lan-lucky имеются и каталог /boot
и /efi
. Каталог /efi
примонтирован в отдельный раздел.
user@lan-lucky ~> ls -la /boot/ /efi/
/boot/:
total 391244
drwxr-xr-x 1 root root 522 июн 23 17:09 ./
drwxr-xr-x 1 root root 204 июн 23 17:50 ../
drwxr-xr-x 1 root root 152 июн 23 13:04 grub/
-rw------- 1 root root 155054155 июн 23 12:56 initramfs-6.12-x86_64-fallback.img
-rw------- 1 root root 16960599 июн 23 12:56 initramfs-6.12-x86_64.img
-rw------- 1 root root 154173909 июн 20 22:12 initramfs-6.15-x86_64-fallback.img
-rw------- 1 root root 15962573 июн 20 22:11 initramfs-6.15-x86_64.img
-rw------- 1 root root 15479653 мая 12 2024 initramfs-linux.img
-rw-r--r-- 1 root root 13286400 мая 12 20:56 intel-ucode.img
-rw-r--r-- 1 root root 22 июн 19 18:49 linux612-x86_64.kver
-rw-r--r-- 1 root root 21 июн 19 18:49 linux615-x86_64.kver
drwxr-xr-x 1 root root 22 янв 5 01:04 memtest86+/
-rw-r--r-- 1 root root 276 июн 23 17:09 refind_linux.conf
-rw-r--r-- 1 root root 13890048 июн 23 12:56 vmlinuz-6.12-x86_64
-rw-r--r-- 1 root root 15790592 июн 20 12:17 vmlinuz-6.15-x86_64
/efi/:
total 2
drwxr-xr-x 4 root root 512 янв 1 1970 ./
drwxr-xr-x 1 root root 204 июн 23 17:50 ../
drwxr-xr-x 8 root root 512 июн 23 17:18 EFI/
drwxr-xr-x 4 root root 512 июн 23 12:53 loader/
Команда установки Grub:
sudo grub-mkconfig -o /boot/grub/grub.cfg
sudo grub-install --efi-directory=/boot --recheck --debug --bootloader-id=Manjaro --target=x86_64-efi /dev/nvme0n1
Необходимо объединить /boot
и /efi
, увеличить полученный раздел до 1Тб, настроить монтирования и установить Systemd-boot .
Summary
Надо учесть что на Zotac установлена система через archinstall
. То есть считаем что установка канонически правильная. Его схема взята за образец и дальше будем ориентироваться на неё.
Проблемы при переходе
Первая попытка
При первой попытке перезагрузке я столкнулся с тем что не смог загрузиться. Начал восстанавливать загрузку через LiveCD Arch Linux.
При генерации в chroot через mkinitcpio sudo mkinitcpio -P
мне выдавалось предупреждение:
==> WARNING: Note: no cmdline files were found and --cmdline is not set!
==> WARNING: Reusing current kernel cmdline from /proc/cmdline
Предупреждение это не строгая ошибка, поэтому я не предавал ей значения. Как оказалось очень зря!
Это то почему я не могу загрузиться после восстановления из LiveCD. В параметры ядра записывались данные из параметров ядра LiveCD. В процессе запуска реального хоста применялись не правильные параметры. Загрузка заканчивалась не удачей.
Структуру параметров ядра я смотрел на своём тестовом стенде который уже работал на Arch Linux:
user@lan-zotac /e/mkinitcpio.d> cat /proc/cmdline
root=PARTUUID=2aa6782c-15f0-4d33-9f73-b0eda539aca0 rootflags=subvol=@ rw rootfstype=btrfs
Добавил параметры ядра в файл /etc/kernel/cmdline
. На моём хосте его почему то не было(!).
user@lan-lucky ~> cat /etc/kernel/cmdline
root=UUID=93bda743-9226-4764-9eaa-9478d379f9e8 rw rootflags=subvol=@ quiet
Здесь укажите свои данные. UUID раздела можно посмотреть командой lsblk -f
В итоге при генерации в chroot через mkinitcpio нужно все таки использовать --cmdline
что бы пробросить правильные параметры для ядра.
Проблема с Grub
В Manjaro установка ядер завязано на Grub. Поэтому от Grub полностью избавиться не получится. Удалить его не получится. Нужно переходить на Arch.
UKI и обычные ядра
UKI гененерируется автоматически через mkinitcpio, и они потом сразу видны Systemd-boot. Для обычных ядер нужно вручную прописывать конфигурацию.
Пример записи загрузчика в Systemd-boot:
root@lan-lucky /b/l/entries# cat manjaro.conf
title Manjaro Linux 6.12
linux /vmlinuz-6.12-x86_64
initrd /initramfs-6.12-x86_64.img
options root=UUID=93bda743-9226-4764-9eaa-9478d379f9e8 rw rootflags=subvol=@ quiet
sudo bootctl list
sudo bootctl install
sudo bootctl status
Конфигурация UKI ядер
Я остановился на UKI ядрах. При установке обычных ядер из репозиториев в Arch Linux приезжает файл конфигурации расположенный в /etc/mkinitcpio.d/
. Его надо отредактировать что бы отключить генерацию initrd обычных ядер и включить генерацию UKI ядер.
Произведем это на примере linux-lts ядра:
user@lan-lucky /e/mkinitcpio.d> sudo cat /etc/mkinitcpio.d/linux-lts.preset
# mkinitcpio preset file for the 'linux-lts' package
#ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux-lts"
PRESETS=('default' 'fallback')
#default_config="/etc/mkinitcpio.conf"
#default_image="/boot/initramfs-linux-lts.img"
default_uki="/boot/EFI/Linux/arch-linux-lts.efi"
default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"
#fallback_config="/etc/mkinitcpio.conf"
#fallback_image="/boot/initramfs-linux-lts-fallback.img"
fallback_uki="/boot/EFI/Linux/arch-linux-lts-fallback.efi"
fallback_options="-S autodetect"
sudo mkinitcpio -P
Systemd-boot-manager
Для управления записями загрузчика нужен пакет systemd-boot-manager. Неприятный эффект, он затирает вручную созданные записи.