Migrar para GRUB 2

Transição para um novo loader de boot

As ferramentas usadas para inicializar Linux® estão mudando. Especificamente, o Grand Unified Bootloader (GRUB) está agora oficialmente apenas no modo de manutenção, e os desenvolvedores de GRUB abandonaram o GRUB original em favor de um pacote totalmente reescrito, conhecido como GRUB 2. Descubra os novos recursos de GRUB 2 e como usá-los.

Roderick W. Smith, Consultant and author

Roderick Smith author photoRoderick W. Smith é consultor e autor de dezenas de livros sobre UNIX e Linux, incluindo The Definitive Guide to Samba 3, Linux in a Windows World e Linux Professional Institute Certification Study Guide. Ele é autor do software de particionamento GPT fdisk. Atualmente, Roderick reside em Woonsocket, Rhode Island.



05/Mai/2010

Para a maioria das pessoas, os loaders de boot são o aspecto mais estimulante de um sistema operacional, mas eles são extraordinariamente importantes. Sem um loader de boot em operação, nada mais funciona. Atualmente, uma transição da ferramenta Grand Unified Bootloader (GRUB) Legacy antiga para o novo GRUB 2 está em andamento. GRUB 2 é o loader de boot padrão no Ubuntu 9.10 e uma opção na maioria das outras distribuições principais de Linux. Cedo ou tarde, outras distribuições implementarão GRUB 2 como o loader de boot padrão.

Anatomia de um loader de boot

A Figura 1 mostra o processo de boot como implementado pelo GRUB Legacy e GRUB 2. O sistema básico de entrada/saída (BIOS) está no primeiro código a ser executado no computador e armazenado no firmware do computador. O BIOS carrega o primeiro setor do dispositivo de boot e executa o código contido. No caso de um disco rígido, esse primeiro setor é também conhecido como o registro de boot mestre (MBR) e contém o primeiro estágio do loader de boot e a tabela de partições do MBR. Como a maioria dos dispositivos de disco usa um tamanho de setor de 512 bytes, o código do loader de boot de primeiro estágio deve ser muito pequeno. A maioria dos loaders de boot, incluindo GRUB Legacy e GRUB 2, coloca código adicional em todas as partes do disco. No caso de GRUB Legacy, esse código adicional é conhecido como stage 1.5 e é geralmente colocado em uma área não alocada imediatamente após o MBR. Mais código, conhecido como stage 2, ainda é armazenado nos arquivos na partição de boot de Linux (geralmente no diretório /boot), embora a Figura 1 omita esses arquivos para fins de simplicidade. Da mesma forma, em uma configuração com vários sistemas operacionais, o loader de boot secundário pode armazenar arquivos de configuração adicionais em qualquer lugar.

Figura 1. GRUB e GRUB 2 consistem em vários subcomponentes carregados e executados em sequência
Block diagram of the boot process used by GRUB and GRUB 2; several subcomponents are loaded and run in squence

GRUB 2 é similar a GRUB Legacy de maneira geral, mas elimina stage 1.5 e implementa uma abordagem de configuração modular em que o código para manipular vários sistemas de particionamento, sistemas de arquivos e outras extensões é armazenado em arquivos de disco — geralmente, em /boot/grub.

As variantes na configuração que acabaram de ser descritas são possíveis com GRUB Legacy e GRUB 2. Por exemplo, é possível instalar o código de stage 1 de GRUB em um setor da primeira partição de boot Linux em vez de no MBR. Usado dessa forma, outro loader de boot reside no MBR, e o menu de GRUB aparece somente quando esse loader de boot carrega GRUB em cadeia. Devido à Extensible Firmware Interface (EFI), que provavelmente deve substituir o BIOS como o firmware de PC padrão, fornece um boot de loader padrão, uma configuração similar a essa está disponível para GRUB 2 nos sistemas baseados em EFI.

Se quiser substituir GRUB Legacy por GRUB 2 em um sistema em funcionamento, será preciso instalar um novo pacote GRUB 2, configurar seus arquivos e executar um comando especial para que GRUB 2 substitua o MBR de GRUB Legacy existente e o código oculto especial pelos equivalentes de GRUB 2. Se estiver mudando para GRUB 2 por estar instalando uma nova distribuição que use GRUB 2 como o seu loader de boot padrão, você não precisará lidar com estas etapas. Em qualquer um dos casos, é preciso entender o novo formato do arquivo de configuração GRUB 2 e também os novos recursos gerais do loader de boot.


Melhorias de GRUB 2

Para sistemas somente Linux, GRUB Legacy lida com a tarefa do loader de boot perfeitamente bem. O motivo da transição está parcialmente relacionado ao desenvolvimento do loader de boot. GRUB Legacy tem código que os desenvolvedores consideram confuso e que não pode ser mantido. Para adicionar novos recursos, eles optam por reescrever o loader de boot do zero em vez de criá-lo em uma base Como uma questão prática para administradores de sistema, GRUB 2 oferece suporte a vários recursos que são importantes agora ou que podem se tornar importantes no futuro:

  • Suporte às plataformas. GRUB Legacy funciona somente em sistemas x86 e x86-64. GRUB 2 se destina a funcionar em uma gama mais ampla de arquiteturas, embora a documentação sobre como usá-la em qualquer coisa que não seja x86 ou x86-64 seja escassa. Entretanto, não funciona em sistemas PowerPC® e Scalable Process Architecture (SPARC).
  • Suporte a firmware. GRUB 2 oferece suporte a tipos de firmware adicionais, incluindo BIOS, EFI e OpenFirmware. Assim como o suporte para CPUs incomuns, pelo menos algum suporte para firmware incomum está presente, mas é preciso considerá-lo altamente experimental.
  • Tabelas de partição. Oficialmente, GRUB Legacy oferece suporte apenas ao esquema de particionamento antigo do MBR. Entretanto, a maioria das distribuições Linux vem com versões de GRUB Legacy que incorporam suporte de GUID Partition Table (GPT) não oficial. GRUB 2 inclui suporte de GPT oficial.
  • RAID e LVM. GRUB Legacy não suporta configurações de array redundante de discos independentes (RAID) baseado em software ou de Logical Volume Manager (LVM). Isso significa que é preciso ter pelo menos um sistema de arquivos em uma partição padrão (ou em uma configuração RAID 1) para que GRUB Legacy possa ler seus arquivos de configuração. GRUB 2 oferece suporte às formas de RAID e LVM de Linux. Dessa forma, não é possível configurar o sistema com mais nada, a não ser partições RAID ou LVM.
  • Suporte ao sistema de arquivos. Para ler arquivos de configuração, GRUB deve estar preparado para ler o sistema de arquivos em que esses arquivos estão armazenados. GRUB Legacy oferece suporte a um pouco menos do que uma dúzia de sistemas de arquivos, incluindo Second Extended Filesystem (ext2fs), File Allocation Table (FAT), Journaling File System (JFS), ReiserFS e Extents File System (XFS). Para um sistema somente Linux, o suporte a sistema de arquivos em GRUB 2 é similar ao de GRUB Legacy; contudo, GRUB 2 oferece suporte a alguns sistemas de arquivos não Linux adicionais, como Hierarchical File System Plus (HFS+) da Apple, o sistema de arquivos NTFS da Microsoft e o ZFS da Sun.
  • Suporte a Kernel. GRUB Legacy pode inicializar, diretamente, Linux, FreeBSD, NetBSD, OpenBSD e todos os sistemas operacionais que seguem a Especificação Multiboot, que inclui o kernel GNU HURD, OpenSolaris e alguns outros GRUB 2 pode inicializar diretamente todos esses kernels, mais XNU (o kernel Mac OS X e Darwin). O boot de outros sistemas operacionais, como Windows®, requer que GRUB Legacy e GRUB 2 carreguem em cadeia outro loader de boot.

Configurando GRUB 2

Se já estiver familiarizado com GRUB Legacy, você verá que o arquivo de configuração de GRUB 2 é similar em linhas gerais, mas varia em muitos detalhes. É preciso estar ciente também dos significados alternativos da configuração de GRUB 2.

Um arquivo de configuração de exemplo

O local padrão do arquivo de configuração GRUB 2 é /boot/grub/grub.cfg. Algumas distribuições Linux usam /boot/grub2/grub.cfg, permitindo instalações lado a lado de GRUB Legacy e GRUB 2. A Lista 1 mostra um arquivo de configuração GRUB 2 de amostra.

Listagem 1. Arquivo de configuração GRUB 2 de amostra
set timeout=10
set default=0

menuentry "Linux (2.6.32.2 kernel)" {
        set root=(hd1,8)
        linux /bzImage-2.6.32.2 ro root=/dev/sdb4
        initrd /initramfs-x86_64-2.6.32.2
}

menuentry "Windows 7" {
        set root=(hd1,2)
        parttool (hd0,1) hidden+
        parttool (hd1,5) hidden-
        chainloader +1
}

Se estiver familiarizado com GRUB Legacy, achará este arquivo de configuração GRUB 2 básico similar. Assim como os arquivos de configuração GRUB Legacy, o arquivo GRUB 2 começa com uma seção que define várias opções globais — nesse caso, a configuração de um valor de tempo limite de 10 segundos e a configuração da entrada no menu padrão.

O arquivo continua com uma série de entradas de menu. A forma dessas entradas é diferente daquelas de GRUB Legacy, mas a finalidade é a mesma: Cada uma define um único sistema operacional ou variante de boot, como um kernel Linux diferente. Cada entrada de menu começa com a palavra-chave menuentry seguida por um nome entre aspas, que aparece no menu GRUB 2. As opções relacionadas a essa entrada de menu aparecem entre chaves ({}).

Mudanças no arquivo de configuração

Diversas alterações entre os formatos de arquivo de configuração de GRUB Legacy e GRUB 2 merecem ser mencionadas:

  • GRUB 2 usa a palavra-chave set e um sinal de igual (=) entre os nomes das opções e seus valores. Opções equivalentes em GRUB Legacy omitem a palavra-chave set e o sinal de igual.
  • Em GRUB Legacy, as entradas de menu começam com a palavra-chave title, e o texto até o fim da linha é o título. O restante da definição de entrada do menu aparece nas seguintes linhas, sem nenhuma chave entre essa definição; uma entrada termina com o início da próxima definição de menu.
  • GRUB Legacy usa a palavra-chave kernel para especificar um kernel Linux; GRUB 2 usa linux.
  • Alguns nomes de opção mais específicos mudaram. Por exemplo, a Listagem 1 usa o novo comando parttool, que pode realizar manipulações de partição simples, na definição do Windows 7. A Listagem 1 usa esse recurso para ocultar ou revelar certas partições, de forma a controlar quais partições o Windows 7 tenta montar. Os comandos equivalentes em GRUB Legacy são hide e unhide.

Outra alteração é extremamente importante, mas não óbvia na Listagem 1: As partições são numeradas a partir de 1 em GRUB 2, ao passo que a numeração da partição começa com 0 em GRUB Legacy. Uma mudança equivalente na numeração do disco não é implementada. Assim, a primeira partição no primeiro disco é (hd0,0) em GRUB Legacy, mas a mesma partição é (hd0,1) em GRUB 2. É preciso prestar bastante atenção a esse detalhe porque é uma fonte potencial de problemas potenciais!

Usando novos recursos GRUB 2

Obviamente, GRUB 2 implementa muitos recursos novos. Alguns deles não têm muita coisa em uma instalação Linux padrão ou não afetam diretamente o arquivo de configuração. Algumas opções importantes que podem precisar de ajuste são as seguintes:

  • A natureza modular de GRUB 2 indica que é possível carregar módulos explicitamente a fim de oferecer suporte a vários recursos. A palavra-chave insmod carrega um módulo nomeado, como em insmod lvm, que carrega o suporte a LVM. Os módulos são armazenados em /boot/grub, e seus nomes de arquivo terminam em .mod. Em muitos casos, o uso explícito de insmod não é necessário porque GRUB 2 carrega automaticamente a maioria dos módulos; no entanto, pode ser preciso carregar manualmente um módulo de vez em quando.
  • GRUB 2 implementa novos recursos de script a fim de permitir a gravação de dados, a realização de ações de maneira condicional etc. Esses recursos ainda não estão bem documentados; entretanto, eles são similares a recursos de script de bash em sintaxe.

Métodos alternativos de reconfiguração de GRUB 2

Ubuntu 9.10 usa o utilitário grub-mkconfig e seus scripts correspondentes em /etc/grub.d para reescrever automaticamente o arquivo /boot/grub/grub.cfg na instalação do sistema. Esse script poderá ser executado sem o seu conhecimento após uma atualização de kernel ou algumas outras ações também. Dessa forma, é preciso ter cuidado para criar backups do arquivo grub.cfg se você realizar alterações manuais nele.

Em alguns casos, a execução deliberada de grub-mkconfig pode estar em ordem. Se tiver uma configuração padrão, mas tiver acabado de adicionar um novo kernel ao sistema, isso poderá ser suficiente para detectar o novo kernel e adicioná-lo ao seu arquivo de configuração GRUB 2.

Caso seja preciso efetuar mais alterações específicas, você poderá editar diretamente os arquivos em /etc/grub.d. Esses arquivos são na verdade scripts de bash. Cada um informa ao sistema como localizar tipos específicos de kernels ou sistemas operacionais e adicionar entradas apropriadas a /boot/grub/grub.cfg.

Um arquivo adicional conhecido como grub-mkconfig é /etc/default/grub. Esse arquivo tem os padrões globais do arquivo /boot/grub/grub.cfg final.

Terceiros escreveram algumas ferramentas e scripts para ajudar a gerenciar as instalações de GRUB 2. Um exemplo é o StartUp Manager. Essa ferramenta de interface gráfica do usuário (GUI) vem com o Ubuntu e fornece uma interface de apontar e clicar para gerenciar as instalações GRUB Legacy e GRUB 2.


Instalando e usando GRUB 2

GRUB 2, assim como GRUB Legacy, deve ser instalado uma vez. Daí em diante, o loader de boot lê seu arquivo /boot/grub/grub.cfg para apresentar o menu de boot a você. Entretanto, antes da instalação, é possível considerar o layout da partição. Após a instalação de GRUB 2, fique por dentro de alguns recursos básicos para operação de tempo de boot.

Preparando partições para GRUB 2

Nenhuma preparação especial é necessária para instalar GRUB 2 em um disco que usa o esquema de particionamento do MBR. O mesmo é tecnicamente verdadeiro para GPT; entretanto, se um disco GPT tiver uma partição de boot de BIOS, GRUB 2 armazenará código extra nessa partição. Se a partição de boot de BIOS não estiver presente, GRUB 2 usará uma lista de setores de disco correspondente a um arquivo no diretório /boot. Se você alguma vez ajustar esse sistema de arquivos, a lista de setores se tornará inválida, resultando na incapacidade de GRUB de realizar o boot. Assim, o uso de uma partição de boot de BIOS é altamente recomendado em discos GPT.

Sua partição de boot de BIOS deve ter tamanho de pelo menos 31 KB. Torná-la maior não causará nenhum prejuízo e poderá ser útil caso as necessidades de GRUB mudem no futuro. Em versões recentes de GNU Parted, é possível definir a opção bios_grub em uma partição para transformá-la em uma partição de boot de BIOS. Em GPT fdisk, altere o código de tipo de partição para EF02.

Instalando GRUB 2

Instale GRUB 2 no MBR de um disco da mesma forma que GRUB, usando o comando grub-install. (Algumas distribuições renomeiam esse comando como grub2-install.) Passe ao comando o nome do dispositivo de disco em que deseja instalá-lo — em geral, /dev/sda ou /dev/hda.

É possível normalmente instalar GRUB Legacy no setor de boot de uma partição (como /dev/sda4) digitando:

grub-install /dev/sda4

(alterando o nome de arquivo do dispositivo da partição de acordo com a necessidade). Entretanto, isso não funciona com GRUB 2. É possível superar esse problema digitando:

grub-setup --force /dev/sda4

(alterando o nome de arquivo do dispositivo de acordo com necessidade); entretanto, esse método nem sempre funciona.

Uso de GRUB 2 no tempo de execução

Durante o uso normal, GRUB 2 tem funcionamento muito parecido com GRUB Legacy: Quando o computador é inicializado, logo após o BIOS realizar suas verificações, aparece um menu de sistema operacional e opções de kernel. Selecione uma opção de boot usando as teclas de seta e pressione Enter. Caso nada seja selecionado, o padrão poderá ser inicializado, dependendo das opções do arquivo de configuração.

Se uma entrada não funcionar, será possível efetuar uma mudança única nela usando o modo de edição GRUB 2. Em vez de pressionar a tecla Enter para inicializar uma entrada, pressione a tecla E para editá-la. Você verá um editor simples que aceita opções de edição semelhantes a Emacs. Quando terminar, pressione Ctrl-X para inicializar sua entrada alterada.

Se GRUB 2 não conseguir localizar seu arquivo de configuração, ele apresentará um prompt grub>. É possível digitar comandos de GRUB 2, incluindo os que você usaria em uma entrada de menu no arquivo de configuração. Se estiver familiarizado o suficiente com GRUB 2, o computador poderá ser inicializado. Infelizmente, uma descrição completa da solução de problemas usando o modo de linha de comando de GRUB 2 será várias vezes o tamanho deste artigo.


Você deverá usar GRUB 2?

Os principais motivos para se usar GRUB 2 são se você está usando uma distribuição que o instala por padrão ou se precisa de acesso a um de seus recursos incomuns, como a capacidade de inicializar diretamente um kernel XNU. Na maioria dos outros casos, GRUB 2 pouca ou nenhuma vantagem em relação a GRUB Legacy. Um caso no meio termo é o uso de GPT em um computador baseado em BIOS. GRUB 2 oferece suporte a essa configuração, mas o GRUB Legacy padrão não. As versões com correção do GRUB Legacy com suporte GPT estão disponíveis e vêm com a maioria das distribuições modernas, mas é possível que você prefira o uso de um loader de boot com suporte oficial de GPT.

O resultado é este: Se o que você já instalou já funciona, é melhor continuar usando-o. Alterar loaders de boot pode tornar um sistema não inicializável, e corrigir esse problema é algo tedioso.

Portanto, é provável que GRUB 2 substitua GRUB Legacy na evolução. Dessa forma, é possível se familiarizar com GRUB 2, apenas se estiver em um sistema de testes ou em uma máquina virtual. Cedo ou tarde, é possível que perceba que o formato do seu arquivo de configuração GRUB mudou porque a sua distribuição mudou o loader de boot. Uma pequena pesquisa avançada o ajudará a passar por essa alteração com impacto mínimo.

Recursos

Aprender

Obter produtos e tecnologias

  • StartUp Manager é uma ferramenta de configuração GRUB 2.
  • O site principal de GRUB tem documentação e links para download para GRUB Legacy e GRUB 2.
  • Avalie os produtos da IBM da forma que melhor lhe convém: Faça o download de uma versão de teste de produto, experimente um produto on-line, use um produto em um ambiente de nuvem ou passe algumas horas no SOA Sandbox aprendendo como implementar Arquitetura Orientada a Serviço de forma eficiente.

Discutir

  • Envolva-se na comunidade My developerWorks. Entre em contato com outros usuários do developerWorks enquanto explora os blogs, fóruns, grupos e wikis dos desenvolvedores.

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=487623
ArticleTitle=Migrar para GRUB 2
publish-date=05052010