¿Cómo iniciar la carga del kernel utilizando el cargador EFI stub (efistub)?
14
Tengo Ubuntu 14.04 ejecutándose en modo UEFI como único sistema operativo, no hay arranque dual aquí. La versión del kernel es 3.13.0-24-generic. Hay una partición EFI. En este caso, la partición EFI no está en el valor predeterminado /dev/sda1sino /dev/sda3porque realmente convertí el modo BIOS al modo EFI . He usado el grub-efi-amd64paquete, aunque eso realmente carga el menú de arranque GRUB desde el menú de arranque del firmware UEFI (cargas de arranque UEFI \EFI\ubuntu\grubx64.efi).
Sé que necesito copiar el kernel de Ubuntu en la partición EFI (posiblemente cambiar el nombre) y crear una entrada en el menú de arranque UEFI (por ejemplo, usando efibootmgr). ¿Qué comandos de terminal exactos son necesarios para hacer esto?
Acorte el nombre del archivo del núcleo al eliminarlo -genericporque parece que hay un límite de ruta de 39 caracteres de longitud y Cambiar el nombre de los archivos del núcleo para terminar .efi, esto garantiza la compatibilidad con la mayoría de los sistemas
$ 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'`
El acortamiento del nombre del archivo de kernel de nombre anterior no es suficiente para un kernel de línea principaldpkg instalado , porque por ejemplo, sin todavía tiene 40 caracteres de longitud./EFI/ubuntu/vmlinuz-3.16.0-031600rc6.efi-generic
3. Agregue una nueva entrada al menú de arranque EFI
Reemplace 3.13.0-35en este ejemplo con su versión de kernel específica
Esta nueva entrada del menú de inicio se convertirá en su nueva opción de inicio predeterminada.
Puede que no necesite los parámetros de depuración adicionales debug, ignore_loglevel, libata.force=dump_idy crashkernel=384M-:128M. Initrddebe estar presente; de lo contrario, el inicio se bloquea en " Cambiado a tscksource tsc " porque el dispositivo raíz sda1 no se puede abrir.
No sé cómo te diste cuenta de esto, pero eres increíble. Sorprendentemente, hay pocos documentos sobre esta característica ordenada.
user3549648
En caso de que no funcione, intente poner argumentos de -ly -uentre comillas dobles (o escapar de la barra invertida manualmente). Puede probar si este es el problema ejecutando efibootmgr -vdespués de haber agregado una nueva entrada al menú de arranque de EFI. Además, en caso de que su máquina tenga más de un disco (digamos un SSD y un HDD), entonces deberá especificar uno con los -dvalores predeterminados /dev/sda(ver man efibootmgr)
Peeyush Kushwaha
5
Según el wiki de Debian , esto se puede hacer en unos pocos pasos simples que sobrevivirán a una actualización del núcleo .
Nota: esto supone que tiene una partición EFI montada en /boot/efi.
Crea /etc/kernel/postinst.d/zz-update-efistubcon los siguientes contenidos:
Este es un enlace que se ejecutará en la actualización del núcleo para copiar la última imagen del núcleo e initrd en la ubicación adecuada. Luego hazlo ejecutable y ejecútalo:
No olvide cambiar los argumentos -dy -pdependiendo de dónde esté su partición del sistema EFI. En mi caso, es / dev / sdb1, pero es probable que esto sea diferente para usted. Probablemente también tendrá que cambiar el root=valor en el cmdline del núcleo a su partición raíz.
(Puede cambiar la etiqueta a lo que desee cambiando el -Lparámetro).
La entrada de arranque que acaba de agregar se convertirá en la entrada predeterminada. Y no se romperá después de una actualización del núcleo, ya que el enlace se asegurará vmlinuzy initrd.imgsiempre se actualizará.
Cualquier forma de hacer que funcione con arranque seguro ya que en mi computadora portátil HP cuando lo intento me da un error de arranque seguro (por supuesto, también puedo desactivar el arranque seguro)
-l
y-u
entre comillas dobles (o escapar de la barra invertida manualmente). Puede probar si este es el problema ejecutandoefibootmgr -v
después de haber agregado una nueva entrada al menú de arranque de EFI. Además, en caso de que su máquina tenga más de un disco (digamos un SSD y un HDD), entonces deberá especificar uno con los-d
valores predeterminados/dev/sda
(verman efibootmgr
)Según el wiki de Debian , esto se puede hacer en unos pocos pasos simples que sobrevivirán a una actualización del núcleo .
Nota: esto supone que tiene una partición EFI montada en
/boot/efi
.Crea
/etc/kernel/postinst.d/zz-update-efistub
con los siguientes contenidos:Este es un enlace que se ejecutará en la actualización del núcleo para copiar la última imagen del núcleo e initrd en la ubicación adecuada. Luego hazlo ejecutable y ejecútalo:
Agregue la entrada de arranque:
No olvide cambiar los argumentos
-d
y-p
dependiendo de dónde esté su partición del sistema EFI. En mi caso, es / dev / sdb1, pero es probable que esto sea diferente para usted. Probablemente también tendrá que cambiar elroot=
valor en el cmdline del núcleo a su partición raíz.(Puede cambiar la etiqueta a lo que desee cambiando el
-L
parámetro).La entrada de arranque que acaba de agregar se convertirá en la entrada predeterminada. Y no se romperá después de una actualización del núcleo, ya que el enlace se asegurará
vmlinuz
yinitrd.img
siempre se actualizará.fuente