![Как поделиться загрузочным разделом EFI](https://rvso.com/image/1520700/%D0%9A%D0%B0%D0%BA%20%D0%BF%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D1%8C%D1%81%D1%8F%20%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BE%D1%87%D0%BD%D1%8B%D0%BC%20%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%BE%D0%BC%20EFI.png)
У меня есть две установки 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. Было обсуждено несколько вариантов:
- Установите другой основной пакет Linux на одну систему.
- Создайте собственный пакет Linux из AUR, который переименует ядро.
- Используйте отдельный раздел 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
.