fbpx
Whatsapp (31) 3069-8315
atendimento@certificacaolinux.com.br
Grand Unified Boot Loader – GRUB 2

O Grub 2 é o sistema de boot padrão do Ubuntu desde a versão 9.10 e de outras distribuições com versões mais recentes, em especial no Kernel 2.6 e 3.x. Conheça o poderoso GRUB 2.

O Grub 2 foi reescrito completamente com o objetivo de permitir grande flexibilidade e ganho de performance. Dentre as diversas melhorias, as principais são:

  • Suporte a script com expressões condicionais e funções;
  • Carga de módulos de forma dinâmica;
  • Modo de Emergência (Rescue Mode);
  • Menus Personalizados;
  • Suporte a temas;
  • Suporte a menu gráfico com tela “splash”;
  • Carga de imagens ISO de Live CDs;
  • Nova estrutura do arquivo de configuração;
  • Suporte a plataforma não x86 (ex: PowerPC);
  • Suporte universal a UUIDs (Universally Unique IDentifier) – identificador usado em sistemas distribuídos.

Upgrade do Grub 1 para o Grub 2

O upgrade do Grub 1 para o Grub 2 é relativamente fácil. Primeiro deve-se instalar o pacote do Grub 2 com o comando:

# sudo apt-get install grub-pc

Depois de instalado, o Grub 2 irá apresentar um menu de teste, com as imagens de kernel encontradas e ainda possibilita que o menu seja editado.

Uma vez definido o menu, o Grub2 pode ser instalado de forma definitiva com o comando:

# sudo upgrade-from-grub-legacy /boot/grub/grub.cfg

Principais Mudanças do Grub 1 para o Grub 2

É importante que você saiba quais são as mudanças importantes do Grub 1 para o Grub 2, a saber:

  • O arquivo /boot/grub/menu.lst foi substituído pelo /boot/grub/grub.cfg;
  • O principal arquivo de configuração é o /etc/default/grub;
  • O sistema de numeração das partições foi alterado;
  • Buscas por outros sistemas operacionais são feitas de forma automática toda vez que o update-grub é executado e são colocadas no menu;

Mudanças na configuração não têm efeito até que o comando update-grub é executado.

Normalmente o /boot/grub/grub.cfg não deve ser editado manualmente pois ele é regravado em updates do pacote do Grub 2, quando um kernel é adicionado ou removido, ou o usuário aciona o comando update-grub. Este comando refaz o menu de carga a partir de outros arquivos de configuração e regrava o /boot/grub/grub.cfg.

Criar uma configuração padrão no grub

O utilitário grub-mkconfig também pode ser utilizado para criar uma configuração para o Grub:

# grub-mkconfig -o /boot/grub/grub.cfg

O principal arquivo de configuração da apresentação do menu fica localizado em /etc/default/grub.

Arquivo /etc/default/grub

Este arquivo contém as principais informações para que o Grub 2 possa montar o menu. Ele define qual será a opção padrão do menu, os tempos de espera por uma ação do usuário, se o menu será apresentado em modo gráfico ou modo texto, dentre outras opções.

Exemplo de /etc/default/grub:

GRUB_DEFAULT=0

#GRUB_SAVEDEFAULT = true

#GRUB_HIDDEN_TIMEOUT=0

GRUB_HIDDEN_TIMEOUT_QUIET=true

GRUB_TIMEOUT=10

GRUB_DISTRIBUTOR=‘lsb_release -i -s 2> /dev/null || echo Debian‘

GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”

GRUB_CMDLINE_LINUX=””

#GRUB_TERMINAL=console

#GRUB_GFXMODE=640×480

#GRUB_DISABLE_LINUX_RECOVERY=”true”

#GRUB_INIT_TUNE=”480 440 1”

Arquivo de Configuração do grub

Veja o comentário de opção do grub:

GRUB_DEFAULT

Define qual será a opção padrão do menu do Grub. O parametro GRUB_DEFAULT pode assumir um valor numérico, o nome da opção no menu ou a palavra “saved”.

Se o valor for numérico indica a posição do menu em /boot/grub/grub.cfg. Pode indicar também o nome do menu “Ubuntu 2.6.31”.

Se o valor for “saved”, o padrão será definido pelo comando grub-set-default ou grub-reboot.

GRUB_SAVEDEFAULT

Se este parâmetro for “true”, ele diz para o Grub que a opção padrão do menu será sempre o último sistema operacional selecionado no menu.  

GRUB_HIDDEN_TIMEOUT

Este parâmetro define o tempo em segundos que o Grub irá esperar por uma ação do usuário até que a opção padrão do menu seja escolhida de forma automática. Nenhum menu será apresentado, a menos que o usuário aperte alguma tecla (geralmente o ESC).

Se for igual a zero, o sistema operacional padrão irá carregar de forma automática sem esperar por nenhuma intervenção.

GRUB_HIDDEN_TIMEOUT_QUIET

Quando esta opção for “true”, nenhum contador de tempo será apresentado. Se for “false”, um contador decrescente será apresentado com o tempo definido em GRUB_HIDDEN_TIMEOUT.

GRUB_TIMEOUT

Esta opção somente será efetiva se a diretiva GRUB_HIDDEN_TIMEOUT estiver comentada, ou se ativa, quando o usuário pressionar alguma tecla durante o tempo de espera do GRUB_HIDDEN_TIMEOUT.

O GRUB_TIMEOUT define o tempo de espera do menu até que o usuário faça sua escolha. Caso contrário, irá executar a opção padrão.

Se o valor for -1, o Grub irá esperar pelo usuário indefinidamente.

GRUB_DISTRIBUTOR

Determina a descrição do sistema que será usada no menu. Se nada for definido, o Grub utilizará o padrão do sistema, que geralmente é definido pelo comando:

# lsb_release -i -s 2> /dev/null || echo Debian

 SUSE LINUX

GRUB_CMDLINE_LINUX_DEFAULT

Essa diretiva passa parâmetros para o Kernel durante a carga normal do sistema.

GRUB_CMDLINE_LINUX

Essa diretiva passa parâmetros para o Kernel durante a carga do sistema, tanto para carga normal do kernel ou em modo “recovery”.

GRUB_TERMINAL

Esta opção, se for descomentada, desabilita o menu em modo gráfico.

GRUB_GFXMODE

Define a resolução do terminal gráfico do menu.

GRUB_DISABLE_LINUX_RECOVERY

Desabilita o modo de emergência do Kernel se for igual a “true”.

GRUB_INIT_TUNE

Define um “som” que o grub fará antes de apresentar o menu. O formato é[tom da nota] [duração].

Exemplo: Tema de Contatos imediatos de Terceiro Grau:GRUB_INIT_TUNE=”480 900 2 1000 2 800 2 400 2 600 3”

O diretório /etc/grub.d

Os scripts deste diretório são lidos durante a chamada do comando update-grub e suas instruções são incorporadas no arquivo /boot/grub/grub.cfg.

A ordem dos itens no menu do grub é determinada pela ordem dos scripts neste diretório. Os arquivos são lidos de acordo com o numeral que precede seu nome, em ordem crescente.

00_header

Configura os parâmetros iniciais, como o modo gráfico, opção do menu padrão. Estas configurações geralmente são importadas do /etc/default/grub.

05_debian_theme

Configura a tela de fundo, cores do texto, etc.

10_hurd

Usado para localizar Kernels Hurd. Não é utilizado na maioria das distribuições.

10_linux

Identifica os Kernels no dispositivo raiz e cria os itens do menu. Todas as imagens de kernel existentes no /boot serão colocadas no menu.

20_memtest86+

Procura pela imagem em  /boot/memtest86+.bin usado para teste de memória. Para remover esse item, é necessário remover a imagem no diretório /boot.

30_os-prober

Este script procura pelo Linux e outros sistemas operacionais existentes no disco e cria os itens do menu. As variáveis neste arquivo determinam como os nomes irão aparecer no menu.

40_custom

Permite adicionar entradas customizadas no menu do grub.

As configurações são geralmente feitas no arquivo /etc/default/grub.
Não é comum editar diretamente os scripts do diretório /etc/grub.d.
Qualquer alteração feita no /boot/grub/grub.cfg é regravada quando o comando update-grub é executado.

Sequência de Carga do Sistema

O grub2 é executado antes de qualquer sistema operacional. Ele geralmente fará a carga direta do sistema operacional definindo como padrão ou se houver apenas um sistema operacional presente.

Se houver mais de um sistema operacional, ele irá apresentar o menu para escolha.

O tempo padrão de espera do menu é de 10s. Se o usuário não fizer nada, ele irá iniciar a carga da opção padrão do menu.

A contagem do tempo pode ser paralisada se qualquer tecla for pressionada. O usuário pode forçar a apresentação do menu pressionando a tecla SHIFT durante a carga do grub2.

Nomes das Partições no Grub 2

O sistema de nomear as partições no grub2 foi simplificado em relação ao grub1. A contagem dos dispositivos permanece iniciando de zero.

Um dispositivo sda será nomeado de hd0, bem como um dispositivo sdb será chamado hd1. No entanto as partições seguem a numeração “normal”, de forma que a partição sda5 será nomeada como hd0,5  e sda3 será hd0,3.

Aprenda muito mais sobre Linux em nosso curso online. Você pode fazer a matrícula aqui com trial de 7 dias grátis. Se você já tem uma conta, pode acessar aqui.

Gostou? Compartilhe 🙂

Lidando com o GRUB 1 (legacy) no Linux

Os gerenciadores de boot são programas que carregam o Kernel do Linux e até permitem a escolha de um outro sistema operacional. O principal gerenciador de boot do Linux é o GRUB e existem duas versões.

Logo após os testes de hardware realizados pela BIOS, o computador procura no setor de boot da partição ativa ou no Master Boot Record – MBR um pequeno software para iniciar a carga do sistema operacional.

Grand Unified Boot Loader (GRUB – 1)

A maioria das distribuições já adota o GRUB 1 como gerenciador padrão. Ele é flexível, funcional e poderoso, podendo carregar sistemas operacionais como o Windows (9x, ME, NT, 2000 e XP), DOS, Linux, GNU Hurd, *BSD, OS/2 e outros.

O GRUB 1 também permite buscar imagens do Kernel pela rede, por cabo serial, suporta discos rígidos IDE, SATA, PATA e SCSI e tem interface voltada para a linha de comandos ou menus. Suporta sistemas sem discos e terminais remotos.

Como possui inúmeros recursos, será apresentada sua utilização básica, o suficiente para você passar no exame, ficando como sugestão ao leitor procurar se aprofundar mais em suas possibilidades de uso e configuração.

A notação dos dispositivos de disco utilizada pelo GRUB 1 difere um pouco do usual, de forma que o nome dos discos sempre serão “hd”, seguidos da numeração do disco iniciando por zero, seguidos do número da partição, iniciando também do zero.

Veja a tabela comparativa:

Notação de discos no Grub 1

Notação no Linux Notação no Grub 1
/dev/hda (hd0)
/dev/hda1 (hd0,0)
Notação no Linux Notação no Grub 1
/dev/hda2 (hd0,1)
/dev/hdb (hd1)
/dev/hdb1 (hd1,0)
/dev/hdb2 (hd1,1)
/dev/sda (hd0)
/dev/sda1 (hd0,0)
/dev/sda2 (hd0,1)
/dev/sdb (hd1)
/dev/sdb1 (hd1,0)
/dev/sdb2 (hd1,1)
/dev/fd0 (fd0)

Não há distinção entre os discos IDE e SCSI. Ambos são referenciados como (hd?) pelo GRUB.

Nativamente o GRUB não suporta EFI em versões anteriores ao kernel 3.30.

O GRUB possui um arquivo de configuração chamado /boot/grub/menu.lst. Algumas distribuições como Fedora, RedHat e Gentoo preferem utilizar grub.conf ao invés de menu.lst.

Este arquivo é dividido em parâmetros Globais, que afetam o GRUB e parâmetros que só têm efeito para as imagens do sistema que será carregado.

Parâmetros do grub.conf

Vejamos os parâmetros globais:

  • timeout: Define um tempo (em segundos) de espera para o prompt ou menu. Se nenhuma intervenção do usuário for feita no boot, o GRUB 1 carrega a imagem padrão;
  • default: Define qual será a imagem padrão que será carregada se nenhuma outra for selecionada;
  • fallback: Caso ocorra algum erro inesperado e a opção padrão não possa ser carregada, este parâmetro define qual outra imagem deve ser utilizada;
  • color: Permite que você escolha as cores usadas no menu de boot;
  • password: Permite que você especifique uma senha para qualquer ação que não seja carregar as imagens disponíveis. Por exemplo, acessar a linha de comandos do GRUB 1;
  • hiddenmenu: Esta opção faz com que o menu de opções não seja mostrado e que a carga da imagem especificada pela linha “default” seja carregada. O usuário pode requisitar o menu com as opções pressionando a tecla <ESC> antes que o tempo definido em timeout expire.

Parâmetros que afetam apenas as imagens:

  • title: Define um texto que será apresentado no menu de boot para identificar o sistema;
  • root: Determina qual é a partição raiz de uma determinada imagem;
  • rootnoverify: Idêntica à opção root, mas não tenta montar a partição raiz. Utilizada para alguns sistemas como o Microsoft Windows;
  • kernel: Esta opção informa qual imagem de Kernel vai ser carregada. Alguns parâmetros do Kernel podem ser passados;
  • module: Faz com que algum módulo necessário para o boot seja carregado. Lembre-se 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 o GNU Hurd;
  • lock: Bloqueia a carga da imagem do Kernel por senha. A senha precisa ser especificada com a opção password;
  • makeactive: Torna a partição ativa para boot. Este comando está limitado a partições primárias dos discos;
  • chainloader: Especifica a localização do gerenciador de boot de outros sistemas operacionais. Alguns sistemas, como o Microsoft Windows, armazenam seu próprio gerenciador de boot no início da partição onde estão instalados.

O GRUB 1 tem muitas opções disponíveis. Fica a sugestão para o leitor ler mais sobre este gerenciador de boot utilizando o comando info grub na linha de comandos do Linux.

O Utilitário grub-install

Uso:

# /sbin/grub-install opções partição

Este comando instala o GRUB 1 como gerenciador de boot no MBR do primeiro disco e cria o diretório /boot/grub. Este diretório contém os arquivos necessários para o seu funcionamento.

As opções mais frequentes são:

  • — root-directory=diretório: Esta opção instala o GRUB 1 em diretório que não seja o raiz. É útil para instalá-lo em outras partições;
  • — recheck: Esta opção checa novamente o mapa de dispositivos em /boot/grub/device.map. É útil quando um novo disco for acrescentado ou retirado do sistema.

Conheça o Menu.lst

Veja abaixo um arquivo exemplo do menu.lst:

timeout 30

default 0

fallback 1

color light-cyan/black white/blue

password minha-senha-secreta

title GNU/Hurd

root (hd0,0)

kernel /boot/gnumach.gz root=hd0s1

module /boot/serverboot.gz

title Linux 3.14.16

lock

root (hd0,0)

kernel (hd0,0)/boot/vmlinuz-3.14.16 vga=6 mem=512M radisk=0

title FreeBSD 3.4

root (hd0,2,a)

kernel /boot/loader

title Windows 9x, ME, NT, 2000, XP

unhide (hd0,0)

rootnoverify (hd0,0)

chainloader +1

makeactive

root = (hd0,0)

setup = (hd0)

O GRUB 1 também possui um shell especial que aceita todas as opções do arquivo de configuração menu.lst e muitas outras. É uma poderosa ferramenta de configuração do gerenciador de boot.

Sem dúvida o código livre está sendo o grande rival das empresas que produzem software “proprietário”.

Aprenda muito mais sobre Linux em nosso curso online. Você pode fazer a matrícula aqui com trial de 7 dias grátis. Se você já tem uma conta, pode acessar aqui.

Gostou? Compartilhe 🙂

Processo de Carga do Linux

Entenda como funciona os gerenciadores de Boot no Linux

Qualquer computador PC quando ligado inicia uma série de ações complexas de teste de hardware programada por uma memória especial chamada de BIOS.

Esta memória tem a função de dar a partida na máquina, reconhecendo os dispositivos instalados e realizando a carga do sistema operacional.

Durante o boot, o BIOS realiza uma série de testes, cuja função é determinar com exatidão os componentes de hardware instalados no sistema. Este teste é chamado de POST (power-on self test).

É através do POST que o computador busca informações dos números e dos tipos de placas, drives de cd-rom, HDs, portas seriais, paralelas e USBs, monitor, mouse, teclado, etc.

Logo depois dos testes de hardware, a BIOS procura nos dispositivos de discos rígidos e CD-ROM um endereço especial chamado de setor de boot.

Nas placas mães que adotam o sistema EFI ou UEFI, o processo de carga do sistema operacional envolve ler um arquivo especial de carga à partir de um sistema de arquivo em uma partição especial chamada EFI System Partition (ESP).

Esta partição especial usa o formato da FAT (File Allocation Table). No Linux é tipicamente montada em /boot/efi.

Este esquema utilizado pelo EFI é mais complexo que na BIOS, permitindo que cada sistema operacional instalado no computador tenha o seu próprio sistema de carga de boot separado.

Desta forma o EFI possui um “gerenciador de boot” que permite que o usuário escolha qual sistema de carga de boot quer dar início quando liga o computador.

Para que este sistema “gerenciador de boot” do EFI funcione, é preciso que os sistemas de carga de boot estejam devidamente registrados no firmware através do próprio utilitário da EFI ou através do programa efibootmgr no Linux.

Processo de Carga do Kernel

Dependendo do tipo de disco utilizado, o setor de boot, ou setor de carga, está localizado em um local específico com uma determinada assinatura definida por padrões da indústria.

É no setor de boot que os sistemas operacionais gravam o software responsável por iniciar a carga do sistema operacional.

Desta forma, a BIOS ou firmware de placa-mãe procura no setor de boot do disco o gerenciador de boot.

No Linux os gerenciadores mais comuns são o GRUB e GRUB 2. Eles são responsáveis pela carga do Kernel na memória.

Durante a carga do kernel, o Linux carrega um sistema de arquivos especial chamado initramfs, que contém uma versão minimalista do sistema de arquivos, para que o processo init (pai de todos os processos) possa ser carregado.

Isto permite que diversas tarefas possam ser executadas antes que o sistema de arquivos real seja carregado.

Após a carga do Kernel, este inicia um processo especial chamado init (para sistemas baseados em SystemV) ou o systemd (para sistemas baseados em Systemd).

Tanto o init ou o systemd são o pai de todos os processos e responsável pelo restante da carga do boot do Linux.

Depois da carga do boot, o init chama outro programa especial chamado getty, que é responsável pela autenticação dos usuários e pelo início do processo de shell.

Veja como funciona o Grub no Linux:

Aprenda muito mais sobre Linux em nosso curso online. Você pode fazer a matrícula aqui com trial de 7 dias grátis. Se você já tem uma conta, pode acessar aqui.

Gostou? Compartilhe 🙂

Open chat