Sumário
Resumo
Este capítulo descreve como configurar o GRUB, o carregador de boot usado no SUSE® Linux Enterprise Desktop. Há um módulo especial do YaST disponível para ajustar todas as configurações. Se você não estiver familiarizado com a idéia de entrar para o Linux, leia as seções a seguir para obter algumas informações de apoio. Este capítulo também descreve alguns dos problemas encontrados com freqüência durante o boot com o GRUB, bem como suas soluções.
![]() | ausência do GRUB em máquinas que usam UEFI |
|---|---|
Como rotina, o GRUB será instalado nas máquinas equipadas com um BIOS tradicional e em máquinas com UEFI (Unified Extensible Firmware Interface) que usam um CSM (Compatibility Support Module - módulo de suporte a compatibilidade). Em máquinas com UEFI sem CSM habilitado, o | |
Este capítulo trata do gerenciamento de boot e da configuração do carregador de boot GRUB. O procedimento de boot como um todo é detalhado em Capítulo 9, Inicializando e configurando um sistema Linux. Um carregador de boot representa a interface entre a máquina (BIOS) e o sistema operacional (SUSE Linux Enterprise Desktop). A configuração do carregador de boot influencia diretamente o boot do sistema operacional.
Os termos a seguir aparecem com freqüência neste capítulo e talvez precisem de alguma explicação:
A estrutura do MBR é definida por uma convenção que não depende do sistema operacional. Os primeiros 446 bytes são reservados para o código do programa. Normalmente, eles contêm parte de um programa carregador de boot ou um seletor de sistema operacional. Os 64 bytes seguintes fornecem espaço para uma tabela de partição de até quatro entradas. A tabela de partição contém informações sobre o particionamento do disco rígido e sobre os tipos de sistema de arquivos. O sistema operacional precisa dessa tabela para lidar com o disco rígido. Com o código genérico convencional no MBR, exatamente uma partição deve ser marcada como ativa. Os dois últimos bytes do MBR devem conter um “número mágico” estático (AA55). Um MBR que contém um valor diferente é tido como inválido por alguns BIOS, não sendo considerado para o boot.
Os setores de boot são os primeiros setores das partições do disco rígido, com a execução da partição estendida, que serve meramente como “container” para outras partições. Esses setores de boot têm 512 bytes de espaço para o código usado para inicializar um sistema operacional instalado na partição respectiva. Isso se aplica aos setores de boot das partições DOS, Windows e OS/2 formatadas, que também contêm alguns dados básicos importantes do sistema de arquivos. Os setores de boot das partições Linux, ao contrário, ficam inicialmente vazias após a configuração de um sistema de arquivos diferente do XFS. Portanto, uma partição Linux não é inicializável por si mesma, mesmo que contenha um kernel e um sistema válido de arquivos raiz. Um setor de boot com código válido para inicializar o sistema tem o mesmo número mágico que o MBR em seus dois últimos bytes (AA55).
O GRUB (Grand Unified Bootloader) tem dois estágios. O estágio 1 consiste em 512 bytes e sua única tarefa é carregar o segundo estágio do carregador de boot. Conseqüentemente, a estágio 2 é carregado. Este estágio contém a parte principal do carregador de boot.
Em algumas configurações, um estágio intermediário 1.5 pode ser usado, que localiza e carrega o estágio 2 de um sistema de arquivos apropriado. Se possível, este método é escolhido por padrão durante a instalação ou durante a configuração inicial do GRUB com o YaST.
O estágio 2 consegue acessar vários sistemas de arquivos. Atualmente, são suportados o Ext2, Ext3, ReiserFS, Minix e o sistema de arquivos FAT do DOS usado pelo Windows. Até certo ponto, XFS, e UFS e FFS usados pelos sistemas BSD também são suportados. Desde a versão 0.95, o GRUB também pode ser inicializado de um CD ou DVD que contenha um sistema de arquivos padrão ISO 9660 que está de acordo com a especificação “El Torito”. Mesmo antes de o sistema ser inicializado, o GRUB pode acessar os sistemas de arquivos dos dispositivos de disco BIOS suportados (disquetes ou discos rígidos, unidades de CD e unidades de DVD detectadas pelo BIOS). Portanto, as mudanças realizadas no arquivo de configuração do GRUB (menu.lst) não exigem a reinstalação do gerenciador de boot. Quando o sistema é inicializado, o GRUB recarrega o arquivo de menu com os caminhos e dados de partição válidos do kernel ou do disco RAM inicial (initrd) e localiza os arquivos.
A configuração real do GRUB se baseia em quatro arquivos, que são descritos a seguir:
/boot/grub/menu.lst Esse arquivo contém todas as informações sobre partições ou sistemas operacionais que podem ser inicializados com o GRUB. Sem essas informações, a linha de comando do GRUB pergunta ao usuário como proceder (consulte a Seção 10.1.1.3, “Editando as entradas de menu durante o procedimento de boot” para obter detalhes).
/boot/grub/device.map Esse arquivo traduz os nomes dos dispositivos da notação do GRUB e do BIOS para os nomes de dispositivos Linux.
/etc/grub.conf Esse arquivo contém os comandos, os parâmetros e as opções que o shell do GRUB precisa para instalar corretamente o carregador de boot.
/etc/sysconfig/bootloader Esse arquivo é lido pela biblioteca perl-bootloader usada quando se configura o carregador de boot com o YaST e toda vez que um novo kernel é instalado. Ele contém opções de configuração (como parâmetros de kernel) que serão adicionadas por padrão ao arquivo de configuração do carregador de boot.
O GRUB pode ser controlado de várias maneiras. As entradas de boot de uma configuração existente podem ser selecionadas no menu gráfico (splash screen). A configuração é carregada a partir do arquivo menu.lst.
No GRUB, todos os parâmetros de boot podem ser mudados antes do boot. Por exemplo, os erros cometidos durante a edição do arquivo de menu podem ser corrigidos desta maneira. Os comandos de boot também podem ser inseridos de forma interativa através de um tipo de prompt de entrada (consulte Seção 10.1.1.3, “Editando as entradas de menu durante o procedimento de boot”). O GRUB oferece a possibilidade de determinar a localização do kernel e do initrd antes do boot. Dessa maneira, você pode até inicializar um sistema operacional instalado para o qual não existe entrada na configuração do carregador de boot.
Na verdade, o GRUB existe em duas versões: como carregador de boot e como programa normal do Linux em /usr/sbin/grub. O segundo é conhecido como shell do GRUB. Ele fornece uma emulação do GRUB no sistema instalado e pode ser usado para instalar o GRUB ou testar novas configurações antes de aplicá-las. A funcionalidade para instalar o GRUB como carregador de boot em um disco rígido ou em um disquete é integrada ao GRUB na forma do comando setup. Ela fica disponível no shell do GRUB quando o Linux é carregado.
A splash screen gráfica no menu de boot baseia-se no arquivo de configuração do GRUB /boot/grub/menu.lst, que contém todas as informações sobre todas as partições ou sistemas operacionais que podem ser inicializados pelo menu.
Toda vez que o sistema é inicializado, o GRUB carrega o arquivo de menu a partir do sistema de arquivos. Por esse motivo, o GRUB não precisa ser reinstalado depois de todas as modificações no arquivo. Use o carregador de boot do YaST para modificar a configuração do GRUB conforme descrito na Seção 10.2, “Configurando o carregador de boot com o YaST”.
O arquivo de menu contém comandos. A sintaxe é muito simples. Cada linha contém um comando seguido de parâmetros opcionais separados por espaços, como ocorre no shell. Por razões históricas, alguns comandos admitem um = na frente do primeiro parâmetro. Os comentários são introduzidos por um hash (#).
Para identificar os itens do menu na visão geral do menu, defina um título para cada entrada. O texto (incluindo os espaços) que vem depois da palavra-chave título é exibido como opção selecionável no menu. Todos os comandos até o próximo título são executados quando se seleciona esse item de menu.
O caso mais simples é o redirecionamento para os carregadores de boot de outros sistemas operacionais. O comando é chainloader e o argumento é geralmente o bloco de boot de outra partição na notação de bloco do GRUB. Por exemplo:
chainloader (hd0,3)+1
Os nomes de dispositivos no GRUB são explicados na Seção 10.1.1.1, “Convenções de nomeação para discos rígidos e partições”. Este exemplo especifica o primeiro bloco da quarta partição do primeiro disco rígido.
Use o comando kernel para especificar uma imagem do kernel. O primeiro argumento é o caminho para a imagem do kernel em uma partição. Os outros argumentos são passados para o kernel na linha de comando.
Se o kernel não contiver drivers internos para acesso à partição raiz ou se for usado um sistema Linux recente com recursos de hotplug avançados, o initrd deve ser especificado com um comando separado do GRUB, cujo único argumento é o caminho para o arquivo initrd. Como o endereço de carregamento do initrd é gravado na imagem do kernel carregado, o comando initrd deve vir imediatamente após o comando kernel.
O comando root simplifica a especificação do kernel e dos arquivos initrd. O único argumento de root é um dispositivo ou uma partição. Esse dispositivo é usado para todos os kernels, initrd, ou para outros caminhos de arquivo para os quais não há dispositivos explicitamente especificados até o próximo comando root.
O comando boot está implícito no fim de cada entrada do menu, assim ele não precisa ser gravado no arquivo de menu. No entanto, ao usar o GRUB de forma interativa para o boot, você deve digitar o comando boot no final. O comando em si não tem argumentos. Ele meramente inicializa a imagem do kernel carregado ou do carregador de cadeia especificado.
Depois de gravar todas as entradas de menu, defina uma delas como entrada default. Do contrário, é utilizada a primeira (entrada 0). Você também pode especificar um tempo de espera em segundos depois do qual a entrada default deve ser inicializada. timeout e default geralmente precedem as entradas de menu. Um arquivo de exemplo é descrito em Seção 10.1.1.2, “Um exemplo de arquivo de menu”.
As convenções de nomeação que o GRUB utiliza para discos rígidos e partições diferem daquelas usadas para os dispositivos Linux normais. Elas são mais parecidas com a enumeração de disco simples feita pelo BIOS, além disso, a sintaxe é semelhante à usada em alguns derivativos do BSD. No GRUB, a numeração das partições começa por zero. Isso significa que (hd0,0) é a primeira partição do primeiro disco rígido. Em uma máquina desktop comum, com um disco rígido conectado como master principal, o nome do dispositivo Linux correspondente é /dev/sda1.
As quatro partições principais possíveis são atribuídas aos números de partição de 0 a 3. As partições lógicas são numeradas a partir de 4:
(hd0,0) first primary partition of the first hard disk (hd0,1) second primary partition (hd0,2) third primary partition (hd0,3) fourth primary partition (usually an extended partition) (hd0,4) first logical partition (hd0,5) second logical partition
Sendo dependente de dispositivos BIOS, o GRUB não faz distinção entre dispositivos IDE, SATA, SCSI e RAID de hardware. Todos os discos rígidos reconhecidos pelo BIOS ou por outras controladoras são numerados de acordo com a seqüência de boot predefinido no BIOS.
Infelizmente, geralmente não é possível mapear os nomes dos dispositivos Linux de forma exata para os nomes dos dispositivos BIOS. Ele gera esse mapeamento com a ajuda de um algoritmo e o grava no arquivo device.map, que pode ser editado se necessário. Na Seção 10.1.2, “O arquivo device.map”, há informações sobre o arquivo device.map.
O caminho completo do GRUB consiste em um nome de dispositivo escrito entre parênteses e o caminho para o arquivo no sistema de arquivos na partição especificada. O caminho começa com uma barra. Por exemplo, o kernel inicializável poderia ser especificado como segue em um sistema com um disco rígido único de IDE que contém o Linux em sua primeira partição:
(hd0,0)/boot/vmlinuz
O exemplo a seguir mostra a estrutura de um arquivo de menu do GRUB. A instalação de exemplo compreende uma partição de boot do Linux em /dev/sda5, uma partição raiz em /dev/sda7 e uma instalação do Windows em /dev/sda1.
gfxmenu (hd0,4)/boot/message color white/blue black/light-gray default 0 timeout 8 title linux root (hd0,4) kernel /boot/vmlinuz root=/dev/sda7 vga=791 resume=/dev/sda9 initrd /boot/initrd title windows rootnoverify (hd0,0) chainloader +1 title floppy rootnoverify (hd0,0) chainloader (fd0)+1 title failsafe root (hd0,4) kernel /boot/vmlinuz.shipped root=/dev/sda7 ide=nodma \ apm=off acpi=off vga=normal nosmp maxcpus=0 3 noresume initrd /boot/initrd.shipped
O primeiro bloco define a configuração da splash screen:
A imagem de segundo plano message localiza-se no diretório de nível superior da partição /dev/sda5.
Esquema de cores: branco (primeiro plano), azul (segundo plano), preto (seleção) e cinza claro (segundo plano da seleção). O esquema de cores não tem efeito sobre a splash screen, apenas sobre o menu personalizável do GRUB que você pode acessar saindo da splash screen com Esc.
Por padrão, a primeira entrada do menu, title linux, é a utilizada para inicializar.
Após oito segundos sem nenhuma entrada do usuário, o GRUB inicializa automaticamente a entrada padrão. Para desativar o boot automático, apague a linha timeout. Se você definir timeout 0, o GRUB inicializará a entrada padrão imediatamente.
O segundo e maior bloco lista os vários sistemas operacionais inicializáveis. As seções para os sistemas operacionais individuais são introduzidas pelo título.
A primeira entrada (title linux) é responsável por inicializar o SUSE Linux Enterprise Desktop. O kernel (vmlinuz) localiza-se na primeira partição lógica (a partição de boot) do primeiro disco rígido. Os parâmetros do kernel, tais como a partição raiz e o modo VGA, são anexados aqui. A partição raiz é especificada de acordo com a convenção de nomeação do Linux (/dev/sda7/), pois essas informações são lidas pelo kernel e não têm nada a ver com o GRUB. O initrd também se localiza na primeira partição lógica do primeiro disco rígido.
A segunda entrada é responsável por carregar o Windows. O Windows é inicializado a partir da primeira partição do primeiro disco rígido (hd0,0). O comando chainloader +1 faz com que o GRUB leia e execute o primeiro setor da partição especificada.
A próxima entrada permite o boot a partir do disco rígido sem modificar as configurações do BIOS.
A opção de boot failsafe inicia o Linux com uma seleção de parâmetros do kernel que permite que o Linux seja inicializado nos sistemas problemáticos.
O arquivo de menu pode ser mudado sempre que for necessário. O GRUB utiliza, então, as configurações modificadas durante o próximo boot. Edite o arquivo permanentemente usando o YaST ou um editor da sua escolha. Como alternativa, faça as mudanças temporárias de forma interativa usando a função de edição do GRUB. Consulte o Seção 10.1.1.3, “Editando as entradas de menu durante o procedimento de boot”.
No menu gráfico de boot, selecione o sistema operacional a ser inicializado com as teclas de seta. Se selecionar um sistema Linux, você pode inserir parâmetros extras de boot no prompt de boot. Para editar diretamente as entradas individuais do menu, pressione Esc para sair da splash screen e entrar no menu baseado em texto do GRUB, depois pressione E. As mudanças feitas desta maneira só se aplicam ao boot atual, não sendo adotadas permanentemente.
![]() | layout do teclado durante o procedimento de boot |
|---|---|
O layout do teclado norte-americano é o único disponível na hora de inicializar. Consulte a Figura 28.3, “Layout do teclado dos EUA”. | |
Editar entradas de menu facilita o reparo de um sistema com defeito que não pode mais ser inicializado, pois o arquivo de configuração defeituoso do carregador de boot pode ser evitado ao se inserir parâmetros manualmente. A inserção manual de parâmetros durante o procedimento de boot também é útil para testar novas configurações sem danificar o sistema nativo.
Depois de ativar o modo de edição, use as teclas de seta para selecionar a entrada de menu cuja configuração deve ser editada. Para tornar a configuração editável, pressione E novamente. Dessa maneira, edite as especificações incorretas das partições ou do caminho antes que tenham um efeito negativo sobre o processo de boot. Pressione Enter para sair do modo de edição e retornar ao menu. Depois pressione B para inicializar essa entrada. No texto de ajuda da parte inferior, são mostradas mais ações possíveis.
Para inserir permanentemente as opções de boot mudadas e passá-las para o kernel, abra o arquivo menu.lst como raiz do usuário e anexe os respectivos parâmetros do kernel à linha existente, separados por espaços:
title linux
root(hd0,0)
kernel /vmlinuz root=/dev/sda3 additional parameter
initrd /initrdO GRUB adota automaticamente os novos parâmetros na próxima vez em que o sistema é inicializado. Como alternativa, essa mudança também pode ser feita com o módulo carregador de boot do YaST. Anexe os novos parâmetros à linha existente, separados por espaços.
O arquivo device.map mapeia os nomes de dispositivos GRUB e BIOS para os nomes de dispositivos Linux. Em um sistema misto que contém discos rígidos IDE e SCSI, o GRUB deve tentar determinar a seqüência de boot através de um procedimento especial, pois o GRUB não tem acesso às informações do BIOS sobre a seqüência de boot. O GRUB grava o resultado dessa análise no arquivo /boot/grub/device.map. Para um sistema no qual a seqüência de boot no BIOS é configurada como IDE antes de SCSI, o arquivo device.map poderia aparecer da seguinte forma:
(fd0) /dev/fd0 (hd0) /dev/disk-by-id/DISK1 ID(hd1) /dev/disk-by-id/DISK2 ID
Como a ordem de discos rígidos IDE, SCSI e outros depende de vários fatores, e como o Linux não consegue identificar o mapeamento, a seqüência no arquivo device.map pode ser definida manualmente. Se você encontrar problemas na hora do boot, verifique se a seqüência nesse arquivo corresponde à seqüência no BIOS e use o prompt do GRUB para modificá-la temporariamente, se necessário. Depois que o sistema Linux for inicializado, o arquivo device.map pode ser editado permanentemente com o módulo carregador de boot do YaST ou com um editor da sua preferência.
Depois de mudar manualmente o device.map, execute o seguinte comando para reinstalar o GRUB. Este comando faz com que o arquivo device.map seja recarregado e os comandos listados em grub.conf sejam executados:
grub --batch < /etc/grub.conf
O terceiro arquivo de configuração importante do GRUB, depois do menu.lst e do device.map, é o /etc/grub.conf. Esse arquivo contém os comandos, os parâmetros e as opções que o shell do GRUB precisa para instalar corretamente o carregador de boot:
setup --stage2=/boot/grub/stage2 --force-lba (hd0,1) (hd0,1) quit
Esse comando instrui o GRUB a instalar automaticamente o carregador de boot na segunda partição do primeiro disco rígido (hd0,1) usando as imagens de boot localizadas na mesma partição. O parâmetro --stage2=/boot/grub/stage2 é necessário para instalar a imagem stage2 de um sistema de arquivos montado. Alguns BIOS possuem falha na implementação do suporte a LBA. --force-lba proporciona uma solução para ignorá-la.
Esse arquivo de configuração é usado apenas ao configurar o carregador de boot com o YaST e sempre que um novo kernel é instalado. Ele é avaliado pela biblioteca perl-bootloader, que modifica o arquivo de configuração do carregador de boot (por exemplo, /boot/grub/menu.lst para o GRUB) de forma apropriada. /etc/sysconfig/bootloader não é um arquivo de configuração específico do GRUB — os valores são aplicados a qualquer carregador de boot instalado no SUSE Linux Enterprise Desktop.
![]() | configuração do carregador de boot após uma atualização de kernel |
|---|---|
Toda vez que um novo kernel é instalado, o carregador de boot perl grava uma nova configuração de carregador de boot (por exemplo, | |
LOADER_TYPE
Especifica o carregador de boot instalado no sistema (ex.: GRUB ou LILO). Não modifique, use o YaST para mudar o carregador de boot — consulte Procedimento 10.6, “Mudando o tipo de carregador de boot” para obter detalhes.
DEFAULT_VGA/FAILSAFE_VGA / XEN_VGA
A resolução de tela e a profundidade de cores do buffer de quadros usadas durante o boot são configuradas com o parâmetro de kernel vga. Esses valores definem qual resolução e profundidade de cores usar para as entradas de boot default, failsafe e XEN. Os seguintes valores são válidos:
Tabela 10.1. Referência de resolução de tela e profundidade de cores
|
640x480 |
800x600 |
1024 x 768 |
1280x1024 |
1600x1200 | |
|---|---|---|---|---|---|
|
8bit |
0x301 |
0x303 |
0x305 |
0x307 |
0x31C |
|
15bit |
0x310 |
0x313 |
0x316 |
0x319 |
0x31D |
|
16bit |
0x311 |
0x314 |
0x317 |
0x31A |
0x31E |
|
24bit |
0x312 |
0x315 |
0x318 |
0x31B |
0x31F |
DEFAULT_APPEND/FAILSAFE_APPEND/XEN_KERNEL_APPEND
Parâmetros de kernel (diferentes de vga) automaticamente anexados às entradas de boot default, failsafe e XEN no arquivo de configuração do carregador de boot.
CYCLE_DETECTION/CYCLE_NEXT_ENTRY
Configure se desejar usar a detecção do ciclo de boot e, ao fazer isso, configure também qual entrada alternativa de /boot/grub/menu.lst (ex.: Failsafe) usar no boot em caso de um ciclo de reinicialização. Consulte /usr/share/doc/packages/bootcycle/README para obter informações detalhadas.
Mesmo antes de o sistema operacional ser inicializado, o GRUB permite acesso aos sistema de arquivos. Os usuários que não têm permissões raiz podem acessar os arquivos no seu sistema Linux aos quais não têm acesso depois que o sistema é inicializado. Para bloquear esse tipo de acesso ou impedir que os usuários inicializem certos sistemas operacionais, defina uma senha de boot.
![]() | senha de boot e splash screen |
|---|---|
Se você usar uma senha de boot para o GRUB, a splash screen normal não será exibida. | |
Como a raiz do usuário, proceda da seguinte forma para definir uma senha de boot:
No prompt do root, criptografe a senha usando grub-md5-crypt:
# grub-md5-crypt Password: **** Retype password: **** Encrypted: $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/
Cole a string criptografada na seção global do arquivo menu.lst:
gfxmenu (hd0,4)/message color white/blue black/light-gray default 0 timeout 8 password --md5 $1$lS2dv/$JOYcdxIn7CJk9xShzzJVw/
Agora, só é possível executar os comandos do GRUB no prompt raiz depois de pressionar P e digitar a senha. No entanto, os usuários ainda podem inicializar todos os sistemas operacionais a partir do menu de boot.
Para impedir que um ou vários sistemas operacionais sejam inicializados a partir do menu de boot, acrescente a entrada lock em cada seção no menu.lst que não deveria ser inicializada sem se inserir uma senha. Por exemplo:
title linux kernel (hd0,4)/vmlinuz root=/dev/sda7 vga=791 initrd (hd0,4)/initrd lock
Depois de reiniciar o sistema e selecionar a entrada no Linux no menu de boot, é exibida a seguinte mensagem de erro:
Error 32: Must be authenticated
Pressione Enter para inserir o menu. Depois pressione P para obter o prompt da senha. Depois de inserir a senha e pressionar Enter, o sistema operacional selecionado (o Linux, neste caso) não deve inicializar.