Linux Professional Institute Learning Logo.
Ir para o conteúdo principal
  • Home
    • Todos os recursos
    • LPI Materiais Didáticos
    • Colabore Conosco
    • Publishing Partners
    • Seja um Publishing Partner
    • Quem Somos
    • FAQ
    • Colaboradores
    • Contato
  • LPI.org
102.2 Lição 1
Tópico 101: Arquitetura de Sistema
101.1 Identificar e editar configurações de hardware
  • 101.1 Lição 1
101.2 Início (boot) do sistema
  • 101.2 Lição 1
101.3 Alternar runlevels/boot targets, desligar e reiniciar o sistema
  • 101.3 Lição 1
Tópico 102: Instalação do Linux e administração de Pacotes
102.1 Dimensionar partições de disco
  • 102.1 Lição 1
102.2 Instalar o gerenciador de inicialização
  • 102.2 Lição 1
102.3 Controle de bibliotecas compartilhadas
  • 102.3 Lição 1
102.4 Utilização do sistema de pacotes Debian
  • 102.4 Lição 1
102.5 Utilização do sistema de pacotes RPM e YUM
  • 102.5 Lição 1
102.6 Linux virtualizado
  • 102.6 Lição 1
Tópico 103: Comandos GNU e Unix
103.1 Trabalhar na linha de comando
  • 103.1 Lição 1
  • 103.1 Lição 2
103.2 Processar fluxos de texto usando filtros
  • 103.2 Lição 1
103.3 Gerenciamento básico de arquivos
  • 103.3 Lição 1
  • 103.3 Lição 2
103.4 Fluxos, pipes (canalização) e redirecionamentos de saída
  • 103.4 Lição 1
  • 103.4 Lição 2
103.5 Criar, monitorar e finalizar processos
  • 103.5 Lição 1
  • 103.5 Lição 2
103.6 Modificar a prioridade de execução de um processo
  • 103.6 Lição 1
103.7 Procurar em arquivos de texto usando expressões regulares
  • 103.7 Lição 1
  • 103.7 Lição 2
103.8 Edição básica de arquivos com o vi
  • 103.8 Lição 1
Tópico 104: Dispositivos, sistemas de arquivos Linux e padrão FHS
104.1 Criar partições e sistemas de arquivos
  • 104.1 Lição 1
104.2 Manutenção da integridade de sistemas de arquivos
  • 104.2 Lição 1
104.3 Controle da montagem e desmontagem dos sistemas de arquivos
  • 104.3 Lição 1
104.5 Controlar permissões e propriedades de arquivos
  • 104.5 Lição 1
104.6 Criar e alterar links simbólicos e hardlinks
  • 104.6 Lição 1
104.7 Encontrar arquivos de sistema e conhecer sua localização correta
  • 104.7 Lição 1
How to get certified
  1. Tópico 102: Instalação do Linux e administração de Pacotes
  2. 102.2 Instalar o gerenciador de inicialização
  3. 102.2 Lição 1

102.2 Lição 1

Certificação:

LPIC-1

Versão:

5.0

Tópico:

102 Instalação do Linux e gerenciamento de pacotes

Objetivo:

102.2 Instalar um gerenciador de inicialização

Lição:

1 de 1

Introdução

Quando um computador é ligado, o primeiro software a ser executado é o gerenciador de inicialização. O único objetivo desse código é carregar o kernel de um sistema operacional e entregar o controle a ele. O kernel então carrega os drivers necessários, inicializa o hardware e, em seguida, carrega o restante do sistema operacional.

O GRUB é o gerenciador de inicialização usado na maioria das distribuições Linux. Ele pode carregar o kernel do Linux ou outros sistemas operacionais, como o Windows, além de lidar com diversas imagens e parâmetros do kernel como entradas de menu separadas. A seleção do kernel na inicialização é feita por meio de uma interface acionada por teclado. Existe também uma interface de linha de comando para editar as opções e parâmetros de inicialização.

A maioria das distribuições Linux instala e configura o GRUB (na verdade, o GRUB 2) automaticamente, para que um usuário comum não precise pensar nisso. No entanto, como administrador do sistema, é essencial saber controlar o processo de inicialização para ser possível recuperar o sistema no caso de uma falha na inicialização — por exemplo, se houver um erro na atualização do kernel.

Nesta lição, você aprenderá como instalar, configurar e interagir com o GRUB.

GRUB Legacy e GRUB 2

A versão original do GRUB (Grand Unified Bootloader), agora conhecida como GRUB Legacy, foi desenvolvida em 1995 como parte do projeto GNU Hurd e, mais tarde, adotada como o gerenciador de inicialização padrão de muitas distribuições Linux, substituindo alternativas anteriores, como o LILO.

O GRUB 2 é uma remodelagem completa do GRUB com o objetivo de deixá-lo mais limpo, seguro, robusto e poderoso. Dentre as muitas vantagens em relação ao GRUB Legacy estão um arquivo de configuração muito mais flexível (com mais comandos e instruções condicionais, semelhantes a uma linguagem de script), um design mais modular e melhor localização/internacionalização.

Também há suporte para temas e menus gráficos de inicialização com telas de abertura, a possibilidade de inicializar ISOs LiveCD diretamente a partir do disco rígido, melhor suporte para arquiteturas não-x86, suporte universal para UUIDs (facilitando a identificação de discos e partições) e muito mais.

O GRUB Legacy não está mais em desenvolvimento ativo (a última versão foi a 0.97, em 2005), e hoje a maioria das principais distribuições Linux vem com o GRUB 2 como gerenciador de inicialização padrão. No entanto, ainda podemos encontrar sistemas usando o GRUB Legacy; portanto, é importante saber como usá-lo e em que ele difere do GRUB 2.

Onde fica o gerenciador de inicialização?

Historicamente, os discos rígidos nos sistemas compatíveis com IBM PC eram particionados usando o esquema de particionamento MBR, criado em 1982 para o IBM PC-DOS (MS-DOS) 2.0.

Nesse esquema, o primeiro setor de 512 bytes do disco é chamado de Master Boot Record (Registro Mestre de Inicialização, em português) e contém uma tabela que descreve as partições no disco (a tabela de partições) e também um código de inicialização (bootstrap), chamado gerenciador de inicialização.

Quando o computador é ligado, esse código mínimo (devido às restrições de tamanho) do gerenciador de inicialização é carregado, executado e transfere o controle para um carregador de inicialização secundário no disco, geralmente localizado em um espaço de 32 KB entre o MBR e a primeira partição, que por sua vez carregará o(s) sistema(s) operacional(is).

Em um disco particionado em MBR, o código de inicialização do GRUB é instalado no MBR. Ele carrega e transfere o controle para uma imagem “núcleo” instalada entre o MBR e a primeira partição. A partir desse ponto, o GRUB é capaz de carregar o restante dos recursos necessários (definições de menu, arquivos de configuração e módulos extras) do disco.

No entanto, o MBR tem limitações no número de partições (originalmente, no máximo 4 partições primárias; mais tarde, no máximo 3 partições primárias com 1 partição estendida, subdividida em uma série de partições lógicas) e no tamanho máximo de disco (2 TB). Para suplantar essas limitações, foi criado um novo esquema de particionamento chamado GPT (GUID Partition Table), parte do padrão UEFI (Unified Extensible Firmware Interface).

Os discos particionados em GPT podem ser usados em computadores com a BIOS tradicional do PC ou com o firmware UEFI. Em máquinas com BIOS, a segunda parte do GRUB é armazenada em uma partição especial de inicialização da BIOS.

Em sistemas com firmware UEFI, o GRUB é carregado pelo firmware a partir dos arquivos grubia32.efi (para sistemas de 32 bits) ou grubx64.efi (para sistemas de 64 bits) em uma partição chamada ESP (EFI System Partition)

A partição /boot

No Linux, os arquivos necessários para o processo de inicialização geralmente são armazenados em uma partição de inicialização montada no sistema de arquivos raiz e coloquialmente chamada de /boot.

Uma partição de inicialização não é imprescindível nos sistemas atuais, já que os carregadores de inicialização como o GRUB geralmente são capazes de montar o sistema de arquivos raiz e procurar os arquivos necessários dentro de um diretório /boot. Porém, seu uso é aconselhável, pois ela separa os arquivos necessários ao processo de inicialização do restante do sistema de arquivos.

Essa partição geralmente é a primeira do disco. A razão para isso é que a IBM PC BIOS original endereçava os discos usando cilindros, cabeças e setores (CHS), com um máximo de 1024 cilindros, 256 cabeças e 63 setores, resultando em um tamanho máximo de disco de 528 MB (504 MB no MS-DOS). Isso significa que qualquer coisa além dessa marca não estaria acessível em sistemas legados, a menos que um esquema de endereçamento de disco diferente (como o Endereçamento de bloco lógico, LBA) fosse usado.

Portanto, para garantir uma compatibilidade máxima, a partição /boot geralmente está localizada no início do disco e termina antes do cilindro 1024 (528 MB), garantindo que a máquina sempre possa carregar o kernel. O tamanho recomendado para essa partição em uma máquina atual é de 300 MB.

Outras razões para uma partição /boot separada são a criptografia e a compactação, já que alguns métodos ainda não são suportados pelo GRUB 2, ou ainda se a partição raiz do sistema (/) precisar ser formatada usando um sistema de arquivos não suportado.

Conteúdo da partição de inicialização

O conteúdo da partição /boot pode variar de acordo com a arquitetura do sistema ou o gerenciador de inicialização usado, mas em um sistema baseado em x86 geralmente encontramos os arquivos abaixo. A maioria deles recebe o sufixo -VERSION, onde -VERSION é a versão correspondente do kernel do Linux. Assim, por exemplo, o arquivo de configuração para a versão do kernel do Linux 4.15.0-65-generic seria chamado de config-4.15.0-65-generic.

Arquivo de configuração

Este arquivo, geralmente chamado config-VERSION (veja o exemplo acima), armazena parâmetros de configuração para o kernel do Linux. Este arquivo é gerado automaticamente quando um novo kernel é compilado ou instalado e não deve ser diretamente modificado pelo usuário.

Mapa do sistema

Este arquivo é uma tabela de consulta que articula nomes de símbolos (como variáveis ou funções) com sua posição correspondente na memória. Isso é útil ao se corrigir um tipo de falha do sistema conhecida como kernel panic (pânico do kernel), pois permite ao usuário saber qual variável ou função estava sendo chamada quando ocorreu a falha. Como no caso do arquivo de configuração, o nome geralmente é System.map-VERSION (por exemplo, System.map-4.15.0-65-generic).

Kernel do Linux

Este é o kernel do sistema operacional propriamente dito. Seu nome é geralmente vmlinux-VERSION (por exemplo, vmlinux-4.15.0-65-generic). Também se pode encontrar o nome vmlinuz em vez de vmlinux — o z no final indica que o arquivo foi compactado.

Disco RAM inicial

Geralmente se chama initrd.img-VERSION e contém um sistema de arquivos raiz mínimo carregado em um disco RAM, contendo os utilitários e módulos de kernel necessários para que o kernel possa montar o sistema de arquivos raiz real.

Arquivos relacionados ao gerenciador de inicialização

Em sistemas com o GRUB instalado, eles costumam estar localizados em /boot/grub e incluem o arquivo de configuração (/boot/grub/grub.cfg para o GRUB 2 ou /boot/grub/menu.lst no caso do GRUB Legacy), módulos (em /boot/grub/i386-pc), arquivos de tradução (em /boot/grub/locale) e fontes (em /boot/grub/fonts) do GRUB.

GRUB 2

Instalando o GRUB 2

O GRUB 2 pode ser instalado usando o utilitário grub-install. Se seu sistema se recusa a inicializar, você precisará inicializá-lo usando um Live CD ou um disco de recuperação, descobrir qual é a partição de inicialização do seu sistema, montá-la e executar o utilitário.

Note

Para usar os comandos abaixo, é preciso estar logado como root. Se não for o caso, execute primeiro sudo su - para “virar” root. No final, digite exit para se deslogar e voltar a ser um usuário comum.

O primeiro disco de um sistema é geralmente o dispositivo de inicialização . Pode ser necessário saber se existe uma partição de inicialização no disco. Para isso existe o utilitário fdisk. Para listar todas as partições no primeiro disco da sua máquina, use:

# fdisk -l /dev/sda
Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x97f8fef5

Device     Boot    Start       End   Sectors   Size Id Type
/dev/sda1  *        2048   2000895   1998848   976M 83 Linux
/dev/sda2        2002942 234440703 232437762 110,9G  5 Extended
/dev/sda5        2002944  18008063  16005120   7,6G 82 Linux swap / Solaris
/dev/sda6       18010112 234440703 216430592 103,2G 83 Linux

A partição de inicialização é identificada com o * na coluna boot. No exemplo acima, ela é /dev/sda1.

A seguir, crie um diretório temporário em /mnt e monte a partição nele:

# mkdir /mnt/tmp
# mount /dev/sda1 /mnt/tmp

Depois execute grub-install, apontando-o para o dispositivo de inicialização (não a partição) e o diretório em que a partição de inicialização está montada. Se o sistema possuir uma partição de inicialização dedicada, o comando será:

# grub-install --boot-directory=/mnt/tmp /dev/sda

Caso esteja instalando em um sistema que não possui uma partição de inicialização, mas apenas um diretório /boot no sistema de arquivos raiz, aponte-o em grub-install. Nesse caso, o comando é:

# grub-install --boot-directory=/boot /dev/sda

Configurando o GRUB 2

O arquivo de configuração padrão do GRUB 2 é /boot/grub/grub.cfg. Esse arquivo é gerado automaticamente e não se recomenda editá-lo à mão. Para fazer alterações na configuração do GRUB, é preciso editar o arquivo /etc/default/grub e depois executar o utilitário update-grub para gerar um arquivo compatível.

Note

update-grub normalmente é um atalho para grub-mkconfig -o /boot/grub/grub.cfg, de modo que eles produzem os mesmos resultados.

Existem algumas opções no arquivo /etc/default/grub para controlar o comportamento do GRUB 2, como o kernel padrão de inicialização, tempo limite, parâmetros extras da linha de comando, etc. Os mais importantes são:

GRUB_DEFAULT=

A entrada de menu padrão para a inicialização. Pode ser um valor numérico (como 0, 1, etc.), o nome de um item de menu (como debian) ou saved, que é usado em conjunto com GRUB_SAVEDEFAULT=, explicado abaixo. Lembre-se de que as entradas de menu começam com zero, de forma que a primeira é 0, a segunda é 1 e assim por diante.

GRUB_SAVEDEFAULT=

Se esta opção estiver definida como true e GRUB_DEFAULT= como saved, a opção padrão de inicialização sempre será a última selecionada no menu de inicialização.

GRUB_TIMEOUT=

O tempo limite, em segundos, para que a entrada do menu padrão seja selecionada. Se definido como 0, o sistema inicializará a entrada padrão sem exibir um menu. Se definido como -1, o sistema aguardará até que o usuário selecione uma opção, não importa quanto tempo leve.

GRUB_CMDLINE_LINUX=

Lista as opções de linha de comando que serão adicionadas às entradas do kernel do Linux.

GRUB_CMDLINE_LINUX_DEFAULT=

Por padrão, duas entradas de menu são geradas para cada kernel do Linux, uma com as opções padrão e uma entrada para recuperação. Com esta opção, você pode incluir parâmetros extras que serão adicionados apenas à entrada padrão.

GRUB_ENABLE_CRYPTODISK=

Se definido como y, comandos como grub-mkconfig, update-grub e grub-install procuram por discos criptografados e adicionam os comandos necessários para acessá-los durante a inicialização. Assim, a inicialização automática é desabilitada (GRUB_TIMEOUT= com valor diferente de -1) porque uma senha será exigida para descriptografar os discos antes que possam ser acessados.

Administrando as entradas de menu

Quando rodamos o update-grub, o GRUB 2 busca por kernels e sistemas operacionais na máquina e gera as entradas de menu correspondentes no arquivo /boot/grub/grub.cfg. É possível adicionar novas entradas manualmente aos arquivos de script dentro do diretório /etc/grub.d.

Esses arquivos devem ser executáveis e são processados em ordem numérica pelo update-grub. Portanto, 05_debian_theme é processado antes de 10_linux e assim por diante. As entradas de menu personalizadas são geralmente adicionadas ao arquivo 40_custom.

A sintaxe básica de uma entrada de menu é mostrada abaixo:

menuentry "Default OS" {
    set root=(hd0,1)
    linux /vmlinuz root=/dev/sda1 ro quiet splash
    initrd /initrd.img
}

A primeira linha sempre começa com menuentry e termina com {. O texto entre aspas será mostrado como o rótulo da entrada no menu de inicialização do GRUB 2.

O parâmetro set root define o disco e a partição em que o sistema de arquivos raiz do sistema operacional está localizado. Note que no GRUB 2 os discos são numerados a partir de zero, então hd0 é o primeiro disco (sda no Linux), hd1 o segundo e assim por diante. As partições, por sua vez, são numeradas a partir de um. No exemplo acima, o sistema de arquivos raiz está localizado no primeiro disco (hd0), primeira partição (,1) ou sda1.

Em vez de especificar diretamente o dispositivo e a partição, também podemos pedir que o GRUB 2 busque por um sistema de arquivos com um rótulo ou UUID (Universally Unique Identifier) específico. Para isso, use o parâmetro search --set=root seguido por --label e o rótulo do sistema de arquivos a buscar, ou --fs-uuid seguido pelo UUID do sistema de arquivos.

Use o comando abaixo para encontrar o UUID de um sistema de arquivos:

$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 nov  4 08:40 3e0b34e2-949c-43f2-90b0-25454ac1595d -> ../../sda5
lrwxrwxrwx 1 root root 10 nov  4 08:40 428e35ee-5ad5-4dcb-adca-539aba6c2d84 -> ../../sda6
lrwxrwxrwx 1 root root 10 nov  5 19:10 56C11DCC5D2E1334 -> ../../sdb1
lrwxrwxrwx 1 root root 10 nov  4 08:40 ae71b214-0aec-48e8-80b2-090b6986b625 -> ../../sda1

No exemplo acima, o UUID de /dev/sda1 é ae71b214-0aec-48e8-80b2-090b6986b625. Se quisermos defini-lo como dispositivo raiz do GRUB 2, o comando seria search --set=root --fs-uuid ae71b214-0aec-48e8-80b2-090b6986b625.

Ao usar o comando search, é comum adicionar o parâmetro --no-floppy para que o GRUB não perca tempo buscando em disquetes.

A linha linux indica onde está localizado o kernel do sistema operacional (neste caso, o arquivo vmlinuz na raiz do sistema de arquivos). Depois disso, podemos passar parâmetros na linha de comando para o kernel.

No exemplo acima, especificamos a partição root (root=/dev/sda1) e passamos três parâmetros do kernel: a partição root deve ser montada com acesso apenas de leitura (ro), a maioria das mensagens de log deve ser desabilitada (quiet) e uma tela de boas-vindas deve ser exibida (splash).

A linha initrd indica onde está localizado o disco de RAM inicial. No exemplo acima, o arquivo é initrd.img, localizado na raiz do sistema de arquivos.

Note

A maioria das distribuições Linux não coloca de fato o kernel e o initrd no diretório raiz do sistema de arquivos raiz. Em vez disso, esses são links para os arquivos reais dentro do diretório ou partição /boot.

A última linha de uma entrada do menu deve conter apenas o caractere }.

Interagindo com o GRUB 2

Ao inicializar um sistema com o GRUB 2 aparece um menu de opções. Use as setas do teclado para selecionar uma opção e Enter para confirmar e inicializar a entrada selecionada.

Tip

Se você vir apenas uma contagem regressiva, mas não um menu, pressione Shift para exibir o menu.

Para editar uma opção, selecione-a com as setas e pressione E. Será exibida uma janela de editor com o conteúdo da menuentry associada àquela opção, confirme definido em /boot/grub/grub.cfg.

Depois de editar uma opção, digite Ctrl+X ou F10 para inicializar, ou ainda Esc para retornar ao menu.

Para entrar no shell do GRUB 2, pressione C na tela do menu (ou Ctrl+C) na janela de edição. Aparecerá um prompt de comando como este: grub >

Digite help para ver uma lista de todos os comandos disponíveis ou pressione Esc para sair do shell e retornar à tela do menu.

Note

Lembre-se de que esse menu não aparecerá se GRUB_TIMEOUT estiver definido com 0 em /etc/default/grub.

Inicialização a partir do shell do GRUB 2

Podemos usar o shell do GRUB 2 para inicializar o sistema caso uma configuração incorreta em uma entrada de menu cause uma falha de inicialização.

A primeira coisa que você deve fazer é descobrir onde está a partição de inicialização. Use para isso o comando ls, que mostra uma lista das partições e discos encontrados pelo GRUB 2.

grub> ls
(proc) (hd0) (hd0,msdos1)

No exemplo acima, tudo é simples. Existe apenas um disco (hd0), com apenas uma partição: (hd0,msdos1).

Os discos e partições listados serão diferentes no seu sistema. Em nosso exemplo, a primeira partição do hd0 é chamada msdos1 porque o disco foi particionado usando o esquema de particionamento MBR. Se ele fosse particionado usando GPT, o nome seria gpt1.

Para inicializar o Linux, precisamos de um kernel e de um disco RAM inicial (initrd). Vamos verificar o conteúdo de (hd0,msdos1):

grub> ls (hd0,msdos1)/
lost+found/ swapfile etc/ media/ bin/ boot/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ initrd.img initrd.img.old vmlinuz cdrom/

Podemos adicionar o parâmetro -l a ls para obter uma lista longa, como faríamos em um terminal Linux. Use Tab para completar automaticamente os nomes de discos, partições e arquivos.

Note que temos as imagens do kernel (vmlinuz) e initrd (initrd.img) bem no diretório raiz. Se não, poderíamos conferir o conteúdo de /boot com list (hd0,msdos1)/boot/.

Agora, defina a partição de inicialização:

grub> set root=(hd0,msdos1)

Carregue o kernel do Linux com o comando linux, seguido pelo caminho para o kernel e pela opção root= para informar ao kernel onde está localizado o sistema de arquivos raiz do sistema operacional.

grub> linux /vmlinuz root=/dev/sda1

Carregue o disco RAM inicial com initrd, seguido pelo caminho completo para o arquivo initrd.img:

grub> initrd /initrd.img

Agora, inicialize o sistema com boot.

Inicializando com o shell de resgate

No caso de uma falha na inicialização, o GRUB 2 pode carregar um shell de resgate, uma versão simplificada do shell que mencionamos anteriormente. Você o reconhecerá pelo prompt de comando, que é exibido como grub rescue>.

O processo para inicializar um sistema a partir deste shell é quase idêntico ao mostrado anteriormente. No entanto, será preciso carregar alguns módulos do GRUB 2 para fazer as coisas funcionarem.

Depois de descobrir qual é a partição de inicialização (com ls, como mostrado anteriormente), use o comando set prefix=, seguido pelo caminho completo para o diretório que contém os arquivos do GRUB 2 — geralmente /boot/grub. No nosso exemplo:

grub rescue> set prefix=(hd0,msdos1)/boot/grub

Em seguida, carregue os módulos normal e linux com o comando insmod:

grub rescue> insmod normal
grub rescue> insmod linux

A seguir, defina a partição de inicialização com set root= como ensinado anteriormente, carregue o kernel do linux (com linux), o disco RAM inicial (initrd) e tente inicializar com boot.

GRUB Legacy

Instalando o GRUB Legacy a partir de um sistema em execução

Para instalar o GRUB Legacy em um disco a partir de um sistema em execução, empregaremos o utilitário grub-install. O comando básico é grub-install DEVICE, onde DEVICE é o disco no qual você deseja instalar o GRUB Legacy. Um exemplo seria /dev/sda.

# grub-install /dev/sda

Note que é preciso especificar o dispositivo no qual o GRUB Legacy será instalado, como /dev/sda/, não a partição como em /dev/sda1.

Por padrão, o GRUB copia os arquivos necessários para o diretório /boot no dispositivo especificado. Se você deseja copiá-los para outro diretório, use o parâmetro --boot-directory= seguido pelo caminho completo para o local onde os arquivos devem ser copiados.

Instalando o GRUB Legacy a partir de um shell do GRUB

Se você não conseguir inicializar o sistema por algum motivo e precisar reinstalar o GRUB Legacy, poderá fazê-lo no shell do GRUB em um disco de inicialização do GRUB Legacy.

No shell do GRUB (digite c no menu de inicialização para acessar o prompt grub>), o primeiro passo é configurar o dispositivo de inicialização, que contém o diretório /boot. Por exemplo, se esse diretório estiver na primeira partição do primeiro disco, o comando seria:

grub> root (hd0,0)

Se você não souber qual dispositivo contém o diretório /boot, peça ao GRUB para procurá-lo com o comando find, como abaixo:

grub> find /boot/grub/stage1
 (hd0,0)

Em seguida, defina a partição de inicialização conforme as instruções acima e use o comando setup para instalar o GRUB Legacy no MBR e copiar os arquivos necessários no disco:

grub> setup (hd0)

Ao final, reinicie o sistema e ele deverá inicializar normalmente.

Definindo entradas e configurações do menu do GRUB Legacy

As entradas de menu e configurações do GRUB Legacy são armazenadas no arquivo /boot/grub/menu.lst. Trata-se de uma lista de comandos e parâmetros em um arquivo de texto simples, que pode ser editado diretamente em seu editor de texto predileto.

As linhas que começam com # são consideradas comentários e as linhas em branco são ignoradas.

Uma entrada de menu possui ao menos três comandos. O primeiro, title, define o título do sistema operacional na tela do menu. O segundo, root, informa ao GRUB Legacy qual o dispositivo ou partição de inicialização.

A terceira entrada, kernel, especifica o caminho completo para a imagem do kernel que deve ser carregada quando a entrada correspondente for selecionada. Observe que esse caminho é relativo ao dispositivo especificado no parâmetro root.

Veja um exemplo simples a seguir:

# This line is a comment
title My Linux Distribution
root (hd0,0)
kernel /vmlinuz root=/dev/hda1

Ao contrário do GRUB 2, no GRUB Legacy tanto as partições quanto os discos são numerados a partir de zero. Portanto, o comando root (hd0,0) define a partição de inicialização como a primeira partição (0) do primeiro disco (hd0).

Podemos omitir a instrução root se especificarmos o dispositivo de inicialização antes do caminho no comando kernel. A sintaxe é a mesma, portanto:

kernel (hd0,0)/vmlinuz root=dev/hda1

equivale a:

root (hd0,0)
kernel /vmlinuz root=/dev/hda1

Ambos carregam o arquivo vmlinuz a partir do diretório root (/) da primeira partição do primeiro disco (hd0,0).

O parâmetro root=/dev/hda1 após o comando kernel informa ao kernel do Linux qual partição deve ser usada como sistema de arquivos raiz. Este é um parâmetro do kernel do Linux, não um comando do GRUB Legacy.

Note

Para saber mais sobre os parâmetros do kernel, visite https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html.

Pode ser necessário especificar o local da imagem inicial do disco RAM para o sistema operacional com o parâmetro initrd. O caminho completo para o arquivo pode ser especificado como no parâmetro kernel, mas também é possível especificar um dispositivo ou partição antes do caminho, como por exemplo:

# This line is a comment
title My Linux Distribution
root (hd0,0)
kernel /vmlinuz root=/dev/hda1
initrd /initrd.img

O GRUB Legacy tem um design modular, no qual módulos (geralmente armazenados como arquivos .mod em /boot/grub/i386-pc) podem ser carregados para adicionar recursos extras, como suporte a hardware incomum, sistemas de arquivos ou novos algoritmos de compactação.

Os módulos são carregados usando o comando module, seguido pelo caminho completo para o arquivo .mod correspondente. Lembre-se de que, como no caso dos kernels e imagens initrd, esse caminho é relativo ao dispositivo especificado no comando root.

O exemplo abaixo carrega o módulo 915resolution, necessário para definir corretamente a resolução da memória de imagens (frame buffer) em sistemas com chipsets de vídeo das séries Intel 800 ou 900.

module /boot/grub/i386-pc/915resolution.mod

Carregamento em cadeia de outros sistemas operacionais

O GRUB Legacy pode ser usado para carregar sistemas operacionais não suportados, como o Windows, usando um processo chamado de carregamento em cadeia (chainloading). O GRUB Legacy é carregado primeiro e, quando a opção correspondente é selecionada, o gerenciador de inicialização do sistema desejado é carregado.

Uma entrada típica para o carregamento em cadeia do Windows seria semelhante a esta:

# Load Windows
title Windows XP
root (hd0,1)
makeactive
chainload +1
boot

Vamos esclarecer cada parâmetro. Como anteriormente, root (hd0,1) especifica o dispositivo e a partição em que o gerenciador de inicialização do sistema operacional que queremos carregar está localizado. Neste exemplo, a segunda partição do primeiro disco.

makeactive

define um sinalizador indicando que esta é uma partição ativa. Funciona apenas em partições primárias do DOS.

chainload +1

diz ao GRUB para carregar o primeiro setor da partição de inicialização. É nela que costumam ficar os gerenciadores de inicialização.

boot

executa o gerenciador de inicialização e carrega o sistema operacional correspondente.

Exercícios Guiados

  1. Qual é o local padrão do arquivo de configuração do GRUB 2?

  2. Quais são as etapas necessárias para alterar as configurações do GRUB 2?

  3. Em qual arquivo devem ser adicionadas as entradas de menu personalizadas do GRUB 2?

  4. Onde são armazenadas as entradas de menu do GRUB Legacy?

  5. Como podemos entrar no shell do GRUB a partir de um menu do GRUB 2 ou GRUB Legacy?

Exercícios Exploratórios

  1. Imagine um usuário configurando o GRUB Legacy para inicializar a partir da segunda partição do primeiro disco. Ele escreve a seguinte entrada de menu personalizada:

    title My Linux Distro
    root (hd0,2)
    kernel /vmlinuz root=/dev/hda1
    initrd /initrd.img

    No entanto, o sistema não inicializa. O que está errado?

  2. Imagine que você tenha um disco identificado como /dev/sda com diversas partições. Que comando pode ser usado para descobrir qual a partição de inicialização em um sistema?

  3. Qual o comando para descobrir o UUID de uma partição?

  4. Considere a seguinte entrada para o GRUB 2

    menuentry "Default OS" {
        set root=(hd0,1)
        linux /vmlinuz root=/dev/sda1 ro quiet splash
        initrd /initrd.img
    }

    Altere-a para que o sistema inicialize a partir de um disco com o UUID 5dda0af3-c995-481a-a6f3-46dcd3b6998d

  5. Como configurar o GRUB 2 para aguardar 10 segundos antes de inicializar a entrada de menu padrão?

  6. Em um shell do GRUB Legacy, quais são os comandos para instalar o GRUB na primeira partição do segundo disco?

Resumo

Nesta lição aprendemos

  • O que é um carregador de inicialização.

  • As diferenças entre o GRUB Legacy e o GRUB 2.

  • O que é uma partição de inicialização e qual seu conteúdo.

  • Como instalar o GRUB Legacy e o GRUB 2.

  • Como configurar o GRUB Legacy e o GRUB 2.

  • Como adicionar entradas de menu personalizadas ao GRUB Legacy e ao GRUB 2.

  • Como interagir com a tela de menu e o console do GRUB Legacy e do GRUB 2.

  • Como inicializar um sistema a partir de um shell do GRUB Legacy, do GRUB 2 ou do shell de resgate.

Os seguintes comandos foram abordados nesta lição:

  • grub-install

  • update-grub

  • grub-mkconfig

Respostas aos Exercícios Guiados

  1. Qual é o local padrão do arquivo de configuração do GRUB 2?

    /boot/grub/grub.cfg

  2. Quais são as etapas necessárias para alterar as configurações do GRUB 2?

    Efetuar as alterações no arquivo /etc/default/grub, depois atualizar a configuração com update-grub.

  3. Em qual arquivo devem ser adicionadas as entradas de menu personalizadas do GRUB 2?

    /etc/grub.d/40_custom

  4. Onde são armazenadas as entradas de menu do GRUB Legacy?

    /boot/grub/menu.lst

  5. Como podemos entrar no shell do GRUB a partir de um menu do GRUB 2 ou GRUB Legacy?

    Pressionando c na tela de menu.

Respostas aos Exercícios Exploratórios

  1. Imagine um usuário configurando o GRUB Legacy para inicializar a partir da segunda partição do primeiro disco. Ele escreve a seguinte entrada de menu personalizada:

    title My Linux Distro
    root (hd0,2)
    kernel /vmlinuz root=/dev/hda1
    initrd /initrd.img

    No entanto, o sistema não inicializa. O que está errado?

    A partição de inicialização está incorreta. Lembre-se de que, ao contrário do GRUB 2, o GRUB Legacy conta as partições a partir de zero. Portanto, o comando correto para a segunda partição do primeiro disco seria root (hd0,1).

  2. Imagine que você tenha um disco identificado como /dev/sda com diversas partições. Que comando pode ser usado para descobrir qual a partição de inicialização em um sistema?

    Use fdisk -l /dev/sda. A partição de inicialização estará marcada na lista com um asterisco (*).

  3. Qual o comando para descobrir o UUID de uma partição?

    Use ls -la /dev/disk/by-uuid/ e procure pelo UUID que aponta para a partição.

  4. Considere a seguinte entrada para o GRUB 2

    menuentry "Default OS" {
        set root=(hd0,1)
        linux /vmlinuz root=/dev/sda1 ro quiet splash
        initrd /initrd.img
    }

    Altere-a para que o sistema inicialize a partir de um disco com o UUID 5dda0af3-c995-481a-a6f3-46dcd3b6998d

    Será preciso alterar a declaração set root. Em vez de especificar um disco e uma partição, diga ao GRUB para buscar pela partição com o UUID desejado.

    menuentry "Default OS" {
        search --set=root --fs-uuid 5dda0af3-c995-481a-a6f3-46dcd3b6998d
        linux /vmlinuz root=/dev/sda1 ro quiet splash
        initrd /initrd.img
    }
  5. Como configurar o GRUB 2 para aguardar 10 segundos antes de inicializar a entrada de menu padrão?

    Adicionando o parâmetro GRUB_TIMEOUT=10 a /etc/default/grub.

  6. Em um shell do GRUB Legacy, quais são os comandos para instalar o GRUB na primeira partição do segundo disco?

    grub> root (hd1,0)
    grub> setup (hd1)

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

Próxima Lição

102.3 Controle de bibliotecas compartilhadas (102.3 Lição 1)

Ir para a próxima lição

Linux Professional Insitute Inc. Todos os direitos reservados. Visite o site dos Materiais Didáticos: https://learning.lpi.org
31/5000 Este trabalho está licenciado sob a Licença Creative Commons Atribuição-Uso Não-Comercial-NãoDerivativos 4.0 Internacional.

A LPI é uma organização sem fins lucrativos.

© 2023 O Linux Professional Institute (LPI) é um organismo de apoio aos profissionais de Open Source e referência mundial em certificação. Com mais de 200.000 pessoas certificadas, somos o principal organismo de certificação independente para Linux e Open Source do mundo. O LPI certificou profissionais de mais de 180 países, oferece exames em diversos idiomas e tem centenas de parcerias de formação em todo o globo.

Nossa missão é proporcionar oportunidades econômicas e criativas para todos, tornando universalmente acessível a certificação de conhecimentos e competências em matéria de Open Source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Entre em Contato
  • Política de Privacidade e Cookies

Encontrou um erro ou quer ajudar a aprimorar esta página? Escreva pra nós.

© 1999–2023 The Linux Professional Institute Inc. Todos os direitos reservados.