Ventanas de arranque dual en el segundo disco duro, sistema UEFI / GPT


15

Me gustaría instalar Linux, pero no quiero arriesgarme a dañar mi instalación actual de Windows ya que he escuchado muchas historias de terror. Afortunadamente, tengo un disco duro adicional. ¿Puedo instalar Linux en eso y luego Windows de arranque dual sin tener que modificar la unidad de Windows?

Además, tengo un "BIOS" UEFI y la unidad de Windows está en formato GPT.

Respuestas:


18

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:

  1. Instalé Linux en el primer disco y ahora no puedo iniciar Windows, o

  2. 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 sucorrectamente. Si consigues chown: invalid user: ‘yourusername’, tomaste el último comando demasiado literalmente.

Ahora puede navegar /etc/grub.den 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 ( ntfspuede 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-cpara detener el hallazgo una vez que vea algo corto y simple como ./Windows/Boot/EFI/bootmgfw.efio ./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-probeo (en, por ejemplo, Fedora) grub2-probe. Escribe gruby 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 insmodcomandos (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-uuidlí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-uuidlí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-mkconfigo 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-mkconfigdirectamente. 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-mkconfigdirectamente, primero necesitamos encontrar grub.cfg:

> find /boot -name grub.cfg

Esto probablemente será /boot/grub/grub.cfgo /boot/grub2/grub.cfg.

> grub-mkconfig -o /boot/grub/grub.cfg

update-grubanalizará automáticamente la configuración en busca de errores. grub-mkconfigno 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.cfgen 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-grubo grub-mkconfignuevo.

Cuando haya terminado, puede cerrar el editor de texto y escribir exitel 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.ddirectorio y su contenido a su estado original:

sudo chmod 755 /etc/grub.d/40_custom

Referencias


2
El término técnicamente correcto que está buscando, que tampoco es torpe, es firmware , que puede presentarse como BIOS o como UEFI.
Milind R

Lamentablemente, el firmware también tiene un significado mucho más general, ya que se refiere a cualquier software que esté integrado en el hardware.
Kylotan

en mi escritorio, "chain" no se encuentra como un comando durante el arranque, pero es chainloader en el archivo 40_custom que necesito escribir. avíseme si esto es normal
FlogFR

¡Muy agradable! Sin embargo, cuando lo intento, mi instalación de Windows 8 no aparecerá como una entrada en grub2. He solucionado todos los errores de sintaxis y el archivo grub.cfg se crea sin errores. También tenga en cuenta que hay un error de sintaxis cuando se menciona por primera vez la carga de cadena: chainload $({root})debería ser chainload (${root})(no puedo editarlo porque es un cambio demasiado pequeño).
sobek

@sobek Gracias por eso - corregido. Si ha agregado algo a un archivo /etc/grub.dy no se agrega cuando genera la configuración, está sucediendo algo extraño. Si se ejecuta grub-mkconfigsin -oque salga al estándar, eso podría ayudar a confirmar o negar que se están procesando sus adiciones.
Ricitos
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.