Как поделиться загрузочным разделом EFI

Как поделиться загрузочным разделом EFI

У меня есть две установки Archlinux на системе EFI, настроенной с помощью gummiboot. Одна из них имеет корневой каталог /dev/sda2, другая — /dev/sdb1. Обе используют /dev/sda1, системный раздел EFI, в качестве раздела /boot, но размещают образы ядра в разных местах:

/boot/loader/entries/arch.conf:

title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=/dev/sda2 rw

/boot/loader/entries/arch-here.conf:

title   HERE Arch Linux
linux   /here-img/vmlinuz-linux
initrd  /here-img/intel-ucode.img
initrd  /here-img/initramfs-linux.img
options cryptdevice=/dev/sdb1:cryptroot root=/dev/mapper/cryptroot rw

Это было нормально, пока я не обновил ядро ​​с 4.8.13 до 4.9 на sdb. В следующий раз, когда я загрузился в sda, он выдал ошибку

Warning: /lib/modules/4.8.13-1-ARCH/modules.devname not found
...
ERROR: device '/dev/sda2 not found. Skipping fsck.
...

Я загрузился обратно в sdb, переустановил ядро ​​4.8.13 и обнаружил, что могу загрузиться sdaснова. Однако теперь я больше не мог загрузиться в sdb, так как он не смог загрузить хук шифрования, необходимый для открытия /dev/sdb1.

Я решил это, сделав chroot в /dev/sdb1 sdaи установив 4.9 снова. Это позволило мне загрузиться в , sdbно не sda.

Теперь я застрял в цикле, где мне нужно пересобирать образ ядра каждый раз, когда я хочу переключиться между установками. Кажется, что два ядра как-то мешают друг другу.

Вот шаги, которые я выполняю sdaкаждый раз при установке, когда хочу загрузиться sdb:

sudo cryptsetup open /dev/sdb1 cryptroot
sudo mount /dev/mapper/cryptroot /mnt/
sudo mount /dev/sda1 /mnt/boot/
chroot /mnt/
sudo pacman -U /var/cache/pacman/pkg/linux-4.8.13-1-x86_64.pkg.tar.xz /var/cache/pacman/pkg/nvidia-375.20-3-x86_64.pkg.tar.xz /var/cache/pacman/pkg/nvidia-utils-375.20-3-x86_64.pkg.tar.xz

Действия, которые я предпринимаю, sdbкогда хочу переехать, sdaпохожи, но не срабатывают

/lib/modules/4.8.13-1-ARCH is not a valid kernel module directory

Я решаю эту проблему, создавая символическую ссылку /lib/modules/4.9-1-ARCH на /lib/modules/4.8.13-1-ARCH.

Я уверен, что я делаю здесь как минимум одну, если не много вещей неправильно (эта симлинк кажется ужасным хаком). Кажется, мои ядра как-то мешают. Как это исправить?

решение1

Мне удалосьполучить помощьна форумах Arch и хотел поделиться этим здесь.

Хотя каждая система записывала данные в свой образ initramfs, обе перезаписывали одно и то же ядро.линуксПакет, включенный в репозитории, всегда помещает образ в /boot/vmlinuz-linux. Было обсуждено несколько вариантов:

  1. Установите другой основной пакет Linux на одну систему.
  2. Создайте собственный пакет Linux из AUR, который переименует ядро.
  3. Используйте отдельный раздел EFI для каждой системы.

Я выбрал 1, так как он показался мне самым простым. Установка linux-ltsвместо linuxодной системы предотвратила вмешательство ядер. Загрузочные записи теперь выглядят так:

/boot/loader/entries/arch.conf

title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=/dev/sda2 rw

/boot/loader/entries/arch-here.conf

title   HERE Arch Linux
linux   /vmlinuz-linux-lts
initrd  /initramfs-linux-lts.img
options cryptdevice=/dev/sdb1:cryptroot root=/dev/mapper/cryptroot rw

Обратите внимание, что пользователям NVIDIA, желающим воспользоваться этим подходом, необходимо будет установить nvidia-ltsвместо nvidia.

Связанный контент