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¨.
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 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.
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 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.
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 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
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.
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.