update-grub vs. grub-install? (Português)

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 execute grub-install primeiro. Na verdade, ele pode executar update-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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *