Как загрузиться, загружают ядро с помощью тупика EFI (efistub) загрузчик?

У меня есть Ubuntu 14.04, работающая в режиме UEFI как только операционная система, никакая двойная загрузка здесь. Версия ядра 3.13.0-24-универсальна. Существует раздел EFI. В этом случае раздел EFI не в значении по умолчанию /dev/sda1 но в /dev/sda3 потому что я действительно на самом деле преобразовывал режим BIOS в режим EFI. Я использовал grub-efi-amd64 пакет, хотя это на самом деле загружает меню начальной загрузки GRUB из микропрограммного меню начальной загрузки UEFI (загрузки начальной загрузки UEFI \EFI\ubuntu\grubx64.efi).

Я хочу пропустить то двойное меню начальной загрузки, загружающее шаг и загрузиться быстрее, непосредственно от UEFI в ядро. Ядра Ubuntu с тех пор 12.10 имеют функцию "Kernel EFI stub loader".

Я знаю, что действительно должен скопировать ядро Ubuntu в раздел EFI (возможно переименовывают), и создайте запись в меню начальной загрузки UEFI (например, использование efibootmgr). Какие точные терминальные команды необходимы, чтобы сделать это?

14
задан 13 April 2017 в 05:23

2 ответа

Команды ниже более универсальны тогда для версии 3.13.0-35 ядра только.

1. Смонтируйте efi раздел и скопируйте файлы ядра там

$ mount /dev/sda3 /boot/efi

$ mkdir -pv /boot/efi/EFI/ubuntu/

$ cp -uv /boot/vmlinuz-* /boot/initrd.img-* /boot/efi/EFI/ubuntu/
'/boot/vmlinuz-3.13.0-35-generic' -> '/boot/efi/EFI/ubuntu/vmlinuz-3.13.0-35-generic'
'/boot/initrd.img-3.13.0-35-generic' -> '/boot/efi/EFI/ubuntu/initrd.img-3.13.0-35-generic'

2. Изменитесь имя файла ядра

Сокращают имя файла ядра путем удаления -generic, потому что , кажется, существует 39 пределов пути длины знака и Переименовывает файл (файлы) ядра для окончания в .efi, это гарантирует совместимость с большинством систем

$ for f in /boot/efi/EFI/ubuntu/vmlinuz-*-generic; do mv -uv -- "$f" "${f//-generic/}.efi"; done
'/boot/efi/EFI/ubuntu/vmlinuz-3.13.0-35-generic' -> '/boot/efi/EFI/ubuntu/vmlinuz-3.13.0-35-generic.efi'`

<глоток>, вышеупомянутое сокращение имени файла ядра имени недостаточно для dpkg, установил ядро магистрали , потому что, например /EFI/ubuntu/vmlinuz-3.16.0-031600rc6.efi без -generic все еще 40 символов в длину.

3. Добавьте новую запись в меню начальной загрузки EFI

Замена 3.13.0-35 в этом примере с Вашей определенной версией

$ kv=3.13.0-35;efibootmgr -c -p 3 -L $kv -l \EFI\ubuntu\vmlinuz-$kv.efi -u root=/dev/sda1 initrd=\\EFI\\ubuntu\\initrd.img-$kv-generic ro rootfstype=ext4 debug ignore_loglevel libata.force=dump_id crashkernel=384M-:128M

ядра, Эта новая запись меню начальной загрузки станет Вашим новым выбором начальной загрузки по умолчанию.

<глоток> Вам, возможно, не понадобились бы дополнительные параметры отладки debug, ignore_loglevel, libata.force=dump_id и crashkernel=384M-:128M. Initrd должен присутствовать, иначе загрузиться, зависает в" Коммутируемый к clocksource tsc. ", потому что корневое устройство sda1 не может быть открыто.

14
ответ дан 23 November 2019 в 03:00

Согласно Debian wiki, это может быть сделано на нескольких простых шагах, которые переживут обновление ядра .

Примечание: это предполагает, что Вам смонтировали раздел EFI в /boot/efi.

  1. Создают /etc/kernel/postinst.d/zz-update-efistub со следующим содержанием:

    #!/bin/sh
    cp /vmlinuz /initrd.img /boot/efi/EFI/ubuntu/
    

    Это - рычаг, который будет, работал на обновлении ядра для копирования последнего изображения ядра и initrd к соответствующему местоположению. Затем сделайте это исполняемым файлом и выполните его:

    sudo chmod +x /etc/kernel/postinst.d/zz-update-efistub
    sudo /etc/kernel/postinst.d/zz-update-efistub
    
  2. Добавляют запись загрузки:

    sudo efibootmgr -c -d /dev/sdb -p 1 -L "Ubuntu (efistub)" -l /EFI/ubuntu/vmlinuz -u "root=/dev/sdb2 rw initrd=/EFI/ubuntu/initrd.img quiet splash"
    

    не забывают изменяться -d и -p аргументы в зависимости от того, где Ваш системный раздел EFI. В моем случае это-/dev/sdb1, но это, вероятно, будет отличаться для Вас. Необходимо будет, вероятно, также измениться эти root= значение в ядре cmdline к корневому разделу.

    (Можно изменить маркировку на что-либо, Вы хотите путем изменения -L параметр.)

    запись загрузки, которую Вы просто добавили, станет записью по умолчанию. И это не повредится после обновления ядра, так как рычаг удостоверится vmlinuz и initrd.img, всегда обновляются.

5
ответ дан 23 November 2019 в 03:00

Другие вопросы по тегам:

Похожие вопросы: