BOOT DO LINUX: Entenda todo o processo!

É sempre interessante tentarmos conhecer melhor os Sistemas Operacionais que trabalhamos, pois caso ocorra qualquer problema, estaremos aptos a identificar onde um determinado problema se encontra. No Linux não é diferente, e por isso hoje eu quero explanar um pouco sobre o BOOT DO LINUX: Entenda todo o processo!

Todo o processo consiste em 7 fases que eu vou explicar brevemente para que você tenha uma visão geral sobre o assunto.

BIOS

A BIOS (Basic Input Output System) é um firmware que fica armazenado na placa-mãe do seu equipamento, e é responsável por armazenar informações do seu hardware (memória, processador, HD…), o horário e, também, a ordem de boot.

Assim que você pressionar o botão de ligar do seu equipamento, os leds vão começar a acender o seu sistema entra no ciclo de Power, isto é, começa a distribuir energia elétrica para os componentes. Depois, ele passa para os ciclos de Pre-POST e POST onde será avaliado se existe algum problema de hardware (o mais é recorrente é algum problema na memória RAM do equipamento). Se houver algum problema, ele ficará travado (energizado, mas travado) e possivelmente mente vai emitir beeps de diagnóstico.

Finalizado todos os testes necessários, é hora da BIOS entrar em ação e escolher em qual componente ela deverá bootar (de acordo com a ordem de boot que mencionei anteriormente).

Aí vai um exemplo de uma BIOS com ordem de boot:

Image result for boot order

Neste exemplo, o CDROM é o primeiro item. Caso não haja um CD na gaveta, o Windows Boot Manager será chamado.

MBR

Imaginemos então que a BIOS escolheu o seu primeiro HD que está instalado um Ubuntu. A primeira coisa que vai acontecer é a leitura da MBR deste HD, ao qual conterá algumas informações interessantes para o processo de boot.

A MBR (Master Boot Record) são os primeiros 512 bytes do seu disco rígido. Nesta área é onde fica gravado o bootloader, ou seja, o Grub, LILO, SysLinux, etc.

Neste caso, o Grub 2 do Ubuntu vai estar ali e ele assumirá o bastão daqui para frente.

Image result for master boot record

Bootloader

Se você não sabe o que é o Grub 2 e também não sabe como configura-lo, sugiro fortemente que veja o vídeo abaixo:

O Grub 2 é o que possibilita iniciarmos o sistema Linux, criando uma ponte entre a BIOS e o nosso Sistema Operacional. Além disso, o Grub é muito utilizado quando temos um dual-boot com Windows e precisamos de um menu interativo de seleção.

Image result for grub2

O objetivo do Grub 2 é iniciar o boot do Kernel Linux (na foto representado pela opção “Ubuntu”).

Kernel

Após ser realizada a chamado do Kernel Linux, o sistema entra em um estado conhecido como two stages boot. Isto porque a próxima sequência de boot é dividida em duas partes que se complementam: Initrd & Init.

Initrd / Initramfs

Initrd é um acrônimo para Initial RAM Disk. Ele é um arquivo compactado que, assim como o Kernel, fica armazenado dentro do /boot, veja:

O arquivo vmlinuz-4.14-x86_64 é o Kernel. Já o arquivo initramfs-4.14-x86_64.img é o arquivo de Initrd.

Mas, qual a função deste arquvio? Bom, o Initrd é um compilado de drivers e dependências para que o sistema operacional inicie normalmente. Por exemplo, se temos um sistema de arquivos Ext4, precisamos de um driver do Ext4 rodando para que o sistema operacional consiga se comunicar com o sistema de arquivos.

Da mesma forma que, se utilizarmos um sistema de RAID com o mdadm, precisamos de um driver para que meu sistema consiga entender o que é um RAID.

Então, durante o boot, o Initrd é montado como um sistema de arquivos temporário. Depois, ele é extraído e todos os drivers são carregados para a memória.

Finalizado este processo, com todos os drivers e dependências na memória, finalmente é montado o sistema de arquivos root, ou o famoso “/”.

Init

Depois que tudo está montado e pronto para iniciar o carregamento do sistema, o Kernel entrega a segunda parte para o processo Init, o primeiro processo do sistema operacional com PID 1.

A função do Init é carregar todos os outros serviços como MySQL, Apache, DHCP, Interface Gráfica, enfim, todos os processos.

Entretanto o Init só saberá o que ele deve iniciar com base no nível de execução do sistema padrão que foi definido (também conhecido por runlevel).

Runlevel

O Runlevel é uma parte um pouco mais complexa do processo, que será explanada em outro artigo mais detalhadamente. Mas, basicamente, ele é o nível de execução do sistema. E com base neste nível é que são definidos os serviços que serão iniciados.

Por exemplo, se executarmos no modo de recuperação, não faz sentido termos o serviço do MySQL rodando, correto? Então é com o Runlevel que fazemos esta separação.

E por fim, depois que todos os processos foram iniciados, o sistema está funcional e pronto para o uso.

Espero que tenham gostado desta dica!

Não esqueça de nos seguir no Instagram para receber os últimos conteúdos!

Participe dos nossos grupos no Telegram e Facebook! 🙂

Veja também:

Se tiver alguma dúvida ou sugestão de conteúdo, por favor, entre em contato aqui ou comente abaixo!