У меня есть 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
). Какие точные терминальные команды необходимы, чтобы сделать это?
Команды ниже более универсальны тогда для версии 3.13.0-35 ядра только.
$ 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'
Сокращают имя файла ядра путем удаления -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.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 не может быть открыто.
Согласно Debian wiki, это может быть сделано на нескольких простых шагах, которые переживут обновление ядра .
Примечание: это предполагает, что Вам смонтировали раздел EFI в /boot/efi
.
Создают /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
Добавляют запись загрузки:
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
, всегда обновляются.