O que fazem os programas update-grub e 'modprobe efivars' neste caso?

0

Estou a instalar o Ubuntu 17.04 (mas também se aplica a 16.04) na série Acer Aspire ES barata. Ele vem com o Windows pré-instalado ou Linux Linpus. Meu veio com Linpus.

Como para muitos donos de tal caderno ( discussão 1 , discussão 2 , discussão 3 , discussão 4 ), eu também tenho o mesmo problema - o Ubuntu instala muito bem, mas o sistema não inicializa.

Depois de experimentar, usei os seguintes comandos e consegui que o sistema funcionasse e inicializasse bem:

# mmcblk0p1 is my EFI partition
# mmcblk0p2 is my root partition
sudo mount /dev/mmcblk0p2 /mnt
sudo mkdir /mnt/boot/efi
sudo mount /dev/mmcblk0p1 /mnt/boot/efi
for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
modprobe efivars
efibootmgr --verbose
apt-get install --reinstall grub-efi-amd64
grub-install --no-nvram --root-directory=/mnt
chroot /mnt
update-grub
cd /boot/efi/EFI
cp -R ubuntu/ BOOT
cd BOOT cp grubx64.efi bootx64.efi
cp -R BOOT/ Linux

Eu estou copiando o "ubuntu" para "BOOT" e "Linux", porque o Linpus tinha os mesmos nomes no EFI, e eu suspeito que eles estejam codificados no BIOS.

Além disso, eu tentei apenas com os últimos passos - EFI copiar e renomear, e isso não funciona. Eu vou fazer um particionamento mais complexo, incluindo partições criptografadas, então eu tenho algumas perguntas:

1. Que mágica está acontecendo, quando eu corro o update-grub?

2. Os comandos "modprobe efivars" e "efibootmgr --verbose" também são necessários?

    
por Maris B. 19.04.2017 / 12:35

1 resposta

2
% bl0ck_qu0te%

O GRUB é um gerenciador de inicialização e boot loader para Linux - ele apresenta um menu de opções de boot (a parte do gerenciador de inicialização) e, quando você seleciona uma opção Linux, carrega o kernel Linux na memória e o executa. parte do carregador de inicialização). Essas funções dependem de um arquivo de configuração do GRUB, armazenado no Ubuntu em /boot/grub/grub.cfg ; o menu é gerado com base nesse arquivo de configuração. Se o arquivo estiver ausente, o GRUB apresentará uma solicitação que lê grub> , o que não é muito útil, exceto para especialistas. Se o arquivo de configuração contiver informações incorretas, você poderá ou não obter um menu, e pelo menos alguns itens de menu provavelmente não funcionarão.

O que o update-grub faz é varrer o computador quanto a sistemas operacionais e kernels do Linux e criar um novo arquivo grub.cfg . Normalmente, esse script é executado automaticamente quando você instala um novo kernel (o que pode acontecer de maneira automática ou semi-automática, dependendo das configurações de atualização do sistema operacional). Você também pode executar update-grub manualmente - digamos, se você fez alterações em outro sistema operacional que está sendo dual-boot e deseja que o GRUB reconheça essas mudanças. No seu caso, não tenho certeza se foi necessário. Em teoria, deveria ter sido configurado quando você instalou o Ubuntu. OTOH, claramente que a instalação não foi totalmente bem-sucedida, então talvez grub.cfg esteja faltando ou esteja mal configurado.

% bl0ck_qu0te%

O comando modprobe efivars carrega o módulo do kernel efivars , que dá ao kernel acesso às variáveis EFI armazenadas na NVRAM. Essas variáveis registram coisas como ponteiros para arquivos específicos do carregador de inicialização usados pelo firmware e a ordem em que esses carregadores de inicialização são usados. Observe que a ordem de controle durante a inicialização é EFI para o GRUB (ou outro gerenciador de inicialização / carregador) para o kernel do SO (Linux). O processo de instalação do sistema operacional, portanto, requer alguma maneira de dizer ao EFI para iniciar o GRUB, em vez de algum outro carregador de inicialização, e as variáveis EFI são parte de como isso é feito.

A ferramenta efibootmgr é outra parte desse processo; ele usa opções para permitir que você visualize ou modifique variáveis EFI. Ou seja, efibootmgr fala com o kernel, que usa seu módulo efivars para acessar as variáveis NVRAM da EFI. O comando efibootmgr específico que você mencionou, efibootmgr --verbose , simplesmente exibe as variáveis de inicialização atuais. Assim, não é importante no procedimento delineado e pode ser omitido. OTOH, o comando grub-install , em um sistema EFI, atualizará ordinariamente as variáveis de inicialização EFI; mas o fato de você ter passado a opção --no-nvram disse não para fazer isso. Isso poderia criar problemas, exceto ....

Além disso, você copiou e renomeou o GRUB para dois outros nomes. Um deles é o nome de arquivo de fallback do EFI , EFI/BOOT/bootx64.efi . Este é o arquivo que uma EFI tenta executar como um carregador de boot se ele não tiver as variáveis EFI que apontam para outro nome, ou se essas outras entradas forem inválidas ou seus binários retornarem à EFI sem iniciar um SO. Ordinariamente, modificar as variáveis EFI via efibootmgr (que é uma coisa que grub-install fará, se chamado de sem --no-nvram ) tornará o sistema inicializável. Alguns computadores, no entanto, têm EFIs bugs que esquecem ou ignoram suas variáveis EFI. Em tais sistemas, copiar / renomear o carregador de boot, como você fez, é necessário para que o sistema seja inicializado. O fato de que sua instalação de "estoque" não funcionou e você teve que passar por esses bastidores sugere que você pode ter um computador desse tipo.

Para mais informações sobre esses assuntos, recomendo:

por Rod Smith 19.04.2017 / 16:32