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 ответ1

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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .