uefi-d

Recuperar el arranque UEFI con UEFI Shell

Desde que UEFI llegó a nuestros ordenadores reconozco que no he tenido mucho tiempo para trastear con él. Debido a un problema que tuve con mi Slimbook Katana tuve que meterme en faena para recuperar el arranque UEFI. Vamos a ver en este artículo cómo recuperar el arranque de nuestro sistema con la UEFI Shell.

El caso es que quería arrancar un USB con una distro Live que tenía hecho de hacía algún tiempo y necesitaba configurar el arranque en modo Legacy. Cuál fue mi sorpresa cuando al volver a activar el arranque UEFI la entrada donde se especifica el archivo .efi para arrancar el sistema había desaparecido. Lo único que podía ver era una pantalla llamada UEFI Interactive Shell.
Aún no se si es algo que pasa sólo en mi Katana o es generalizado en todas las placas UEFI, pero es un fastidio que se borre este dato cada vez que cambiamos el boot entre UEFI y Legacy.

Nota: Las capturas son de una máquina virtual pero el proceso en una máquina real es el mismo aunque es posible que cambien algunos nombres.

¿Qué es la UEFI Interactive Shell?

Básicamente es una shell (véase una terminal donde podemos introducir comandos) con la que podemos interaccionar y hacer scripts para el sistema EFI (Extensible Firmware Interface) para cambiar las opciones de arranque, ejecutar código adicional y muchas otras cosas. Recordemos que UEFI es básicamente un EFI 2.x así que dependiendo de la versión de nuestra Shell UEFI tendremos más o menos opciones implementadas.

Las pruebas para este artículo las hice en EFI Shell 2.31 y 2.40

Recuperación del arranque con UEFI Shell

Cuando hemos perdido la entrada en el boot que apunta al archivo .efi de nuestro sistema, al encender el equipo lo único que vemos es la UEFI Shell que tiene una pinta similar a esta:

uefi-shell-1

Unidades mapeadas

Si nos fijamos en las primeras letras amarillas, Mapping table, son los dispositivos mapeados y sus respectivos nombres. Los que empiezan por FSx (File System) son los medios de almacenamiento, siendo el 0 el primero. Si sólo tenemos un disco, lo normal es que sólo esté fs0.
Esto puede cambiar, si por ejemplo instalamos nuestro sistema en un segundo disco podría llamarse fs1 y así sucesivamente.
Si perdemos estos datos de vista en la pantalla siempre podemos volver a verlos escribiendo en la shell la orden map.

Cómo movernos por los directorios

La shell es similar a la de MS-DOS o Unix. Si escribimos en ella fs0: accederemos a la unidad fs0 y dentro nos podemos mover con cd para cambiar de directorio y con dir o ls para listar el contenido de los directorios.

Otra cosa importante es que la shell está en inglés así que pongo un resumen de los símbolos que vamos a necesitar y donde están en el teclado cuando este está en inglés:

  • Los dos puntos : están en ñ
  • La barra invertida \ está en ç
  • El guión está en o ?
  • La barra / está en

Localizando el archivo .efi

Lo primero es entrar en fs0 escribiendo como mencioné antes fs0: y mediante dir o ls buscar el archivo .efi que en caso de GNU/Linux de 64bits se llamará grubx64.efi y en caso de Windows se llamará bootx64.efi.

Los pasos serían: escribimos fs0: y una vez dentro escribimos ls (también vale dir). Veremos casi seguro que hay una carpeta EFI. Si no la hay es porque fs0 no es el disco de arranque y quizá sea fs1 u otro nombre. Si sí que existe escribimos ahora cd EFI y entraremos dentro de EFI. Ahora volvemos a escribir ls y veremos otra carpeta con el nombre de nuestra distribución o en el caso de Windows veremos una llamada Boot. Escribimos otra vez cd [espacio] el nombre de la carpeta y otra vez ls para ver que dentro hay un archivo .efi. ¡Ya lo tenemos!, apuntamos la ruta completa incluyendo el nombre del archivo .efi.

En BunsenLabs que es la distro con la que he hecho las pruebas la ruta de este archivo es (Ojo que las barras son invertidas): fs0:\EFI\bunsenlabs\grubx64.efi

Para el caso de Debian por ejemplo es: fs0:\EFI\debian\grubx64.efi

En Windows por ejemplo es: fs0:\EFI\Boot\bootx64.efi

BCFG es lo que buscamos

La instrucción que nos permite modificar las entradas en el boot es bcfg (Boot Config). Para ver el estado actual del arranque escribimos:

bcfg boot dump

El resultado será similar al de la imagen

uefi-shell-2

Vemos la entrada 00 para el DVD, la 01 para el Hard Drive (pero no es la que nos interesa) y la 02 para la EFI Shell. Nosotros tenemos que añadir una nueva entrada que apunte al archivo .efi que arranca nuestro sistema.

Añadiendo la entrada en el boot

Una vez localizado el archivo .efi veremos que si lo ejecutamos arranca el sistema, pero al reiniciar volveremos a ver la UEFI Shell. Para guardar una entrada que apunte a este archivo en el boot de forma permanente escribiremos:

bcfg boot add 0 fs0:\EFI\DISTRO\grubx64.efi "ETIQUETA"

Lo que le estamos diciendo a bcfg es que añada una entrada en el boot en la posición 0 que apunte al archivo que arranca nuestro sistema con la etiqueta que queramos entre comillas, puede ser cualquiera. Por lo general bastará con sustituir DISTRO por la nuestra en caso de GNU/Linux aunque esta ruta puede variar.

En el caso de Debian por ejemplo sería:

bcfg boot add 0 fs0:\EFI\debian\grubx64.efi "Debian"

En el caso de Windows 10 sería:

bcfg boot add 0 fs0:\EFI\Boot\bootx64.efi "Windows"

El resultado de introducir esta orden será similar al de la siguiente imagen

uefi-shell-3

Tras realizar estos pasos, para salir de la shell escribimos simplemente exit y nuestro sistema arrancará de nuevo.

Otras opciones de la UEFI Shell

Para ver la ayuda de la shell escribimos help y para ver la ayuda de un comando específico escribimos help [comando].

Para ver las unidades mapeadas usamos map.

Podemos borrar una entrada, por ejemplo la 0:

bcfg boot rm 0

Podemos mover si es necesario el orden de las entradas, por ejemplo mover la 3 a la posición 0:

bcfg boot mv 3 0

También podemos editar archivos de texto con edit. Para más ayuda del editor Ctrl-E.

Más información sobre los comandos de la EFI Shell aquí.

Esto ha sido todo por hoy. Espero que os haya resultado útil la entrada.

Si te ha gustado este artículo te recomiendo la lectura de la mini review que hice Slimbook – Un ultraportátil con Linux.

También te puede interesar Reinstalando Grub de forma indolora.

Saludos linuxeros 😉

14 comentarios en “Recuperar el arranque UEFI con UEFI Shell”

  1. Muy clara explicación… En cuanto pueda voy a intentar reparar.
    Mi asunto es una Notebook HP con Windows 10 le instalé un android TV y solo aparece este último. Windows desapareció. Desde el menú de arranque puedo entrar y elegir donde están los archivos efi pero siempre arranca con android.
    La duda que me surge es como entrar al shell ?

    1. Hola Nacho, gracias por tu comentario. En principio el post lo escribí pensando en cuando no puedes entrar en el sistema. En el HP Setup Utility debería haber una opción para la Shell. En tu caso como parece que puedes arrancar Windows 10 lo que puedes hacer es buscar las opciones de «Restauración» y arrancar en el menú de recuperación de Windows 10. Ahí tienes opciones para «Reparar Inicio» directamente o entrar en los ajustes UEFI. Ten en cuenta que si haces esto no podrás arrancar Android TV directamente. Igual en tu caso instalar un gestor de arranque tipo GRUB para elegir con que sistema arrancar sería también una buena idea. Saludos

  2. El efi está cargado solo con entradas de Android TV… A Windows no puedo acceder. Intenté reparar inicio con un disco de instalación de Windows 10 sin éxito. Instalé Linux mint y podía acceder a mint presionando f9 y eligiendo unidad de booteo. Voy a ver esas opciones que comentas. Debe ser en modo UEFI
    Gracias por responder

  3. Hp1000 es el modelo de la Notebook.
    Algo se tiene que haber estropeado ya que al entrar en recuperación de sistema de hp. Entrá directo al grupo de Android TV… Estoy pensando en hacer un update al bios.
    Te agradezco enormemente tu disponibilidad.

    1. De tu notebook sólo he encontrado como entrar en la bios (esc y luego f9) no hay mucha información. Busca en la bios a ver si hay una opción que ponga «boot from efi file» o algo así y busca el archivo boot de Windows que deberías estar en \EFI\Boot\bootx64.efi. Si consigues entrar en Windows 10 luego desde las opciones de recuperación intenta reparar el inicio. Espero que lo consigas. Saludos

    1. La que yo tengo es la 2.40. No se que cambios habrá en las 2.50. Prueba a escribir b + (tabulador) a ver que comandos te muestra puede que tenga otro nombre. De todas formas puedes seguir los pasos que indico para arrancar Windows buscando el archivo fs0:\EFI\Boot\bootx64.efi. Una vez en Windows 10 intenta reparar el arranque desde las opciones de recuperación. También puedes probar lo que le contesto a Nacho más arriba. Espero que funcione. Investigaré sobre la EFI 2.50 para actualizar el post. Saludos

  4. Ok.
    Gracias por tu ayuda.
    Pude resolver
    Al parecer al instalar Android TV el disco duro pasó a gpt. Logré cambiar mbr y asunto resuelto.
    Saludos

  5. Buenas tardes, gracias por la info.
    En mi caso,uns tablet billow 200IK, no me aparece fs0, solo blk0, blk1, blk2 . No arranca, se keda en shell y win10 solo reconoce 7gbs de espacio…, estoy desesperado
    Alguna idea?
    Gracias

    1. Hola. Si te fijas en mi ejemplo fs0 es un alias para blk2 (que es la primera participación), blk3 la segunda, etc. fs0 supongo que se crea (no estoy seguro) cuando hay un sistema de archivos (file system 0). Sibdices que W10 reconoce menos almacenamiento es posible que esté dañado el sistema de archivos. Las tablets pueden ser más limitadas en opciones. Tienes opción de comprobar el sistema de archivos? No tiene función «hard reset» tu tablet? Saludos

  6. Hola, Andriu.
    Gracias por tu respuesta…
    Sigo con el tema…, no hay forma de hacer h.r., pues no puedo pasar del shell…
    Sí que he llegado a ver, como decia, los casi 30 gbs ke dice tener, pero no hay manera, ni win2, ni linux, ni ná…
    Vaya regalo!
    Seguiremos investigando

    1. Buenas Alberto que mala pata con tu tablet. Mira te paso un enlace donde otra persona tiene tu mismo problema. Fíjate que escribiendo «exit» sales de la shell y tienes varias opciones. Hazte un usb bootable con la versión de Windows que traiga tu tablet y a ver si puedes reinstalar. En el hilo que te paso comentan también como instalar W10 y que nada más encender la tablet hay que sacar el recovery en usb. Este es el link: https://www.elotrolado.net/hilo_tablet-billow-x800ik-con-windows-que-no-entra-a-windows-alguien-sabe-que-hacer_2124684
      Suerte y ya me contarás
      Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.