10.4. Usando o GRUB para Configurar o Processo de Inicialização

[Nota]

Nota

Se teu sistema tiver suporte UEFI e você desejar inicializar o LFS com UEFI, você deveria ignorar as instruções nesta página, mas ainda assim aprender a sintaxe do grub.cfg e o método para especificar uma partição no arquivo a partir desta página e configurar o GRUB com suporte UEFI usando as instruções fornecidas na página BLFS.

10.4.1. Introdução

[Atenção]

Atenção

Configurar o GRUB incorretamente pode tornar teu sistema inoperável sem um dispositivo alternativo de inicialização, como um CD-ROM ou unidade USB inicializável. Esta seção não é exigida para inicializar teu sistema LFS. Você possivelmente queira apenas modificar teu carregador de inicialização atual, por exemplo, Grub-Legacy, GRUB2 ou LILO.

Certifique-se de que um disco de inicialização de emergência esteja pronto para resgatar o computador se o computador se tornar inusável (não inicializável). Se já não tiver um dispositivo de inicialização, você consegue criar um. Para a finalidade de que o procedimento abaixo funcione, você precisa saltar adiante para o BLFS e instalar xorriso oriundo do pacote libisoburn.

cd /tmp
grub-mkrescue --output=grub-img.iso
xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso

10.4.2. Convenções de Nomenclatura do GRUB

O GRUB usa estrutura de nomenclatura própria dele para unidades e partições na forma de (hdn,m), onde n é o número da unidade rígida e m é o número da partição. Os números da unidade rígida começam do zero, porém os números da partição começam do um para partições normais (do cinco para partições estendidas). Observe que isso é diferente de versões anteriores, onde ambos os números começavam do zero. Por exemplo, a partição sda1 é (hd0,1) para o GRUB e sdb3 é (hd1,3). Em contraste com o Linux, GRUB não considera unidades de CD-ROM como unidades rígidas. Por exemplo, se usar um CD em hdb e uma segunda unidade rígida em hdc, essa segunda unidade rígida ainda seria (hd1).

10.4.3. Definindo a Configuração

O GRUB funciona escrevendo dados na primeira trilha física do disco rígido. Essa área não é parte de nenhum sistema de arquivos. Os programas lá acessam módulos do GRUB na partição de inicialização. O local padrão é /boot/grub/.

O local da partição de inicialização é uma escolha do(a) usuário(a) que afeta a configuração. Uma recomendação é a de ter uma partição pequena (tamanho sugerido é 200 MB) separada somente para informações de inicialização. Dessa forma, cada construção, seja LFS ou alguma distribuição comercial, consegue acessar os mesmos arquivos de inicialização e o acesso consegue ser feito a partir de qualquer sistema inicializado. Se escolher fazer isso, você precisará montar a partição separada, mover todos os arquivos no diretório /boot atual (por exemplo, o núcleo Linux que você recém construiu na seção anterior) para a nova partição. Você então precisará desmontar a partição e remontá-la como /boot. Se você fizer isso, tenha certeza de atualizar /etc/fstab.

Deixar /boot na partição LFS atual também funcionará, porém a configuração para múltiplos sistemas é mais complicada.

Usando as informações acima, determine o designador apropriado para a partição raiz (ou partição de inicialização, se uma separada for usada). Para o exemplo seguinte, é assumido que a partição raiz (ou inicialização separada) é sda2.

Instale os arquivos do GRUB em /boot/grub e configure a trilha de inicialização:

[Atenção]

Atenção

O seguinte comando sobrescreverá o carregador de inicialização atual. Não execute o comando de isso não for desejado, por exemplo, se usar um gerenciador de inicialização de terceiro(a) para gerenciar o Master Boot Record (MBR).

grub-install /dev/sda
[Nota]

Nota

Se o sistema tiver sido inicializado usando UEFI, grub-install tentará instalar arquivos para o alvo x86_64-efi, porém aqueles arquivos não foram instalados no Capítulo 8. Se esse for o caso, adicione --target i386-pc ao comando acima.

10.4.4. Criando o Arquivo de Configuração do GRUB

Gere o /boot/grub/grub.cfg:

cat > /boot/grub/grub.cfg << "EOF"
# Inicia /boot/grub/grub.cfg
set default=0
set timeout=5

insmod part_gpt
insmod ext2
set root=(hd0,2)
set gfxpayload=1024x768x32

menuentry "GNU/Linux, Linux 6.16.1-lfs-12.4-systemd" {
        linux   /boot/vmlinuz-6.16.1-lfs-12.4-systemd root=/dev/sda2 ro
}
EOF

Os comandos insmod carregam os módulos do GRUB chamados part_gpt e ext2. Apesar da nomenclatura, ext2 na verdade suporta sistemas de arquivos ext2, ext3 e ext4. O comando grub-install embutiu alguns módulos na imagem principal do GRUB (instalada no MBR ou na partição BIOS do GRUB) para acessar os outros módulos (em /boot/grub/i386-pc) sem um problema de galinha ou ovo, de modo que, com uma configuração típica, esses dois módulos já estão embutidos e esses dois comandos insmod não farão nada. Mas eles não causam danos de qualquer maneira e possivelmente sejam necessários com algumas configurações raras.

O comando set gfxpayload=1024x768x32 configura a resolução e a profundidade de cor do framebuffer VESA a ser passado para o núcleo. Ele é necessário para o controlador SimpleDRM do núcleo usar o framebuffer VESA. Você pode usar um valor diferente de resolução ou de profundidade de cor que melhor se adeque para teu monitor.

[Nota]

Nota

A partir da perspectiva do GRUB, os arquivos do núcleo estão relativos à partição usada. Se você usou uma partição /boot separada, remova /boot da linha linux acima. Você também precisará mudar a linha set root para apontar para a partição de inicialização.

[Nota]

Nota

O designador do GRUB para uma partição possivelmente mude se você adicionou ou removeu alguns discos (incluindo discos removíveis, como dispositivos USB miniatura). A mudança possivelmente cause falha de inicialização, pois o grub.cfg se refere a alguns designadores antigos. Se desejar evitar tal problema, você possivelmente use o UUID de uma partição e o UUID de um sistema de arquivos, em vez de um designador do GRUB para especificar um dispositivo. Execute lsblk -o UUID,PARTUUID,PATH,MOUNTPOINT para exibir os UUIDs dos teus sistemas de arquivos (na coluna UUID) e partições (na coluna PARTUUID). Então substitua set root=(hdx,y) por search --set=root --fs-uuid <UUID do sistema de arquivos onde o núcleo estiver instalado>; e substitua root=/dev/sda2 por root=PARTUUID=<UUID da partição onde o LFS estiver construído>.

Observe que o UUID de uma partição é completamente diferente do UUID do sistema de arquivos nessa partição. Alguns recursos online possivelmente instruam você a usar o root=UUID=<UUID do sistema de arquivos>, em vez do root=PARTUUID=<UUID da partição>, porém fazer isso exigirá um initramfs, o qual está além do escopo do LFS.

O nome do nó de dispositivo para uma partição em /dev também possivelmente mude (isso é menos provável que uma mudança do designador do GRUB). Você também pode substituir caminhos para nós de dispositivo, como /dev/sda1, por PARTUUID=<UUID da partição>, no /etc/fstab, para evitar uma potencial falha de inicialização no caso do nome do nó de dispositivo tiver mudado.

O GRUB é um programa extremamente poderoso e ele fornece um tremendo número de opções para inicializar a partir de uma ampla variedade de dispositivos, sistemas operacionais e tipos de partição. Existem também muitas opções para personalização, tais como telas gráficas de abertura; reprodução de sons; entrada gerada de mouse; etc. Os detalhes dessas opções estão além do escopo desta introdução.

[Cuidado]

Cuidado

Existe um comando, grub-mkconfig, que consegue escrever um arquivo de configuração automaticamente. Ele usa um conjunto de scripts em /etc/grub.d/ e destruirá quaisquer personalizações que você fizer. Esses scripts são projetados primariamente para distribuições não fonte e não são recomendados para o LFS. Se você instalar uma distribuição comercial do Linux, existe uma boa chance de que esse programa seja executado. Tenha certeza de produzir uma cópia de segurança do teu arquivo grub.cfg.