Как открыть загрузочный раздел EFI


2

У меня есть две установки 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, обе перезаписывали одно и то же ядро. Пакет linux , включенный в репозитории, всегда помещает образ в / 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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.