Voy a usar el término BIOS a continuación cuando me refiero a conceptos que son los mismos tanto para los sistemas UEFI más nuevos como para los sistemas BIOS tradicionales, ya que si bien esta es una pregunta orientada a UEFI, hablar mejor de las bromas "BIOS" con, por ejemplo, la documentación de GRUB , y "BIOS / UEFI" es demasiado torpe. GRUB (en realidad, GRUB 2, esto a menudo se usa de manera ambigua) es el gestor de arranque instalado por Linux y utilizado para el arranque dual de Windows.
Primero, una palabra sobre el orden de manejo y el orden de arranque. El orden de las unidades se refiere al orden en que las unidades están físicamente conectadas al bus en la placa base (primera unidad, segunda unidad, etc.); esta información es reportada por el BIOS. Orden de iniciose refiere a la secuencia en la que el BIOS busca una unidad de arranque. Esto no es necesariamente lo mismo que el orden de la unidad, y generalmente se puede configurar a través de la pantalla de configuración del BIOS. El orden de las unidades no debe ser configurable ni afectado por el orden de arranque, ya que eso sería algo muy hostil para el sistema operativo (pero en teoría un BIOS obtuso podría hacerlo). Además, si desconecta la primera unidad, la segunda unidad probablemente se convertirá en la primera. Vamos a utilizar UUID en la configuración del cargador de arranque para intentar evitar problemas como este (los instaladores contemporáneos de Linux también lo hacen).
La forma ideal de obtener lo que desea es instalar Linux en la segunda unidad en términos de orden de unidad y luego seleccionarlo primero en términos de orden de inicio utilizando la configuración UEFI. Una ventaja adicional de esto es que puede usar el orden de arranque BIOS / UEFI para seleccionar la unidad de Windows y omitir grub si lo desea. La razón por la que recomiendo Linux en la segunda unidad es porque GRUB debe "cargar en cadena" el gestor de arranque nativo de Windows, y el gestor de arranque de Windows siempre asume que está en la primera unidad. Sin embargo, hay una manera de engañarlo si lo prefiere o lo necesita al revés.
Con suerte, puede seguir adelante y usar un CD en vivo o lo que sea y hacer esto usando el instalador de la GUI. Sin embargo, no todos los instaladores son iguales, y si esto se arruina y te quedan problemas como:
Instalé Linux en el primer disco y ahora no puedo iniciar Windows, o
Instalé Linux en el segundo disco, pero utilicé el primer disco para el gestor de arranque, ¡y ahora no puedo arrancar nada!
Entonces sigue leyendo. En el segundo caso, primero debe intentar reinstalar Linux en el segundo disco, y esta vez asegúrese de que sea allí donde va el gestor de arranque. La forma más fácil e infalible de hacerlo sería eliminar temporalmente la unidad de Windows de la máquina, ya que vamos a suponer que no hay nada adicional instalado, independientemente del orden de la unidad.
Una vez que haya instalado Linux y se haya asegurado de que puede arrancar, vuelva a enchufar la unidad de Windows (si la quitó, y recuerde, lo ideal es que primero la queramos en términos de orden de la unidad, y la segunda unidad primero en términos de orden de arranque) y continúe con el siguiente paso.
Accediendo a la configuración de GRUB
Arranque Linux, abra una terminal y
> su root
Se le pedirá la contraseña de root. A partir de este momento, usted es el superusuario en ese terminal (para verificar, probar whoami
), así que no haga nada estúpido. Sin embargo, todavía eres un usuario normal en la GUI, y como estaremos editando un archivo de texto, si prefieres un editor de GUI tendremos que cambiar temporalmente la propiedad de ese archivo y el directorio en el que se encuentra:
> chown -R yourusername /etc/grub.d/
Si obtiene "Operación no permitida", no lo hizo su
correctamente. Si consigues chown: invalid user: ‘yourusername’
, tomaste el último comando demasiado literalmente.
Ahora puede navegar /etc/grub.d
en su buscador de archivos y buscar un archivo llamado 40_custom
. Debe tener un aspecto como este:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
Si no puede encontrarlo, en la terminal raíz ingrese los siguientes comandos:
> touch /etc/grub.d/40_custom
> chmod 755 /etc/grub.d/40_custom
> chown yourusername /etc/grub.d/40_custom
Ábralo en su editor de texto, copie y pegue la parte anterior (comenzando con / #!/bin/sh
) y continúe con el siguiente paso.
Agregar una opción de arranque de Windows
Copie y pegue esto con el editor de texto al final del archivo:
menuentry "MS Windows" {
insmod part_gpt
insmod search_fs_uuid
insmod ntfs
insmod chain
}
Esta es una lista de módulos que GRUB necesitará para hacer las cosas ( ntfs
puede ser superfluo, pero tampoco debería dañar nada). Tenga en cuenta que esta es una entrada incompleta : necesitamos agregar algunos comandos cruciales.
Encontrar el cargador de arranque de segunda etapa de Windows
Su instalación de Linux probablemente haya montado automáticamente su partición de Windows y debería poder encontrarla en un navegador de archivos. De lo contrario, busque una manera de hacerlo (si no está seguro de cómo hacerlo, haga una pregunta en este sitio). Una vez hecho esto, necesitamos saber el punto de montaje; esto debería ser obvio en el navegador de archivos, por ejemplo /media/ASDF23SF23/
. Para guardar algo de escritura, vamos a poner eso en una variable de shell:
win="/whatever/the/path/is"
No debe haber espacios a ambos lados del signo igual. No incluya ningún elemento de una ruta de Windows aquí. Esto debería apuntar a la carpeta de nivel superior en la partición de Windows. Ahora:
cd $win
find . -name bootmgfw.efi
Esto podría tomar unos minutos si tiene una partición grande, pero lo más probable es que lo primero que escupe es lo que estamos buscando; puede haber más referencias en el sistema de archivos que contienen cadenas largas goobledygook, esas no lo son. Use Ctrl-c
para detener el hallazgo una vez que vea algo corto y simple como ./Windows/Boot/EFI/bootmgfw.efi
o ./EFI/HP/boot/bootmgfw.efi
.
Excepto por el .
principio, recuerde este camino para más tarde; puede copiarlo en su editor de texto en una línea en blanco en la parte inferior, ya que lo usaremos allí. Si desea volver a su directorio anterior ahora, úselo cd -
, aunque no importa dónde se encuentre en el shell de aquí en adelante.
Establecer los parámetros correctos
GRUB necesita poder encontrar y transferir el proceso de arranque al gestor de arranque de Windows de la segunda etapa. Ya tenemos la ruta en la partición de Windows, pero también necesitamos algunos parámetros para decirle a GRUB dónde está esa partición. Debe haber una herramienta instalada en su sistema llamada grub-probe
o (en, por ejemplo, Fedora) grub2-probe
. Escribe grub
y luego presiona Tabdos o tres veces; debería ver una lista que incluye uno u otro.
> grub-probe --target=hints_string $win
Debería ver una cadena como:
--hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1
Regrese al editor de texto con la configuración de GRUB y agregue una línea después de todos los insmod
comandos (pero antes de la llave de cierre) para que se vea así:
insmod chain
search --fs-uuid --set=root [the complete "hint bios" string]
}
No rompa esa línea ni permita que su editor de texto lo haga. Puede aparecer en la pantalla; una manera fácil de notar la diferencia es activar la numeración de líneas. Próximo:
> grub-probe --target=fs_uuid $win
Esto debería devolver una cadena más corta de letras, números y posibles guiones como "123A456B789X6X" o "b942fb5c-2573-4222-acc8-bbb883f19043". Agregue eso al final de la search --fs-uuid
línea después de la cadena de pista de bios, separada con un espacio.
A continuación, si (y solo si) Windows está en la segunda unidad en términos de orden de unidad , agregue una línea después de la search --fs-uuid
línea:
drivemap -s hd0 hd1
Este es "el truco" mencionado anteriormente. Tenga en cuenta que no se garantiza que funcione, pero no está de más intentarlo.
Finalmente, la última línea debería ser:
chainloader (${root})[the Windows path to the bootloader]
}
Para que quede claro, por ejemplo:
chainloader (${root})/Windows/Boot/EFI/bootmgfw.efi
Eso es. Guarde el archivo y verifique en un navegador de archivos para asegurarse de que realmente se haya guardado y se vea como debería.
Agregar la nueva opción de menú a GRUB
Esto se hace con una herramienta llamada grub-mkconfig
o grub2-mkconfig
; habrá estado en esa lista que encontraste Tabanteriormente. También puede tener un comando llamado update-grub
. Para verificar eso, simplemente escríbalo en la terminal raíz. Si obtiene "comando no encontrado", debe usarlo grub-mkconfig
directamente. Si no es así (incluido obtener un error más largo), acaba de establecer la configuración y puede reducir un poco.
Para usar grub-mkconfig
directamente, primero necesitamos encontrar grub.cfg
:
> find /boot -name grub.cfg
Esto probablemente será /boot/grub/grub.cfg
o /boot/grub2/grub.cfg
.
> grub-mkconfig -o /boot/grub/grub.cfg
update-grub
analizará automáticamente la configuración en busca de errores. grub-mkconfig
no lo hará, pero es importante hacerlo porque es mucho más fácil tratar con ellos ahora que cuando intenta arrancar la máquina. Para esto, use grub-script-check
(o grub2-script-check
):
> grub-script-check /boot/grub/grub.cfg
Si esto (o update-grub
) produce un error que indica un número de línea, ese es el número de línea en grub.cfg, pero debe corregir la parte correspondiente en /etc/grub.d/40_custom
(el archivo en su editor de texto). Sin embargo, es posible que deba ser root para ver el archivo anterior, así que intente less /boot/grub/grub.cfg
en la terminal, presione :e ingrese el número de línea. Deberías ver tu entrada de menú. Encuentra el error tipográfico, corregirlo en el editor de texto, y ejecutar update-grub
o grub-mkconfig
nuevo.
Cuando haya terminado, puede cerrar el editor de texto y escribir exit
el terminal para salir del modo superusuario.
¡Reiniciar!
Cuando llegue al menú de grub, desplácese hacia abajo rápidamente (antes de que caduque el tiempo de espera, generalmente 5 segundos) a la opción "Windows" y pruébelo. Si recibe un mensaje de error de grub, algo está mal con la configuración. Si recibe un mensaje de error de Windows , ese problema es entre usted y Microsoft. Sin embargo, no se preocupe, su unidad de Windows no ha sido modificada y podrá iniciarla directamente poniéndola primero (en términos de orden de inicio) a través de la configuración del BIOS.
Cuando regrese a Linux nuevamente, devuelva la propiedad del /etc/grub.d
directorio y su contenido a su estado original:
sudo chmod 755 /etc/grub.d/40_custom
Referencias
chainload $({root})
debería serchainload (${root})
(no puedo editarlo porque es un cambio demasiado pequeño)./etc/grub.d
y no se agrega cuando genera la configuración, está sucediendo algo extraño. Si se ejecutagrub-mkconfig
sin-o
que salga al estándar, eso podría ayudar a confirmar o negar que se están procesando sus adiciones.