Моя материнская плата представляет собой следующую модель с последней версией BIOS: https://www.asus.com/us/Motherboards/CROSSHAIR_V_FORMULAZ/
Я следовал стандартным инструкциям Arch Linux для настройки EFI для загрузки с использованием ядра в качестве EFISTUB. Это то, что хорошо работало для меня более года на одном и том же оборудовании, но когда я попытался изменить параметры своего ядра, мне показалось, что что-то сломалось. Ни один из обычных подходов не сработал.
Сначала я попытался использовать efibootmgr с помощью следующей команды:
efibootmgr -d /dev/sda -p 1 -b 0000 -g -c -l \vmlinuz-linux -L "Linux" -u "root=/dev/mapper/default-root rw initrd=initramfs-linux.img"
это добавило следующую запись, показанную с помощью efibootmgr -v
Boot0000* Linux HD(1,GPT,76dd039b-764a-4b07-81ed-61921dfdab62,0x800,0x800)/File(\vmlinuz-linux)r.o.o.t.=./.d.e.v./.m.a.p.p.e.r./.d.e.f.a.u.l.t.-.r.o.o.t. .r.w. .i.n.i.t.r.d.=./.i.n.i.t.r.a.m.f.s.-.l.i.n.u.x...i.m.g.
Когда я пытаюсь загрузить эту запись, я получаю ошибку уровня BIOS, что не удается найти загрузочные устройства.
Затем я попытался использовать инструмент bcfg
в оболочке UEFI версии 2 для live CD.
Для этого мне пришлось создать текстовый файл kernel-opts в /boot
поэтому я выполнил следующее.
echo "boot=/dev/mapper/default-root rw initrd=initramfs-linux.img > /boot/kernel-opts
Затем я загрузил UEFI Shell v2 с live CD и в оболочке я выполнил следующее.
bcfg boot add 0 fs1:\vmlinuz-linux "Arch Linux"
bcfg boot -opt 0 fs1:\kernel-opts
Используя efibootmgr -v
я снова проверил новую запись.
Boot0000* Arch Linux PciRoot(0x0)/Pci(0x4,0x0)/Pci(0x0,0x0)/Sata(0,65535,0)/HD(2,GPT,5cec78ae-39af-4434-9b57-9c08b8032147,0x1000,0x200000)/File(\vmlinuz-linux)root=/dev/mapper/default-root rw initrd=\initramfs-linux.img
На этот раз при загрузке обнаруживается загрузочное устройство, но возникает паника ядра, когда он не может найти root fs.
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.11.3-1-ARCH #1
Я пришел к выводу, что bcfg
правильно определяет первую часть, местоположение ядра, но аргументы были неверны, особенно потому, что они не были закодированы в Unicode. Я попробовал несколько вариантов аргументов для каждого инструмента, но я не мог заставить эфир работать так, как есть.