Alguns exemplos encontrados online dizem que update-grub deve ser executado APÓS grub-install. Outros invertem a ordem. Qual é a correta?
Se eu tiver duas instalações Linux (uma em sda e outra em sdb), se eu executar update-grub na instalação sda, ele colocará a instalação sda no topo do boot cardápio. Se eu executar update-grub na instalação do sdb, ele colocará a instalação do sdb no topo do menu.
Assumindo DEFAULT = 0, isso deveria, teoricamente, permitir que eu selecione meu sistema operacional selecionando o dispositivo de inicialização no BIOS. O “grub-install / dev / sda” altera o menu de inicialização sda para corresponder ao último “update-grub”, independentemente de ter sido executado a partir da versão sda ou sdb do Linux?
Resposta
update-grub
, pelo menos no Debian e seus parentes como o Ubuntu, é basicamente apenas um wrapper em torno de grub-mkconfig
. Portanto, ele cria / atualiza / regenera a configuração do GRUB, não o carregador de inicialização em si.
O que o grub-install
realmente faz depende de qual versão do GRUB que você está executando: BIOS tradicional GRUB ou UEFI GRUB?
Com o BIOS GRUB tradicional, grub-install
irá (re) escrever a parte do GRUB embutido no Master Boot Record e codificar nele o bloco de disco físico números de onde ler a próxima parte do GRUB. Ele também determinará de qual partição o arquivo de configuração GRUB real (/boot/grub/grub.cfg
) será lido. Um fator importante aqui é o arquivo /boot/grub/device.map
, que diz ao GRUB como a numeração dos dispositivos BIOS (e, portanto, GRUB “s) mapeia para dispositivos de disco Linux.
Com o UEFI GRUB, a parte principal do carregador de inicialização GRUB estará localizado como um arquivo na partição do sistema EFI, normalmente como /boot/efi/EFI/<name of distribution>/grubx64.efi
ou semelhante. O nome do caminho do carregador de inicialização é armazenado na NVRAM do sistema (= o local onde as configurações do BIOS são armazenadas) nas variáveis de inicialização UEFI. A parte principal do GRUB pode ser completamente independente (e deve ser se a inicialização segura estiver em uso!) Ou pode carregar funcionalidades adicionais como módulos GRUB, normalmente do diretório /boot/grub
de a distribuição Linux da qual faz parte.
As variáveis de inicialização UEFI identificarão o disco que o sistema deve usar para procurar a partição do sistema EFI e o arquivo do carregador de inicialização dentro dela. Você mesmo pode ver essas variáveis, usando efibootmgr -v
comando. O comando grub-install
atualizará essas variáveis, a menos que você use a opção --no-nvram
para especificar o contrário.
Como resultado, com o BIOS tradicional e UEFI, a execução de grub-install
pode atualizar seu carregador de inicialização para ler um arquivo de configuração GRUB completamente diferente em um disco diferente – embora os detalhes desse processo sejam completamente diferentes.
Com UEFI, você pode alterar a seleção do dispositivo de inicialização de dentro do sistema operacional, com qualquer efibootmgr
ou grub-install
. Mas grub-install
é um exagero para isso: se ambas as instalações forem UEFI e tiverem suas próprias partições ESP separadas, elas terão suas próprias variáveis de inicialização UEFI e a seleção entre elas pode ser facilmente feita com efibootmgr
, ou mesmo nas configurações do BIOS UEFI.
Com o BIOS tradicional, é um pouco mais confuso: você vai querer ter certeza de que cada instalação “s /boot/grub/device.map
identifica o disco dessa instalação específica como hd0
e o outro como hd1
.Em seguida, use grub-install
para gravar apenas o bootloader no próprio disco de cada instalação; nunca para o disco “oposto”. Dessa forma, ambos os discos serão completamente independentes e inicializáveis, mesmo se o outro disco for completamente removido. Você pode adicionar um item de menu aos arquivos de configuração de cada GRUB que permitirá que você inicialize a instalação “oposta”, se desejar. Ou você pode apenas usar o BIOS para selecionar o disco a partir do qual inicializar.
O que você deve saber é que o seletor de ordem de inicialização de BIOS tradicionais normalmente funcionará tornando o disco selecionado para inicializar o “primeiro” disco para funções do BIOS, e assim GRUB “s hd0
sempre se referirá ao” disco que está atualmente selecionado para inicialização no BIOS “.
Então, se você estiver atualmente inicializando de /dev/sda
(então o BIOS diz que sda
é hd0
), e você quer um Item de menu GRUB nesse disco para alternar para o menu de inicialização do /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 de / dev / sdb “s.
Comentários
- então execute update-grub antes de grub-install (não que faça diferença, mas para UEFI) ou o contrário?
-
grub-install
instala as partes binárias do GRUB,update-grub
produz apenas o arquivo de configuração. Se você precisar reinstalar completamente o GRUB, eu ' d diga executegrub-install
primeiro. Na verdade, ele pode executarupdate-grub
para você como parte do trabalho – se não ' t, você mesmo poderá executá-lo posteriormente. - " própria variável de inicialização UEFI s " – > Então, se entendi corretamente em uma configuração UEFI, os vars de inicialização UEFI em NVRAM são como uma matriz que especifica o disco de inicialização? O que acontece se um disco falhar; pode-se especificar um fallback / vários valores desta matriz? Além disso, se eu entendi, o usuário sempre pode ignorar a var de inicialização UEFI simplesmente especificando manualmente o disco de inicialização (efetivamente o que a var de inicialização UEFI está fazendo). Obrigado.
- @ninjagecko Seu entendimento está correto, mas talvez incompleto. As variáveis de inicialização UEFI especificam não apenas o UUID da partição a partir da qual inicializar, mas o nome do caminho do arquivo do carregador de inicialização, um nome legível por humanos e um campo de parâmetro opcional. E sim, você pode especificar vários (conjuntos de) valores, especificar a ordem para tentá-los e até mesmo dizer ao sistema para inicializar uma opção específica fora da ordem normal apenas desta vez, e então continuar usando a ordem normal. Todos esses são recursos padrão da especificação UEFI; os autores do firmware podem fornecer ainda mais opções, se desejarem.