O processo de boot :
Toda vez que o computador é ligado ou reiniciado o primeiro software a entrar em acção é o BIOS da placa mãe(motherboard) que conta toda a memória disponível, reconhece alguns dispositivos como HD's, cdrom, gravadores, etc e procura algum dispositivo de boot, que tanto pode ser um cd, uma 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 sector do disco, chamado de MBR(Master Boot Record). Nesse sector fica o carregador de boot(boot loader) , na verdade um pequeno "software" indica o BIOS a carregar o "executável" do boot loader 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 , isto no caso de haver mais de um sistema operativo diferente instalado no computador
Carregador de boot? (boot-loader)
O carregador de boot (boot loader) é o programa responsável de carregar o sistema operacional, permitindo escolher qual deles será inicializado, se mais de um estiver presente.
O carregador de boot é um programa normalmente residente no sector de inicialização (boot sector) da partição activa ou no registro principal de inicialização, o MBR (do inglês "Master Boot Record"), do disco rígido.
Se houver algum problema neste sector do disco, inviabiliza o arranque do PC. O MBR pode ser afectado por virus elaborados de forma especial para atacar esta zona do disco rigido, ou por sobreposição do MBR devido á instalação de outro sistema operativo. Se por exemplo instalarmos num PC o Windows+Linux(dual-boot), o primeiro a ser instalado tem de ser o Windows e depois o Linux, porque se instalarmos depois o Windows este ao contrário do outro vai subscrever o MBR de forma agressiva e deixamos de “ver” o Linux embora este continue intacto no disco. Mas como no Linux praticamente todos os problemas tem solução, é possível recuperar o MBR através do GRUB.(ler no fim como restaurar o GRUB)
O 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 gestor 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).
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--------GrubPara referir a um endereço usamos o mesmo padrão, hda1/dev -> (hd0,0)/dev. Os endereços das partições no GRUB vem sempre entre parênteses.
/dev/hda1---(hd0,0)
/dev/hdb2---(hd1,1)
/dev/hda2---(hd0,1)
/dev/sda1---(hd0,0)
/dev/sda2---(hd0,1)
/dev/fd0-----(fd0)
Outra observação é que o GRUB não faz distinção entre discos IDE e SCSI.
Se a 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.
O arquivo de configuração do GRUB é o menu.lst que fica no directório /boot/grub.
Para alterar o arquivo é necessário privilégios de root.
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
Parâmetros do Grub:
Entre os vários parâmetros que podem ser usados nas configurações globais do GRUB as mais comuns são:
->timeout = Define um tempo (em segundos) de espera. Se nenhuma tecla for pressionada, carrega o sistema operativo que está na imagem padrão.
->default Define qual será a opção padrão que deve ser automaticamente seleccionada quando nenhuma outra for especificada em um tempo definido por timeout.
->fallback Caso ocorra algum erro inesperado e a opção padrão não possa ser carregada, este parâmetro define qual a outra opção deve ser utilizada.
->color Permite escolher as cores usadas no menu de boot.
->password Permite especificar uma senha. Está será solicitada sempre que houver necessidade de realizar uma função que não seja carregar as imagens disponíveis, como por exemplo aceder a linha de comandos do GRUB.
->hiddenmenu Está opção faz com que o menu de opções não seja mostrado e dê boot na imagem especificada por "default" depois de expirado o tempo definido em timeout. O utilizador pode requisitar o menu com as opções pressionando a tecla
As principais opções de configuração por imagem no GRUB são:
->title Define um texto que será apresentado no menu de boot para identificar o sistema a ser inicializado.
->root Determina qual a partição raiz do sistema a ser inicializada.
->rootnoverify Idêntica a opção root, mas não tenta montar a partição-alvo, o que é necessário para alguns sistemas como Dos e Windows.
->kernel Nesta opção informa qual o kernel vai ser inicializado. Pode-se passar parâmetros directamente para o kernel também.
Ex.: kernel (hd0,0)/boot/vmlinuz-2.4.16
->module Faz com que algum módulo necessário para o boot seja carregado.
É de lembrar que estes não são módulos do kernel (módulos de som, rede, etc.) e sim módulos necessários ao boot de alguns sistemas, como por exemplo o GNU Hurd.
->lock Quando se quiser controlar se uma pessoa pode iniciar um sistema que esteja listado nas opções do menu de boot, pode-se utilizar esta opção que faz com que a senha especificada com o comando "password" seja solicitada no momento em que se tentar carregar a imagem em questão.
->makeactive Torna a partição activa. Este comando está limitado a partições primárias dos discos.
->chainloader Alguns sistemas como o Windows ou Dos armazenam seu próprio gestor de boot no início da partição em que ele está instalado.
Para efectuar o boot destes sistemas através do GRUB, é preciso pedir para que o gestor de boot de tal sistema seja carregado e faça seu trabalho, dando o boot.
->hide e unhide Esconde e mostra partição respectivamente. Estas duas opções são necessárias quando houver mais de uma versão do Dos ou Windows na máquina em partições diferentes, já que estes sistemas detectam automaticamente a partição e quase sempre o fazem de modo errado.
Supondo o Windows na primeira partição primária (hd0,0) e o Dos na segunda partição primária (hd0,1). Quando quisermos carregar estes sistemas devemos proceder da seguinte maneira:
title WindowsMapeamento de discos:
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
->map Alguns sistemas não permitem ser inicializados quando não estão no primeiro disco (Dos, Win 9x, etc.). Para resolver esta e outras situações o GRUB tem um comando que permite enganar tal sistema mapeando as unidades de disco do modo como lhe for mais conveniente.
Imagine que temos o primeiro disco (hd0) com o GNU/Linux instalado e em um outro disco (hd1) com o Windows/Dos instalado. O Windows/Dos não permitem serem inicializados desta forma e para resolver esse problema podemos usar a seguinte entrada no arquivo de configurações do GRUB:
title WindowsIsso faz com que o disco (hd1), onde esta o Windows/Dos, seja apresentado a este sistema como (hd0) "enganado" o mesmo e possibilitando o boot.
unhide (hd1,0)
rootnoverify (hd1,0)
chainloader +1
map (hd1) (hd0)
makeactive
Opções de imagem do kernel:
As opções de imagem do kernel são as mesmas que as do LILO, segue abaixo uma lista com algumas delas:
->append Permite passar opções adicionais ao kernel. Essa opção é usada normalmente para configurar dispositivos que não foram auto-detectados.
->read-only Faz com que o GRUB monte uma imagem somente para a leitura. (Todas as imagens do Linux devem conter essa opção).
->root Permite especificar o local que deve ser montado como root.
->vga Permite especificar como o modo texto deve ser carregado (o tamanho da tela, as letras, etc) . A opção mais utilizada é normal, se for colocada a opção ask, na hora da inicialização serão perguntadas ao usuário as configurações desejadas.
Menssagens de erro do Grub:
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 utilizador deve então pressionar ++ 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 directamente 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 no endereço:
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 ++ para reiniciar. A lista com o número dos erros é a mesmo para o estágio 1.5 e para o estágio 2
Personalizar o Grub:
Colocar uma imagem de fundo no menu de boot do
GRUB:(Ao lado imagem do menu de boot do meu GRUB)
O GRUB permite ter uma imagem de fundo durante a exibição do menu gráfico (splashimage). 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.
sudo gedit/boot/grub/menu.lstDevemos então adicionar o seguinte parâmetro:
splashimage=(hdx,x)/boot/splashimage2.xpm.gztrocando o (hdx,x) pela partição correspondente no GRUB onde se encontra a imagem.
Uma maneira interessante de testar as suas imagens é entrando no prompt do grub premindo a tecla 'c', depois entrar na partição onde estão as imagens (root(hdx,x)) e dar o comando
splashimage=(hdx,x)/boot/splashimage2.xpm.gzDepois de testadas as imagens alterar o arquivo menu.lst e adicionar a imagem desejada.
Mudar as cores das fontes do menu do Grub:
Para mudar as cores das fontes do menu utilizamos parâmetro color, esse percebe uma cor que pode ser uma das listadas abaixo:
black green blue cyan red magenta brown light-gray
O modo de usar é:
color light-gray/blue black/light-grayRestaurar o Grub no Ubuntu:
Arrancar o PC com o live-cd do Ubuntu
Listar todas as partições do disco, abrir uma consola e escrever:
sudo fdisk -lSguidamente escrever:
sudo mount /dev/hdxx /mntOnde /dev/hdxx é a partição onde o Ubuntu está instalado.
Com a partição já montada, recuperar o GRUB com o seguinte comando:
sudo grub-install --root-directory=/mnt /dev/hdxxNovamente substituindo o /dev/hdxx pela sua partição raiz do Ubuntu.
Reiniciar o computador.
Se não resultar vamos tentar recuperar o GRUB utilizando o chroot
Montar a partição do Linux abrindo uma consola, para isso escrever:
sudo chroot /mntSubstituindo o x pela letra do disco rígido.
grub-install /dev/hd
Este é particularmente útil quando se está rodando um Live CD de alguma distribuição que não possua o GRUB instalado, ou está usando o modo de recuperação do Alternate Install CD do Ubuntu.
Reiniciar o computador.
Caso as duas tentativas anteriores não resultarem, arrancar o PC com o Live-CD do Ubuntu ou outro live.cd de Linux(comigo só resultou desta maneira)
Qualquer queseja o live-cd que se use temos de nos colocar como root para podermos prosseguir,
no caso do Ubuntu, executar numa consola:
sudo passwdcriar uma palavra passe e prosseguir com o seguinte comando:
sudo grubAbrirá então a consola de comandos do Grub exibindo o prompt grub, nela executar os seguintes comandos um de ca vez:
find /boot/grub/stage1root (hdx,x)Onde (hdx,x) deve ser substituído pelo que aparece na saída do comando "find /boot/grub/stage1"
Seguidamente digitar:
setup (hd0)finalmente sair da prompt grub digitando:
quite reiniciar o computador.
Como adicionar uma entrada para o Windows no menu de boot do Grub
Temos de editar o menu.lst, para isso abrir uma consola e escrever:
cd /boot/grubvamos fazer primeiro uma cópia do ficheiro para prevenir algum engano:
sudo cp /menu.lst menu.lst_originalfinalmente editamos o ficheiro para ser modificado:
sudo gedit /boot/grub/menu.lstAssumindo que /dev/hda1 é a localização da partição Windows: Adicionar as seguintes linhas no fim do arquivo que se abre:
title Microsoft WindowsSeguidamente salvar o arquivo
root (hd0,0)
savedefault
makeactive
chainloader +1

2 comentários:
Dei com isto no debianpt ... tb já tinha feito o meu splashscreen personalizado e vim aqui ver o que se passava!
Está porreiro ... tem aqui praticamente tudo o que faz falta.
Oi gracianotorrao, é um tuto muito completo, aliás foi um dos artigos que mais trabalho me deu, tive de googlar muito para reunir toda a informação de modo a escrever um artigo completo sobre a boot em Linux, eu tb aprendi muito com ele.
Ainda bem que gostaste.
Abraço ;-)
Enviar um comentário