Sony VAIO con la BIOS Insyde H2O EFI no arrancará en GRUB EFI

12

Compré una nueva computadora portátil Sony Vaio S series. Utiliza Insyde H2O BIOS EFI, e intentar instalar Linux en él me está volviendo loco.

root@kubuntu:~# parted /dev/sda print
Model: ATA Hitachi HTS72756 (scsi)
Disk /dev/sda: 640GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start  End    Size    File system  Name                          Flags
 1      1049kB  274MB  273MB  fat32        EFI system partition          hidden
 2      274MB  20.8GB  20.6GB  ntfs        Basic data partition          hidden, diag
 3      20.8GB  21.1GB  273MB  fat32        EFI system partition          boot
 4      21.1GB  21.3GB  134MB                Microsoft reserved partition  msftres
 5      21.3GB  342GB  320GB  ntfs        Basic data partition
 6      342GB  358GB  16.1GB  ext4        Basic data partition
 7      358GB  374GB  16.1GB  ntfs        Basic data partition
 8      374GB  640GB  266GB  ntfs        Basic data partition

Lo sorprendente es que hay 2 particiones del sistema EFI en el disco. La partición sda2 es una partición de recuperación de 20 gb que carga ventanas con una interfaz de recuperación básica. Se puede acceder presionando el botón "AYUDAR" en lugar del botón de encendido normal. Supongo que la partición del sistema sda1 EFI (ESP) se carga en esta recuperación.

El sda3 ESP tiene más entradas desarrolladas para Microsoft Windows, que en realidad entra en Windows 7 (como lo confirma bcdedit.exe en Windows). Ubuntu está instalado en sda6, y durante la instalación elegí sda3 como mi partición de arranque. El instalador creó correctamente una aplicación sda3 / EFI / ubuntu / grubx64.efi.

El verdadero problema: por mi vida, ¡no puedo configurarlo como predeterminado! Intenté crear un sda3 / startup.nsh que llamaba grubx64.efi, pero no ayudó, al reiniciar, el sistema aún se inicia en Windows. Intenté usar efibootmgr, y eso muestra cómo funcionaba:

root@kubuntu:~# efibootmgr 
BootCurrent: 0000
BootOrder: 0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
root@kubuntu:~# efibootmgr --create --gpt --disk /dev/sda --part 3 --write-signature --label "GRUB2" --loader "\\EFI\\ubuntu\\grubx64.efi" 
BootCurrent: 0000
BootOrder: 0002,0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
Boot0002* GRUB2
root@kubuntu:~# efibootmgr
BootCurrent: 0000
BootOrder: 0002,0000,0001
Boot0000* EFI USB Device
Boot0001* Windows Boot Manager
Boot0002* GRUB2

Sin embargo, al reiniciar, como adivinó, la máquina se reinició directamente en Windows.

Las únicas cosas que puedo pensar son:

  1. La partición sda1 se está utilizando de alguna manera
  2. Sobrescriba /EFI/Boot/bootx64.efi y /EFI/Microsoft/Boot/bootmgfw.efi con grubx64.efi [pero esto parece realmente radical].

¿Por favor, puede alguien ayudarme? Gracias, cualquier ayuda es muy apreciada, ya que este problema me está volviendo loco.

Rohan Dhruva
fuente
Seguí el mismo enfoque en Sony Vaio S: reemplazar el archivo MS .efi con el GRUB, mantener una copia de MS .efi en un directorio diferente y luego cargar en cadena a la copia para iniciar Windows. Esto generalmente funciona, pero un efecto secundario desagradable es que no puedo reanudar Windows desde la hibernación: sus errores del cargador de arranque se desactivan y requieren un reinicio limpio.

Respuestas:

11

Finalmente pude resolver esto. Reemplacé el EFI / Microsoft / boot / bootmgfw.efi con el grub64.efi. Cambié el nombre del primero a bootmgfw.efi.old y usé grub para agregar una opción de menú para encadenarlo.

Esto implica que el firmware está codificado para buscar el gestor de arranque de microsoft windows y no respeta la configuración de efibootmgr o startup.nsh. Eso es realmente terrible

Descubrí cómo funciona el proceso de arranque Sony EFI:

  1. Busque en /EFI/Microsoft/Boot/fwbootmgr.efi; si está presente, bota.
  2. Busque en todos los subdirectorios de / EFI / grubx64.efi. Si está presente, inícielo.
  3. Arranque /EFI/Boot/bootx64.efi
  4. Muestra un mensaje de error, como "Sistema operativo no encontrado".

En Linux, la herramienta efibootmgr funciona, pero muestra muchas tonterías generadas automáticamente, incluida la última unidad USB que ha utilizado.

Así es como aprendí todo esto:

  1. Abrí mi nueva máquina y colapsé la partición de Windows para instalar Linux y Mac lado a lado.
  2. Instalé Ubuntu 12.10 y el instalador sobrescribió fwbootmgr.efi, haciendo una copia de seguridad del antiguo cargador de arranque de Windows.
  3. Restablecí el viejo gestor de arranque de Windows, pero no pude arrancar nada excepto Windows.
  4. Cambié el nombre del gestor de arranque de Windows a algo falso, y luego el Grub BL se hizo cargo.
  5. Cambié el nombre del directorio de ubuntu a algo más, y Grub todavía se cargó, a pesar de que tenía que instalar rEFInd.
  6. La única forma en que podía obtener REFInd para hacer lo que quería era esto:

  7. Mueva fwbootmgr.efi a su directorio padre; rEFInd todavía lo encontrará, y Windows no se quejará de que le haya cambiado el nombre.

  8. Cambie el nombre de grubx64.efi a rfgrubx64.efi u otra cosa reconocible.
  9. Copie rEFInd de / EFI / refind a / EFI / boot, cambie el nombre de /EFI/refind_x64.efi a * .bak y, por último, cambie el nombre de /Boot/refind_x64.efi a bootx64.efi. Ahora debería poder iniciar Windows BL o GRUB desde rEFInd. Planeo actualizar mi instalación de MacOS a Clover, y cargar Clover desde rEFInd también.

(Quizás sea posible usar el Administrador de arranque de Windows para hacer todo esto, pero el soporte EFI de EeasyBCD sigue siendo un desastre en mi experiencia. Me niego a tocarlo nuevamente por un tiempo).

Rohan Dhruva
fuente
Tenga en cuenta que también intenté modificar la configuración de BCD [usando bcdedit.exe] de Windows para tener el administrador de arranque de Windows configurado en grub, y eso todavía no funcionó; tuve que reemplazar el archivo .efi con .efi de grub .
Rohan Dhruva
5

Primero, no tienes dos ESP. Un ESP es una partición con un código de tipo de partición de C12A7328-F81F-11D2-BA4B-00A0C93EC93B, que se identifica como una partición con su conjunto de "indicador de arranque". Su salida indica que solo / dev / sda3 tiene su "indicador de arranque" establecido, por lo que solo tiene un ESP - / dev / sda3. Bajo GPT, las particiones pueden tener nombres, y usted tiene dos particiones con el nombre "partición del sistema EFI", pero estos nombres se usan solo con fines de identificación humana. Por lo tanto, supongo que usted (o alguna utilidad automática) creó un / dev / sda1 con la intención de convertirlo en un ESP, pero hubo un error al establecer su código de tipo de partición o alguna otra utilidad cambió incorrectamente su código de tipo de C12A7328-F81F-11D2-BA4B-00A0C93EC93B a otra cosa.

Hay varias formas de corregir esto. Lo más simple es cambiar el nombre de / dev / sda1 para evitar confusiones. Si cree que / dev / sda1 no sirve para nada, puede hacer una copia de seguridad y eliminarlo. Esto lo quitará del camino y evitará confusiones, pero, por supuesto, tendrá 273 MB de espacio en disco no utilizado. Alternativamente, puede dedicar el espacio a algún otro propósito, si es necesario, cambiar el nombre y el código de tipo para evitar confusiones. EFI permite explícitamente múltiples ESP, por lo que puede cambiar el código de tipo (configurando el "indicador de arranque" usando parted, por ejemplo) y usar ambos ESP; Pero esto podría ser confuso.

Lo más probable es que este problema no esté relacionado con su incapacidad para arrancar Linux, ya que parece que todos los archivos relevantes están en / dev / sda3. Se me ocurren varias razones posibles para este problema:

  • Puede ser que hayas escrito mal algo en tu comando efibootmgr. No veo ningún error tipográfico obvio, pero si el binario GRUB no se encuentra donde lo ha especificado, el comando no funcionará. Las opciones "--gpt" y "--write-signature" son casi innecesarias, y posiblemente podrían estar causando problemas, pero lo más probable es que no lo sean.
  • Su firmware podría tener un error que causa que los efectos del comando efibootmgr sean temporales. Intente reiniciar y luego escriba "sudo efibootmgr -v" para ver si la entrada que creó ha sobrevivido a un reinicio.
  • Su firmware podría tener un error que hace que se ignore la variable de orden de arranque. Tengo una placa base como esa; se inicia en el orden en que se crean las entradas de inicio, en lugar del orden en que se especifican mediante la variable BootOrder. Para evitar este error, tendría que eliminar todas las entradas y volver a crearlas en el orden de inicio que desea utilizar.
  • Su binario grubx64.efi podría dañarse de tal manera que el firmware se niegue a iniciarlo, y así pasará al siguiente elemento en el orden de arranque.

Puede intentar ajustar su comando efibootmgr, localizar un nuevo binario o cualquier otra cosa para probar estas posibilidades. Si todo lo demás falla, le recomiendo que haga lo siguiente:

  1. Elimine todas las entradas de arranque utilizando efibootmgr o su firmware (si proporciona una interfaz para hacerlo).
  2. Copie grubx64.efi a EFI / Boot / bootx64.efi en el ESP.
  3. Si cuando reinicia aún obtiene Windows, cambie el nombre de EFI / Microsoft / Boot / bootmgfw.efi a EFI / Microsoft / bootmgfw.efi.

Esto debería hacer que GRUB arranque con el nombre predeterminado del gestor de arranque (EFI / Boot / bootx64.efi). Un problema con esto es que GRUB podría no tener una entrada funcional para Windows. Probablemente pueda crear uno manualmente; una entrada como esta debería funcionar:

menuentry "Windows 7" {
    set root='(hd0,gpt3)'
    chainloader /EFI/Microsoft/bootmgfw.efi
}

Alternativamente, puede instalar rEFIt o rEFInd como EFI / Boot / bootx64.efi. Tenga en cuenta que los archivos binarios de rEFIt disponibles en su sitio no funcionarán en las PC basadas en UEFI; deberás usar la versión en los repositorios de Ubuntu. rEFInd es una bifurcación de rEFIt con numerosas correcciones de errores y actualizaciones, incluido un mejor soporte UEFI. (rEFIt parece haber sido abandonado hace aproximadamente dos años). Por lo tanto, recomiendo usar rEFInd en lugar de rEFIt, pero soy el mantenedor de rEFInd, así que no soy un observador independiente en este puntaje. Desafortunadamente, AFAIK rEFInd no está (todavía) incluido en los repositorios de Ubuntu, por lo que deberá descargarlo e instalarlo manualmente.

Rod Smith
fuente
Muchas gracias, Rod! Sin embargo, el sda1 es en sí mismo un ESP [quizás no arrancable por defecto], que se está utilizando para arrancar en la partición de rescate (20Gb SONSYS). Sé que es una configuración extraña, pero Sony eligió hacerlo de esa manera por alguna razón. Al presionar el botón "AYUDAR", en lugar del botón de encendido, se llama al gestor de arranque.
Rohan Dhruva
Gracias por la información de Rod, tuve el mismo problema y, siguiendo tus pasos, lo solucioné parcialmente. GRUB funcionó bien y luego intenté agregar la entrada para Win7 y ahora GRUB no se muestra, solo arranca directamente a Ubuntu. ¿Alguna idea de por qué y cómo solucionarlo? Además, mi partición EFI es sda1 y Win es sda3. ¿Debería X en esta línea "set root = '(hd0, gptX)'" igual a 1 o 3? ¡He probado los dos!
barro32
@ Rod, ¿dónde debo agregar el menú (Windows 7)? en \ etc \ default \ grub?
alekhine
4

La misma posición inicial aquí en una nueva serie de Sony Vaio. Gracias Rod por tu respuesta.

En caso de que alguien necesite un tutorial, esto es lo que funcionó para mí:

Instaló ubuntu 12.04 desde USB junto con win7.

montaje / dev / sda3 de sesión en vivo

  • copie EFI / ubuntu / grubx64.efi a EFI / Boot /
  • cambie el nombre de EFI / Boot / bootx64.efi a bootx64.efi.old
  • cambiar el nombre de EFI / Boot / grubx64.efi a bootx64.efi

ahora arranca directamente en grub2, pero sin entrada win7

después de cargar ubuntu edité

/etc/grub.d/40_custom

agregando

menuentry "Windows 7" {
    set root='(hd0,gpt3)'
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

y después

sudo update-grub

todo funciona bien

michote
fuente
1

Sugiero dos alternativas diferentes:

  1. No sobrescriba Windows mbr, pero úselo para iniciar grub

  2. cambiar la configuración de la BIOS ( f2o f3al inicio) en las opciones de arranque de UEFI a LEGACY, luego normalmente lanzará el último sistema instalado como siempre

Cardu
fuente
MBR no es aplicable a las computadoras EFI
Ben Voigt
0
  1. Ejecute Boot-Repair desde un liveCD / liveUSB
  2. Haz clic en el Recommended Repairbotón. (esto instalará automáticamente los parámetros correctos para grub-efi, incluidos los parámetros de SecureBoot si es necesario, y renombrará los archivos EFI en caso de que el firmware UEFI esté bloqueado a los archivos de Windows). Indique la URL que aparecerá si hay algún problema.

Reparación de arranque

LovinBuntu
fuente