Gerenciadores de boot

Curso ministrado pelo Centro de Difusão de Tecnologia e Conhecimento no período de 13 a 19 Nov 2006.

Copyright (c) 2005, Centro de Difusão de Tecnologia e Conhecimento. É dada permissão para copiar, distribuir e/ou modificar este curso sob os termos da Licença de Documentação Livre GNU, Versão 1.1 públicada pela Free Software Foundation com a Seção Invariante Sobre o CDTC. Uma cópia da licença está inclusa na seção entitulada ¨Licença de Documentação Livre GNU¨.

Sumário

  1. Introdução
  2. LILO
  3. Configurando o LILO
  4. GRUB
  5. Configurando o GRUB
  6. Mensagens de erro no GRUB e no LILO
  7. Personalizando seu boot loader

 

Introdução

O que é um carregador de boot

O carregador de boot ou boot loader é um dos primeiros programas a serem carregados quando um computador é ligado. Esse programa é formado por alguns arquivos e programas menores que possibilitam a inicialização do sistema sistema operacional ou permitem a escolha dentre um dos sistemas instalados, caso suporte Multiboot (GRUB e LILO).

O processo de boot

Toda vez que o micro é ligado ou reiniciado o primeiro software a entrar em ação é o BIOS da placa-mãe que conta toda a memória disponível, reconhece alguns dispositivos como HD's, cdrom, gravadoras e procura algum dispositivo de boot, que tanto pode ser um cd, um disquete, um dispositivo usb, o disco rígido ou qualquer outro que a placa-mãe suporte, esse processo é chamado de POST (Power-on Self Test). No caso em que o dispositivo de boot é o disco rígido, o próximo passo é a leitura do primeiro setor do disco, chamado de MBR(Master Boot Record). Nesse setor fica o carregador , na verdade um pequeno "software" indica o BIOS a carregar o "executável" do LILO ou do GRUB em alguma parte do disco, pois o MBR tem apenas 512 bytes, 446 para esse pequeno software e 66 para a tabela de partições, onde ficam registrados algumas informações sobre as partições do disco. Após esse processo o carregador passa o controle do sistema operacional para o kernel, no caso de sistemas Unix-like, ou carrega o boot loader do outro sistema (caso do Windows).

LILO

LILO vem de Linux Loader que significa carregador do Linux. É o principal gerenciador de boot do Linux, vem como padrão em diversas distribuições. O LILO pode ser carregado através de um disquete ou de um HD, tanto IDE quanto SCSI. Ele tem suporte a Multiboot, o que permite que até dezesseis sistemas operacionais diferentes possam ser instalados na mesma máquina como, por exemplo, GNU/Linux, Windows, BSD's, SCO Unix, UnixWare, IBM OS/2, e também trabalha com a maioria dos sistemas de arquivos suportados pelo Linux. Uma simples interface gráfica permite a escolha do sistema a ser carregado e um terminal de linha de comando permite outras configurações.

GRUB

GRUB vem de Grand Unified Boot Loader que em português significa grande carregador unificado de boot. O GRUB vem substituindo o LILO em diversas distribuições devido à várias vantagens em relação a este. Ele é capaz de carregar uma grande quantidade de sistemas operacionais como GNU/Linux, GNU/Hurd, DOS, Windows(9x, ME, NT, 2000, XP), IBM OS/2, FreeBSD, NetBSD, OpenBSD, SCO UnixWare e QNX. Outra grande vantagem é o suporte a vários sistemas de arquivos ext2, ext3, ReiserFS, FAT16, FAT32, NTFS, FFS, JFS, XFS, minix e etc. Por ser capaz de carregar imagens de boot e múltiplos módulos o GRUB é o único boot loader capaz de carregar o conjunto de servidores do GNU/Hurd. Esse gerenciador de boot permite também buscar uma imagem de kernel através da rede, por cabos seriais, suporta também hd's IDE, SCSI, detecta toda a memória RAM disponível no sistema, tem interface gráfica com menu, interface de linha de comando e suporta acesso por terminais remotos.

 

LILO

LILO vem de Linux Loader que significa carregador do Linux. É o principal gerenciador de boot do Linux, vem como padrão em diversas distribuições. O LILO pode ser carregado através de um disquete ou de um HD, tanto IDE quanto SCSI. Ele tem suporte a Multiboot, o que permite que até dezesseis sistemas operacionais diferentes possam ser instalados na mesma máquina como, por exemplo, GNU/Linux, Windows, BSD's, SCO Unix, UnixWare, IBM OS/2, e também trabalha com a maioria dos sistemas de arquivos suportados pelo Linux. Uma simples interface gráfica permite a escolha do sistema a ser carregado e um terminal de linha de comando permite outras configurações.

Grande parte das distribuições Linux vem com o LILO como boot loader padrão. No momento da instalação do sistema o LILO já é instalado e configurado, inclusive reconhecendo outros sistemas pré-instalados. Caso a sua distribuição não instale o LILO e você deseje por algum motivo instalá-lo, os arquivos podem ser obtidos em uma das ftp disponíveis.

O LILO pode ser obtido nos endereços:

ftp://tsx-11.mit.edu/pub/linux/packages/lilo/

ftp://sunsite.unc.edu/pub/Linux/system/boot/lilo/

Quando a página escolhida for carregada vão aparecer vários arquivos referentes ao LILO, escolha algo como lilo-<n>.tar.gz, onde n é a versão (procure escolher sempre a versão mais recente).

Para usuários da distribuições Debian ou derivadas que contenham a ferramenta apt, basta executar os seguintes comandos no terminal:

Para logar como usuário root:

#su

Para baixar e instalar o lilo:

#apt-get install lilo

O passo seguinte é digitar o comando

#liloconfig

no terminal, para gerar o arquivo de configuração. Por último execute o comando lilo:

#lilo

Outra maneira de instalar é obtendo um pacote de instalação do LILO, esse deve ser desempacotado abrindo o terminal e digitando o comando:

#tar -xvf lilo-<versão>.tar.gz

Um diretório com o nome lilo-<versão> será criado com todos os arquivos de instalação. Ainda no terminal entre no novo diretório criado:

#cd /home/nomedousuario/lilo-<versão>

e dê os seguintes comandos:

#make 

(este comando compila o programa e monta todas as partes)

Depois dê o comando:

#make install

(este comando copia todos os arquivos do LILO para os diretórios onde eles deverão estar instalados. O diretório /sbin deve conter o arquivo lilo, o diretório /usr/sbin deve conter keytab-lilo)

Agora o LILO está quase pronto, basta dar os comandos:

#liloconfig
#lilo

Caso ocorra algum problema com o seu LILO, use um disquete de inicialização ou o cd de instalação da sua distribuição para dar o boot no sistema ou então use um live cd de qualquer distribuição. Logue como root e dê o comando para criar o diretório para o ponto de montagem:

#mkdir /mnt/root

Agora será necessário montar a partição onde estão localizadas as pastas /sbin e /etc:

#mount /dev/hdax /mnt/root

Observe que x representa a partição onde se encontram os diretórios citados (se esses diretórios se encontram em um segundo HD então deve-se usar hdbx).

Agora, o LILO será reinstalado no MBR com o comando:

#/mnt/root/sbin/lilo -C /mnt/root/etc/lilo.conf -m /mnt/boot/map

Após esse procedimento é só reiniciar o computador.

 

Configurando o LILO

O LILO tem um arquivo de configuração chamado de lilo.conf onde ficam guardadas as informaçõess que serão passadas na inicialização. Segue abaixo um exemplo desse arquivo (As linhas com o símbolo "#" no começo são apenas comentários).

#Lilo.conf

#Seção global do LILO
lba32
boot=/dev/hda
map=/boot/map
compact
delay 20
timeout 50
prompt
vga=0x317
default=Linux2.6.12.3

#Seção de imagens do LILO
#Imagem do Linux
image=/boot/Linux2.6.12.3
label=Linux2.6.12.3
root=/dev/hda1
read-only

#Imagem do Windows
other=/dev/hda2
table=/dev/hda
label=Wndows
#Fim do arquivo

O arquivo fica localizado em /etc/lilo.conf e para alterá-lo o usuário deve estar logado como root. A seção global do arquivo tem as configurações gerais, como local de instalação, modo de tela, tempo de espera até carregar o sistema default, e etc. A seção de imagens diz respeito a configuração de cada partição, a seção Linux, por exemplo, diz respeito a instalação do Linux feita na primeira partição do primeiro disco. Após cada mudança no arquivo lilo.conf o LILO deve ser atualizado com o comando lilo no terminal.

O LILO permite várias configurações globais que podem ser definidas pela linha de comando, mas é mais conveniente gravar essas configurações no arquivo para que sempre que iniciado o sistema elas estejam disponívies. Segue abaixo algumas dessas configurações.

Existem também outras configurações globais mais avançadas, a descrição está disponível no manual do LILO que pode ser encontrado em /usr/share/doc/lilo/Manual.txt.gz.

Cada imagem de sistema no LILO pode ter suas próprias opções, segue a lista destas.

Mais configuraçõs podem ser vistas na documentação do LILO.

As opções de imagem do kernel podem ser colocadas em cada imagem ou podem ser colocadas nas configurações globais, neste caso as opções serão aplicadas em todas as imagens.

Mais opções podem ser consultadas no manual.

 

GRUB

GRUB vem de Grand Unified Boot Loader que em português significa grande carregador unificado de boot. O GRUB vem substituindo o LILO em diversas distribuições devido à várias vantagens em relação a este. Ele é capaz de carregar uma grande quantidade de sistemas operacionais como GNU/Linux, GNU/Hurd, DOS, Windows(9x, ME, NT, 2000, XP), IBM OS/2, FreeBSD, NetBSD, OpenBSD, SCO UnixWare e QNX. Outra grande vantagem é o suporte a vários sistemas de arquivos ext2, ext3, ReiserFS, FAT16, FAT32, NTFS, FFS, JFS, XFS, minix e etc. Por ser capaz de carregar imagens de boot e múltiplos módulos o GRUB é o único boot loader capaz de carregar o conjunto de servidores do GNU/Hurd. Esse gerenciador de boot permite também buscar uma imagem de kernel através da rede, por cabos seriais, suporta também hd's IDE, SCSI, detecta toda a memória RAM disponível no sistema, tem interface gráfica com menu, interface de linha de comando e suporta acesso por terminais remotos.

Como o GRUB é um programa muito grande para caber no MBR (512 bytes), ele é dividido em duas ou três imagens, stage1, stage1.5 e stage2. O stage1 fica no MBR a sua única função é carregar o stage1.5 ou uma parte do stage2 pois o stage1 não entende nenhum sistema de arquivos. O stage 1.5 é muito pequeno e fica nos primeiros bytes do disco logo após o MBR (esse espaço geralmente não é utilizado), esse é um estágio opcional e tem como função carregar o stage2. Por fim, o stage2, caso tenha sido carregado pelo stage1, carrega o restante de si e faz o resto dos procedimentos, mostra ou não o menu com os sistemas operacionais disponíveis, carrega na memória o núcleo do sistema operacional escolhido e passa o controle para este (ou passa o controle para outro carregador como no caso do Windows).

Para mais informações sobre o procedimento de inicialização consultar o manual do GRUB: http://www.gnu.org/software/grub/manual/html_node/

A maneira como o GRUB chama os discos e as partições é um pouco diferente do Linux, enquanto este chama a primeira partição do primeiro disco de hda1, o GRUB se refere a ela como (hd0,0), e assim segue:

Linux GRUB
/dev/hda1 (hd0,0)
/dev/hdb2 (hd1,1)
/dev/hda2 (hd0,1)
/dev/sda1 (hd0,0)
/dev/sda2 (hd0,1)
/dev/fd0 (fd0)

Para fazer referência a um endereço usamos o mesmo padrão, hda1/dev -> (hd0,0)/dev.

Se a sua distribuição tem o GRUB como boot loader padrão ele será instalado e configurado no momento da instalação do sistema, inclusive reconhecendo outros sistemas pré-instalados. Caso a sua distribuição não instale o GRUB e você deseje por algum motivo instalá-lo, os arquivos podem ser obtidos na ftp disponível.

O GRUB pode ser obtido no endereço:

ftp://alpha.gnu.org/gnu/grub/

Quando a página escolhida for carregada vão aparecer vários arquivos referentes ao GRUB, escolha algo como grub-<n>.tar.gz, onde n é a versão (procure escolher sempre a versão mais recente, no momento da construção dessa lição a mais recente era a 0.97).

Existem algumas maneiras diferentes de instalar o GRUB. Para usuários da distribuição Debian ou derivadas que contenham a ferramenta apt, basta executar os seguintes comandos no terminal:

Logue como superusuário

#su

Em seguida dê o comando para fazer o download e instalar o grub:

#apt-get install grub

Depois de baixado e instalado devemos criar o diretório onde ficarão os arquivos necessários:

#mkdir /boot/grub 

Ainda no terminal como root dê o comando

#update-grub

para criar o arquivo de configuração menu.lst automaticamente. O último passo é instalar o GRUB no MBR:

#grub-install /dev/hda.

Uma outra forma é obtendo o pacote com os arquivos de instalação e executando os seguintes comandos no terminal:

#tar -xvf grub-<versão>.tar.gz

No novo diretório criado (grub-<versão>):

#./configure

#make

#make install

A partir desses comandos vão ser instalados o interpretador do GRUB (grub), o verificador de Multiboot (mbchk), as imagens do GRUB e também o manual contendo diversas informações. Agora é só seguir os seguintes passos como usuário root:

#mkdir /boot/grub 

Ainda no terminal como root dê o comando

#update-grub

para criar o arquivo de configuração menu.lst automaticamente. O último passo é instalar o GRUB no MBR:

#grub-install /dev/hda.

É possível também a instalação do grub num disquete para isso execute os seguintes comandos no terminal com um disquete no drive:

#mke2fs /dev /fd0
#mount /dev/fd0 /floppy -t ext2
#mkdir /floppy/grub
#cp /boot/grub/stage1 /floppy/grub
#cp /boot/grub/stage2 /floppy/grub
#cp /boot/grub/menu.lst /floppy/grub
#umount /floppy

Agora entre no terminal do GRUB:

#grub

Digite:

grub>install (fd0)/grub/stage1 d (fd0) (fd0)/grub/stage2 p (fd0)/grub/menu.lst
grub>quit

Depois disso o grub está instalado no disquete, qualquer problema que ocorrer é só dar o boot pelo disquete para acessar o seu sistema operacional.

Uma outra maneira de recuperar o grub é dando o boot no sistema a partir de um live cd de qualquer distribuição e como root executar os comandos:

#mount /dev/hdax /mnt/hdax
#chroot /mnt/hdax
#grub-install /dev/hda

Lembrando que x representa a partição onde o sistema está instalado.

 

Configurando o GRUB

O arquivo de configuração do GRUB é o menu.lst que fica no diretório /boot/grub. Abaixo temos um exemplo desse arquivo.

 #menu.lst
timeout 30
color light-cyan/black white/blue
default 0

#imagem de boot do Linux
title Linux 2.4.21
root (hd0,1)
kernel (hd0,1)/boot/vmlinuz-2.4.21

#imagem de boot do FreeBSD
title FreeBSD
root (hd0,2,a)
kernel /boot/loader

#imagem de boot do GNU/Hurd
title GNU Hurd
root (hd0,0)
kernel /boot/gnumach.gz root=hd0s1
module /boot/serverboot.gz

#imagem de boot do winsdows
title Windows XP
rootnoverify (hd0,0)
chainloader +1
makeactive
#fim do arquivo

Para alterar o arquivo o usuário deve estar logado como root. Diferente do LILO, não é necessário reinstalar o GRUB quando o arquivo menu.lst for modificado, na próxima vez que o sistema for reiniciado as alterações já estarão aplicadas.

Há a opção de especificar o runlevel que o sistema será inicializado, basta adicionar o mesmo na linha dos parâmetros do kernel:

Para o modo single user:

kernel (hd0,0)/boot/vmlinuz-2.4.21 single

Modo console (runlevel 2):

kernel (hd0,0)/boot/vmlinuz-2.4.21 2

Boot gráfico (runlevel 5)

kernel (hd0,0)/boot/vmlinuz-2.4.21 5

Dentre os vários parâmetros que podem ser usados nas configurações globais do GRUB as mais comuns são:

As principais opções de configuração por imagem no GRUB são:
Ex.: kernel (hd0,0)/boot/vmlinuz-2.4.16
title Windows
hide (hd0,1)
unhide (hd0,0)
rootnoverify (hd0,0)
chainloader +1
makeactive

title Dos
hide (hd0,0)
unhide (hd0,1)
rootnoverify (hd0,1)
chainloader +1
makeactive


title Windows
unhide (hd1,0)
rootnoverify (hd1,0)
chainloader +1
map (hd1) (hd0)
makeactive

Isso faz com que o disco (hd1), onde esta o Windows/Dos, seja apresentado a este sistema como (hd0) "enganando" o mesmo e possibilitando o boot.

As opções de imagem do kernel são as mesmas que as do LILO, segue abaixo uma lista com algumas delas:

Mais informações sobre o GRUB podem ser encontradas no manual no endereço:

http://www.gnu.org/software/grub/manual/grub.html

 

Mensagens de erro no GRUB e no LILO

Devido a um erro acorrido durante a instalação ou algum problema na configuração dos arquivos de configuração, o LILO e o GRUB podem apresentar algumas mansagens de erro em algum dos seus estágios de carregamento e simplesmente parar de carregar. Essas mensagens dizem ao usuário o que deve estar acontecendo.

Quando o LILO é carregado, a palavra LILO é mostrada na tela. Cada letra é mostrada após uma ação ser realizada pelo programa. Se essa palavra parar em alguma letra significa que houve um erro durante a inicialização e a partir do que foi escrito podemos identificá-lo.

Se a palavra LILO aparecer na tela tudo foi executado corretamente.

O GRUB exibe suas mensagens de erro de duas formas diferentes, uma para o primeiro estágio e outra para o segundo estágio de carregamento.

Quando ocorre um erro no primeiro estágio o GRUB exibe uma mensagem compreensiva e para, o usuário deve então pressionar <CTRL>+<ALT>+<DEL> para reiniciar . Segue abaixo uma lista com os erros do estágio1.

Hard Disk Error

O estágio 2 e o 1.5 estão sendo lidos do disco, e a tentativa de determinar o tamanho e os parâmetros do disco falharam.

Floppy Error

O estágio 2 e o 1.5 estão sendo lidos de um disquete, e a tentativa de determinar o tamanho e os parâmetros do disquete falharam.

Read Error

Ocorreu um erro na leitura do disco enquanto tentava ler o estágio 2 ou 1.5

Geom Error

O local do estágio 2 ou 1.5 não está numa porção do disco suportado diretamente pelas chamadas do BIOS. Isso ocorre porque os parâmetros do BIOS foram mudados ou o disco foi removido para uma outra máquina ou para uma outra controladora, ou o GRUB não foi instalado usando a si mesmo (se isto acontecer, a versão do estágio 2 para esse erro deve ser vista).

A forma como o estágio 2 trata os seus erros é abortando a operação em questão, mostrando uma mensagem de erro na tela, e, se possível, continua a execução. A lista com os erros do segundo estágio pode ser encontrada em:

http://www.gnu.org/software/grub/manual/grub.html#Stage2-errors

Caso ocorra um erro no estágio 1.5 é mostrada uma mensagem de erro "Error número" e a execução é parada, o usuário deve então pressionar <CTRL>+<ALT>+<DEL> para reiniciar. A lista com o número dos erros é a mesma para o estágio 1.5 e para o estágio 2.

 

Personalizando seu boot loader

O GRUB e o LILO permitem algumas personalizações como mudar a cor das letras , a cor do fundo, o tamanho da tela, o nome das imagens e etc. Nessa lição será mostrado como adicionar uma imagem de fundo ao seu boot loader (chamamos de bootsplash).

O LILO permite que uma imagem de fundo apereça na tela gráfica durante a escolha do sistema operacional. A imagem a ser adicionada deve ter o tamanho 640x480, ter apenas 16 cores e estar no formato bitmap (.bmp). Essa imagem pode ser feita no GIMP ou em qualquer outro programa de criação de imagens, ou pode-se pegar uma imagem qualquer e transformá-la em 16 cores e .bmp .

Quando a imagem já estiver pronta temos que configurar o arquivo lilo.conf para que ele carregue a imagem de fundo. Devemos então adicionar os seguintes parâmetros:

bitmap=<bitmap-file>
bmp-colors=<fg>,<bg>,<sh>,<hfg>,<hbg>,<hsh>
bmp-table=<x>,<y>,<ncol>,<nrow>,<xsep>,<spill>
bmp-timer=<x>,<y>,<fg>,<bg>,<sh>

bitmap=<bitmap-file>. O campo deve ser preenchido com o endereço da imagem que será carregada.

bmp-colors=<fg>,<bg>,<sh>,<hfg>,<hbg>,<hsh>
Esse parâmetro define o valor decimal para as cores das letras que aparecerão na tela. O campo é composto por seis entradas, as três primeiras para o texto normal e as outras para o texto em destaque. Os campos <fg> e <hfg> se referem a cor da letra, <bg> e <hbg> a cor do fundo, <sh> e <hsh> a cor da sombra. Se a cor de fundo não for definida então será definido como transparente. Se a cor de sombra não for definida será usada como padrão 'none' (nenhuma).

bmp-table=<x>,<y>,<ncol>,<nrow>,<xsep>,<spill>
Esse parâmetro especifica onde aparecerá a tela de menu para a escolha do sistema operacional. <x>,<y> especificam as posições x e y em relação ao canto esquerdo superior. <ncol> é o número de colunas do menu.<nrow> é o número de entradas em cada coluna. Se mais de uma coluna é usada <sep> é o número de colunas de caracteres entre cada coluna. Os valores das cordenadas x e y devem ser acompanhados pelo sufixo 'p'.

bmp-timer=<x>,<y>,<fg>,<bg>,<sh>
Esse parâmetro é opcional, ele mostra a contagem do parâmetro 'timeout'. <x> e <y> são usados da mesma forma que em 'bmp-table', os campos <fg>,<bg>,<sh> são usados da mesma forma que em 'bmp-colors', com a diferença que <bg> deve ser especificado.

Segue abaixo um exemplo de preenchimento desses campos:

bitmap=/boot/exemplo_bootsplash.bmp
bmp-colors=6,,,3,,
bmp-table=423p,181p,1,8,19
bmp-timer=536p,453p,3,4,,

Não esqueça de dar o comando lilo -v para atualizar o LILO.

Assim como o LILO, o GRUB também permite uma imagem de fundo durante a exibição do menu gráfico. Essa imagem deve estar no formato XPixMap (.xpm), ter o tamanho 640x480, ter somente 14 cores e estar no formato do gzip (.gz).

Quando a imagem já estiver pronta temos que configurar o arquivo menu.lst para que ele carregue a imagem de fundo. Devemos então adicionar o seguinte parâmetro:

splashimage=(hdx,x)/GRUB/exemplo_splashimage.xpm.gz

Lembrando que no lugar de (hdx,x)/... deve estar a partição e o diretório onde se encontra a imagem.

Uma maneira interessante de testar as suas imagens é entrando no prompt do grub apertando 'c', depois logue na partição onde estão as imagens (root(hdx,x)) e dê o comando splashimage /GRUB/.../exemplo.xpm.gz . Depois de testadas as imagens altere o arquivo menu.lst e adicione a imagem desejada.

Para mudar as cores das fontes do menu utilizamos parâmetro color, esse percebe uma cor que pode ser uma das listadas abaixo:

O modo de usar é:

color light-gray/blue black/light-gray

Se por algum motivo for necessário desinstalar o LILO ou o GRUB você deve repor o MBR com outro boot loader, pois com o MBR vazio nenhum sistema será carregado automaticamente. Nesse curso foi ensinado como instalar o GRUB e o LILO, mas caso seja necessário instalar o carregador do Windows, você deve estar logado no Windows e no prompt digitar o comando fdisk /MBR para reinstalar o boot loader padrão do sistema no MBR. Caso esse comando não funcione e você disponha de um cd de instalação do Windows entre num prompt do DOS e digite : fixmbr.