1

Моя материнская плата представляет собой следующую модель с последней версией 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. Я попробовал несколько вариантов аргументов для каждого инструмента, но я не мог заставить эфир работать так, как есть.

1 ответ1

0

В конце концов я нашел решение, но это похоже на взлом. Я просто хотел опубликовать это здесь для других, пока не придет лучшее решение.

Преобразовав файл kernel-opts из вопроса в UTF-16 (Unicode) и используя его, я смог решить проблему. Мне также пришлось отбросить первые два байта преобразованного файла; не уверен, почему iconv добавляет эти байты. Я использовал следующую команду для преобразования в UTF-16.

iconv -f ASCII -t UTF-16 kernel-opts | dd bs=1 skip=2 > kernel-opts-unicode

Затем я удалил старые загрузочные записи, загрузился обратно в UEFI Shell v2 Live CD и выполнил следующие команды.

bcfg boot add 0 fs1:\vmlinuz-linux "Arch Linux"
bcfg boot -opt 0 fs1:\kernel-opts-unicode

Это произвело следующую запись в соответствии с efibootmgr -v

Boot0000* Arch Linux    PciRoot(0x0)/Pci(0x4,0x0)/Pci(0x0,0x0)/Sata(1,65535,0)/HD(2,GPT,e5f7abe4-75bf-4c63-a76b-504c17eb5460,0x1000,0x200000)/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.

После этого система могла загружаться без каких-либо предупреждений или ошибок.

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