Creando grub.cfg

Creando grub.cfg
  • ¿Cómo arrancar desde una partición GPT?
  • ¿Es como la forma MBR que necesita una partición que tenga activada la bandera de arranque?
  • ¿Cómo marcar una partición GPT como de arranque en Linux?

Respuesta1

¿Cómo arrancar desde una partición GPT?

Iniciar una instalación de Linux implica múltiples etapas y componentes de software, incluidofirmwareinicialización, ejecución de uncargador de arranque, carga y puesta en marcha de unnúcleo de linuximagen y ejecución de diversosguiones de inicioydemonios. Para cada una de estas etapas y componentes existen diferentes variaciones y enfoques; Por ejemplo,COMIDA,LILO,SYSLINUXoLoadlinse pueden utilizar como cargadores de arranque, mientras que los scripts de inicio pueden ser tradicionalesen eso-style, o la configuración del sistema se puede realizar a través de alternativas modernas comosistemadoAdvenedizo.

Otro programa popular para usar para arrancar esreencontraraAdministrador de arranque UEFIcapaz de lanzarEFISTUBgranos.

ElEFI(Interfaz de firmware extensible)partición del sistemaoESPes una partición en un dispositivo de almacenamiento de datos (generalmente una unidad de disco duro o una unidad de estado sólido) que utilizan las computadoras que cumplen con elInterfase Extensible de Firmware Unificado(UEFI). Cuando una computadora estáarrancado, el firmware UEFI carga archivos almacenados en el ESP para iniciar los sistemas operativos instalados y varias utilidades.

Un ESP contiene elcargadores de arranqueoImágenes de kernelpara todos los sistemas operativos instalados

¿Es como la forma MBR que necesita una partición que tenga activada la bandera de arranque?

Elbandera de arranquees de la antigüedad, donde indicarías unMBRregistro de partición como de arranque, por lo que podría indicar dónde residía el cargador de arranque. Entonces, para responder a su pregunta, no, no es necesario que marque una partición de arranque como arrancable.

Elidentificador único global(GUID) Para elEFIpartición del sistema en elTabla de particiones GUID(GPT) el esquema esC12A7328-F81F-11D2-BA4B-00A0C93EC93B, mientras que su ID en elRegistro de arranque principal(MBR) el esquema de tabla de particiones es0xEF.

¿Cómo marcar una partición GPT como de arranque en Linux?

  • Endiscog, establece el código de tipo en EF00. (gdisk utiliza códigos de tipo de dos bytes que se expanden a los códigos de tipo reales en el disco; "EF00" es solo un mnemotécnico para "C12A7328-F81F-11D2-BA4B-00A0C93EC93B".)
  • EnGpartidoo separado, configura la "bandera de arranque". Sin embargo, tenga en cuenta que esto sólo funciona en discos GPT; No puede configurar el código de tipo ESP en discos MBR con estos programas. (Esto normalmente no es gran cosa, ya que las computadoras basadas en EFI generalmente arrancan desde discos GPT).
  • En versiones recientes de Linuxdisco duro, configura el tipo de partición por su número (1 para "Sistema EFI" en discos GPT o 0xEF en discos MBR) o ingresando el código de tipo completo en discos GPT.

Respuesta2

¿Es como la forma MBR que necesita una partición que tenga activada la bandera de arranque?

Mmmm, bueno, antes de hacer un breve recordatorio de cómo la BIOS transfiere la ejecución del arranque.

  1. BIOS lee el primer sector (512 bytes) del medio de arranque.
  2. Si los dos últimos bytes del sector son 55 AA ejecuta ese sector. Así que aquí termina la responsabilidad de la BIOS.

Ese código de 440 bytes recortado se denomina MBR (registro de arranque maestro). Su propósito es buscar en las entradas de la tabla de 4 particiones el indicador de arranque. Si es para alguna partición marcada como de arranque, cargará su primer sector y entregará el flujo de ejecución de arranque al código en este sector.

Tenga en cuenta, por motivos de compatibilidad, que el llamado MBR protector está presente incluso cuando se utiliza GPT. (El GPT comienza en el segundo sector)

Entonces es el código MBR el que se preocupa por el 'indicador de arranque'. Sin embargo, el código MBR de 440 bytes recortado puede modificarse o ser diferente. Y cuando efectivamente al instalar GRUB ese es el caso. Entonces, por ejemplo, instalando GRUB2 de esta manera:

sudo grub-install --boot-directory=/mnt/boot --force --target=i386-pc /dev/sdb   -v 

Reemplazará completamente el código MBR estándar con su propio código. (tenga en cuenta que puede encontrar una copia de ese código en /boot/grub/i386-pc/boot.img)

Conclusión: -> El código de Grub no se preocupará por ningún indicador de arranque.

Instalación de grub en un dispositivo GPT que no es EFI

Por 'No EFI' me refiero a que tenemos un dispositivo antiguo cuyo BIOS no tiene UEFI o en el que UEFI se ejecuta en modo CSM (Módulo de soporte de compatibilidad) y arranca de la manera tradicional que describí anteriormente.

Cuando Grub se instala a través de 'listas de bloqueo', se instala en el espacio de partición entre el MBR y el primer sector de arranque. Sin embargo, cuando usamos GPT, Grub se niega a seguir ese camino de separación de partición. En lugar de eso, quiere que se cree una pequeña partición donde pueda instalar su código de forma segura.

Así es como configuramos esto usandoseparado:

  1. Cree una partición formateada de 1 MB
  2. Marque esa partición como 'bios-grub'. Cuando habilita la casilla de verificación 'bios-grub' en gparted, cambiará el tipo GPT a 'partición de arranque del BIOS'.

Alternativamente puedes usar: gdisk -l /dev/sdbpara comprobar y...

sgdisk -t 3:ef02 /dev/sdb ^- marca la tercera partición como ef02 => 'partición de arranque del BIOS'

... para lograr lo mismo sin separarse. Nota: "ef02" es la abreviatura de "partición de arranque del BIOS" o GUID 21686148-6449-6E6F-744E-656564454649.

Está bien, eso es todo. Ahora podemos ejecutar la configuración de Grub.

Monte su Linux (o la partición /boot/grub) en /mnt/boot y ejecútelo

  1. sudo grub-install --boot-directory=/mnt/boot --force --target=i386-pc /dev/sdb   -v 
    

Si tienes suerte y todo salió bien y ves:

grub-install: Info: setting the root device to `hostdisk//dev/sda,gpt6'.
grub-install: Info: saving <556324864,0,512>.
...

De modo que el contenido /boot/grub/i386-pc/core.imgse copia directamente en esa 'partición de arranque del BIOS' de 1 MB; --forcede lo contrario, grub se niega a instalarse a través de listas de bloqueo. En caso de que falle, aquí hay un atajo para intentar comenzar nuevamente en la parte de la lista de bloqueo de la instalación:

grub-bios-setup --verbose --force --directory= /mnt/boot/grub/i386-pc  /dev/sdb

Así que en resumenconfiguración-bios-grubcopiará

/mnt/boot/grub/i386-pc/boot.img -> Sector 0 (MBR)
/mnt/boot/grub/i386-pc/core.img -> Sector 556324864 (BIOS boot partition)

Sin embargo, la parte más importante, la 'compilación' de core.img, no la realiza.

yo suelocaja virtualpara probar el proceso de arranque:

sudo chmod 666 /dev/sd*
VBoxManage  internalcommands createrawvmdk -filename ~/sdb.vmdk -rawdisk /dev/sdb

Ese comando es particularmente útil para colocar todo el dispositivo físico en la máquina virtual.

<Ctrl derecho> + R reinicia la VM

'Diversión' con rescate de larvas>

Sólo un breve apuro ya que probablemente lo encontrarás en el camino. Bien, el objetivo es ejecutar estos 2 comandos sin errores:

> insmod normal
> normal

setEs útil para ver lo que está configurado. lsmuestra qué particiones hay ls (hd0,2)muestra qué archivos hay en la partición #1 si encuentra la carpeta grub en (hd0,2) set prefix=(hd0,2)/boot/grubes el comando que lo sacará. ahora insmod normaly normallo llevará al menú de grub "normal". Una vez que hayas ejecutado normal.mod, solo hay una cosa interesante que mencionar:

ls (hd0,<tab>

Le brindará una vista más detallada sobre qué particiones hay, cuál es su nombre y el sistema de archivos utilizado.

Sin embargo, volvamos al tema.

¿Cómo marcar la partición con grub.cfg?

Esto sucede indirectamente al instalar grub. Después de eso, es reparable y casi imposible de cambiar. Gracias a algunas estúpidas decisiones de diseño. Bien, echemos un vistazo más de cerca a esa parte de grub que no está bien diseñada.

La clave de este núcleo.img. Durante la configuración de grub, que se escribe directamente en la partición de 1 MB que creamos para ese propósito, contiene un script que puede verse más o menos así

set prefix=(hd0,2)/boot/grub
insmod normal
normal

Este script y todos los controladores del sistema de archivos que necesitará para acceder a la partición con los archivos grub se pegarán y comprimirán (!!!) en core.img. Debido a la compresión, no puedes usar un editor de disco para verlo o alterar cosas pequeñas como cambiar (hd0,2) a (hd0,4) o cosas así que podrían ser necesarias. Usa gdisk para ordenar particiones GPT o hacer algunas cosas. otros cambios. Tampoco hay forma de desactivar la compresión (o bueno, hay un interruptor pero no funciona). Además, ese script se genera automáticamente y no hay forma de modificarlo para hacerlo un poco más inteligente. Por ej. use search.label para encontrar la partición Grub necesaria en lugar de números de partición fijos. Todo lo que puedes hacer parcialmente es volver a ejecutar la configuración de grub y esperar que todo funcione correctamente para arrancar.

Nota: Curiosamente, cuando se utiliza EFI, las cosas son más abiertas y amigables para una personalización rápida.

Desafortunadamente todavía estoy investigando cómo funciona 'grub-install'. Actualmente estoy jugando con rarezas como consdamientras especifico explícitamente que debería usarsdb.

Puedo editar esta publicación más tarde si aprendí más al respecto. EDITAR: Bueno, allá vamos. A continuación se explica cómo hacer lo "imposible":

nano /mnt/boot/grub/i386-pc/load.cfg

desde

search.fs_uuid 39ff90d3-00b1-4cb9-8b94-03a7a9053352 root hd0,gpt6 
set prefix=($root)'/mnt/boot/grub'

es una mierda y no es lo que necesito. Lo cambio a:

search.fs_label boot root hd0,gpt5 
set prefix=($root)/grub

Vaya, eso se ve mejor. :) ... ahora genera 'core.img'... :

grub-mkimage -O i386-pc -o /mnt/boot/grub/i386-pc/core.img  -C none \
    --prefix /grub -c /mnt/boot/grub/i386-pc/load.cfg  \
    ext2 ntfs part_gpt biosdisk search_label normal

Nota: además de ntfs también agregué el módulo 'normal' para mayor comodidad en la consola de rescate. Ahora funcionará la pestaña para completar un comando y el cursor hacia arriba hacia abajo para desplazarse por el historial de comandos. Y como se mencionó anteriormente actualmente --Compression noneno tiene ningún efecto. Core.img siempre está comprimido con xz.

... y escríbalo en el disco:

grub-bios-setup -v -f -d /mnt/boot/grub/i386-pc  /dev/sdb

Entonces, la partición desde la que se inicia depende de lo que esté escrito en grub.cfg y, por supuesto, de los usuarios seleccionados para iniciar.

Creando grub.cfg

Monte su sistema Linux en /mnt/MINT y luego ejecute:

grub-mkconfig -o /mnt/MINT/boot/grub/grub.cfg

Agregar soporte UEFI

Preparación: Con Gparted agregue 1 MB de partición FAT32. y establezca el Tipo en 'partición del sistema EFI ef00'. Yo uso sgdisk -t 11:ef00 /dev/sdb ^- marca la undécima partición como ef00 => 'partición del sistema EFI'

gdisk -l /dev/sdbpara comprobar el resultado. Sin embargo, la mayoría de las veces ya existe alguna 'partición del sistema EFI'. Entonces, en ese caso, simplemente use, en lugar de crear uno adicional.

La 'partición del sistema EFI' almacenará grubx64.efi que luego se carga y ejecuta mediante la BIOS de EFI.Tenga en cuenta que EFI-Bios sabe de forma predeterminada cómo leer un GPT y un FAT32. Ahora monte

/mnt/boot -> Linux System containing grub.cfg
/mnt/UEFI -> The 'EFI system partition'

Ahora ejecuta grub-install:

sudo grub-install --boot-directory=/mnt/boot \
        --efi-directory=/mnt/UEFI  --target=x86_64-efi   /dev/sdb   -v 

No ha cambiado mucho. Bueno, --force ya no es necesario, hay otro --target y se necesitan argumentos adicionales --efi-directory

información relacionada