update-grub
, al menos en Debian y sus parientes como Ubuntu, es básicamente sólo una envoltura alrededor de grub-mkconfig
. Así que crea/actualiza/regenera la configuración de GRUB, no el propio gestor de arranque.
Lo que el grub-install
hace en realidad depende de la versión de GRUB que esté ejecutando: ¿GRUB tradicional de la BIOS o GRUB de UEFI?
Con la BIOS GRUB tradicional, grub-install
(re)escribirá la parte de GRUB incrustada en el Master Boot Record, y codificará en él los números de bloque del disco físico desde donde leer la siguiente parte de GRUB. También determinará desde qué partición se leerá el archivo de configuración de GRUB (/boot/grub/grub.cfg
). Un factor importante aquí es el archivo /boot/grub/device.map
, que le dice a GRUB cómo la numeración de dispositivos de la BIOS (y por lo tanto de GRUB) se asigna a los dispositivos de disco de Linux.
Con el GRUB UEFI, la parte principal del cargador de arranque de GRUB se ubicará como un archivo en la Partición del Sistema EFI, típicamente como /boot/efi/EFI/<name of distribution>/grubx64.efi
o similar. Este nombre de ruta del cargador de arranque se almacena en la NVRAM del sistema (= el lugar donde se almacena la configuración de la BIOS) en las variables de arranque UEFI. La parte principal de GRUB puede ser completamente auto-contenida (¡y debe serlo si se usa el Arranque Seguro!) o puede cargar funcionalidad adicional como módulos de GRUB, típicamente desde el directorio /boot/grub
de la distribución de Linux de la que forma parte.
Las variables de arranque UEFI identificarán el disco que el sistema debe usar para buscar la Partición del Sistema EFI y el archivo del gestor de arranque dentro de ella. Puede ver estas variables usted mismo, usando el comando efibootmgr -v
. El comando grub-install
actualizará esas variables, a menos que use la opción --no-nvram
para especificar lo contrario.
Como resultado, tanto con BIOS tradicional como con UEFI, ejecutar grub-install
puede actualizar su gestor de arranque para leer un archivo de configuración de GRUB completamente diferente en un disco completamente diferente – aunque los detalles de ese proceso serán completamente diferentes.
Con UEFI, usted puede realmente cambiar su selección de dispositivo de arranque desde dentro del SO, ya sea con efibootmgr
o grub-install
. Pero grub-install
es una exageración masiva para eso: si ambas instalaciones son UEFI y tienen sus propias particiones ESP separadas, tendrán sus propias variables de arranque UEFI y la selección entre ellas se puede hacer fácilmente con efibootmgr
, o de hecho en la configuración de la BIOS UEFI.
Con la BIOS tradicional, es un poco más desordenado: usted querrá asegurarse de que el /boot/grub/device.map
de cada instalación identifica el disco de esa instalación específica como hd0
, y el otro como hd1
. A continuación, utilice grub-install
para escribir el gestor de arranque sólo en el disco propio de cada instalación; nunca en el disco «contrario». De esta manera, ambos discos serán completamente autónomos y arrancables incluso si el otro disco es eliminado por completo. Puede añadir un elemento de menú en los archivos de configuración de cada GRUB que le permita arrancar la instalación «opuesta», si lo desea. O puede simplemente usar la BIOS para seleccionar el disco desde el que arrancar.
Lo que debe saber es que el selector de orden de arranque de las BIOS tradicionales suele funcionar haciendo que el disco seleccionado para arrancar sea el «primer» disco para las funciones de la BIOS, por lo que el hd0
de GRUB siempre se referirá al «disco que está actualmente seleccionado para arrancar en la BIOS».
Así que, si actualmente está arrancando desde /dev/sda
(por lo que BIOS dice que sda
es hd0
), y quiere que un elemento del menú de GRUB en ese disco cambie al menú de arranque de /dev/sdb
, usaría algo como:
menuentry "Switch to /dev/sdb"{ # flip the disk mappings and reload configuration drivemap -s (hd0) (hd1) set root=<the identifier for sdb's partition that contains grub.cfg> configfile /boot/grub/grub.cfg # or just /grub/grub.cfg is /boot is a separate partition}
… y lo mismo en la configuración de GRUB de /dev/sdb también.