update-grub
, pelo menos no Debian e seus parentes como o Ubuntu, é basicamente apenas um wrapper em torno de grub-mkconfig
. Então ele cria/atualiza/regera a configuração do GRUB, não o próprio bootloader.
O que o grub-install
realmente faz depende de qual versão do GRUB você está rodando: tradicional BIOS GRUB ou UEFI GRUB?
Com a BIOS GRUB tradicional, grub-install
irá (re)escrever a parte do GRUB embutida no Master Boot Record, e codificar nele os números de bloco de disco físico de onde ler a próxima parte do GRUB. Ele também determinará de qual partição o arquivo de configuração real do GRUB (/boot/grub/grub.cfg
) será lido. Um fator importante aqui é o arquivo /boot/grub/device.map
, que diz ao GRUB como a numeração de dispositivos da BIOS (e portanto do GRUB) mapeia para dispositivos de disco Linux.
Com o GRUB UEFI, a parte principal do carregador de inicialização do GRUB estará localizada como um arquivo na partição do sistema EFI, tipicamente como /boot/efi/EFI/<name of distribution>/grubx64.efi
ou similar. Este caminho de bootloader é armazenado no sistema NVRAM (= o local onde as configurações da BIOS são armazenadas) nas variáveis de boot UEFI. A parte principal do GRUB pode ser completamente independente (e deve ser se o Arranque Seguro estiver em uso!) ou pode carregar funcionalidades adicionais como módulos GRUB, tipicamente do diretório /boot/grub
da distribuição Linux da qual faz parte.
As variáveis de arranque UEFI identificarão o disco que o sistema deve usar para procurar a Partição do Sistema EFI e o ficheiro de bootloader dentro dela. Você mesmo pode ver estas variáveis, usando o comando efibootmgr -v
. O comando grub-install
irá actualizar estas variáveis, a menos que use a opção --no-nvram
para especificar o contrário.
Como resultado, tanto com a BIOS tradicional como com a UEFI, correndo grub-install
pode actualizar o seu gestor de arranque para ler um ficheiro de configuração GRUB completamente diferente num disco completamente diferente – embora os detalhes desse processo sejam completamente diferentes.
Com UEFI, você pode realmente mudar a seleção do seu dispositivo de boot de dentro do SO, com efibootmgr
ou grub-install
. Mas grub-install
é um grande exagero para isso: se ambas as suas instalações são UEFI e têm as suas próprias partições ESP separadas, elas terão as suas próprias variáveis de arranque UEFI e a selecção entre elas pode ser feita facilmente com efibootmgr
, ou mesmo nas definições da BIOS UEFI.
Com a BIOS tradicional, é um pouco mais confuso: você vai querer ter a certeza que cada instalação /boot/grub/device.map
identifica o disco dessa instalação específica como hd0
, e a outra como hd1
. Depois use grub-install
para apenas escrever o bootloader no disco de cada instalação; nunca no disco “oposto”. Dessa forma, ambos os discos serão completamente independentes e inicializáveis, mesmo que o outro disco seja completamente removido. Você pode adicionar um item de menu nos arquivos de configuração de cada GRUB que lhe permitirá iniciar a instalação “oposta”, se você quiser. Ou pode simplesmente utilizar a BIOS para seleccionar o disco para arrancar de.
O que deve saber é que o selector de ordem de arranque da BIOS tradicional irá normalmente funcionar fazendo com que o disco seleccionado para arrancar o “primeiro” disco para as funções da BIOS, e assim o GRUB’s hd0
irá sempre referir-se ao “disco que está actualmente seleccionado para arrancar na BIOS”.
Então, se você está atualmente inicializando de /dev/sda
(então a BIOS diz sda
é hd0
), e você quer um item do menu GRUB nesse disco para mudar para o menu de inicialização de /dev/sdb
, você usaria 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}
… e também na configuração do GRUB do /dev/sdb.