fbpx
Whatsapp (31) 3069-8315
atendimento@certificacaolinux.com.br
Alterando Runlevels no Linux

Aprenda a alterar os níveis de execução – Runlevels – no Linux, utilizando os comandos init do systemv

O Linux possui três grandes sistemas especiais de carga dos serviços durante o processo de boot e também responsável por iniciar todos os processos: System V Init Daemon, Systemd e Upstream (era utilizado no Ubuntu – não mais!).

System V Init Daemon

O System V Init Daemon foi herdado do UNIX, que recebeu o nome de System V init Daemon (System Five) ou simplesmente init.

Sua função básica é carregar os serviços durante o processo de carga do sistema, tais como o suporte a rede, multiusuários, apache, mysql, e demais serviços da máquina.

Durante o processo de carga do Linux, o sistema de boot (GRUB) carrega a imagem do kernel para a memória.

Assim que o Kernel assume o controle da máquina, ele carrega um programa especial chamado init e que sempre tem o PID 1.

A partir daí, todos os outros processos executados na máquina são filhos do processo init, que tem o PID 1.

Isso porque, quando o usuário executa um programa, o kernel faz uma cópia do init através de um método chamado FORK e carrega o código de máquina do programa desejado em cima do código de máquina do clone do init que foi criado.

Você pode ver essa relação com o comando pstree:

# pstree

Runlevels no Linux

No Linux existem sete níveis de execução predefinidos de 0 a 6. Os serviços que cada runlevel pode executar vão depender da distribuição do Linux e da configuração que o administrador do sistema efetuou.

TABELA – Runlevels do Linux

# Descrição
0 O nível zero define um desligamento elegante e rápido do sistema.
1,s O nível um é utilizado para manutenção do sistema, também chamado de monousuário (single user). Somente o essencial é executado.
2 Modo multiusuário com compartilhamento de arquivos NFS desabilitado.
3 Modo multiusuário com todos os serviços habilitados, mas sem interface gráfica para o login no sistema.
4 Não utilizado.
5 Modo multiusuário com todos os serviços habilitados, interface gráfica X11 e login em modo gráfico.
6 O nível seis é parecido com o nível zero, mas executa o reboot da máquina.

Por padrão, as distribuições utilizam o nível 0 para uma sequência de desligamento (shutdown) elegante e o nível 6 para o reboot. E os runlevels 3 a 5 são utilizados para carga normal do sistema.

O nível 1 também conhecido como monousuário é utilizado para manutenções do sistema, como, por exemplo, recuperar uma partição de dados com problemas.

O administrador do sistema pode a qualquer momento alterar o nível de execução através do comando init seguido do número do runlevel desejado.

# init 5

ou

# telinit 6

O comando telinit é um link para o init.

É importante saber que a troca de nível de execução pode alterar os processos em execução e até desligar o sistema.

Quais Processos Serão Executados por cada Runlevel ?

Até agora aprendemos que o comando init pode alterar os processos em execução alterando os runlevels do sistema.

Mas a definição de quais processos serão executados por cada nível de execução é feita pela hierarquia de diretórios /etc/rc.d e scripts de shell.

Quando o Linux inicia, uma série de scripts no diretório /etc/rc.d é executada para dar a carga no sistema. Vejamos estes arquivos e diretórios com detalhe:

O arquivo rc.sysinit é executado pelo processo init durante a carga do sistema e habilita funções essenciais. Por exemplo montar as partições de disco;

O arquivo rc.local é executado pelo script rc.sysinit. Ele é utilizado pelos administradores para eles modificarem os serviços na carga do sistema. Este arquivo tem preferência para esta tarefa uma vez que não é alterado durante um processo de atualização (upgrade) do sistema;

O arquivo rc é utilizado para transições entre os runlevels;

O diretório /etc/rc.d/init.d contém os diversos scripts que fazem a carga de todos os serviços do sistema operacional.

Por exemplo o serviço de shell seguro SSH possui um script para carga do serviço com o nome sshd (Secure Shell Daemon). Este script e outros scripts podem aceitar como parâmetro comandos como start e stop. Outros serviços podem aceitar outros comandos como reload, restart, status etc.

Os níveis de serviço são definidos através dos diretórios /etc/rc<n>.d, onde <n> pode variar de 0 a 6, correspondendo aos runlevels.

Por exemplo /etc/rc0.d e /etc/rc1.d. Dentro da cada diretório de runlevel existem links simbólicos para os scripts dos serviços nos arquivos em /etc/rc.d/init.d.

Estes link simbólicos seguem o seguinte padrão:

[K|S]nn[nomedoscript]

Onde:

A letra K, de kill, indica que o script é para terminar um determinado serviço;

A letra S, de start, indica que o script é para carregar um determinado serviço;

Os números inteiros nn indicam a sequência de execução dos scripts, onde o menor número é executado primeiro.

Se existirem no mesmo runlevel serviços com o mesmo número de ordem de execução, a ordem será indeterminada.

A sequência dos números garante que um serviço que dependa de outro somente seja executado depois que a dependência seja satisfeita;

O nome do script para o link simbólico não é necessário para o funcionamento correto, mas para facilitar a leitura humana.

Por exemplo:

# /etc/rc.d/rc3.d/S23httpd -> /etc/rc.d/init.d/httpd

Para incluir um determinado serviço em algum runlevel desejado, você deverá copiar o script de carga para o diretório /etc/rc.d/init.d e criar um link simbólico para o script no runlevel desejado seguindo a nomenclatura acima.

Veja o exemplo:

# cp /usr/local/mailman/mailman.sh /etc/rc.d/init.d

# ln –s /etc/rc.d/init.d/mailman.sh /etc/rc.d/rc3.d/S25mailman

Definindo o Runlevel Padrão

O arquivo que define qual é o runlevel que o sistema assumirá durante a carga é o /etc/inittab. Neste arquivo procure a linha:

id:n:initdefault

Onde o n definirá o runlevel pelo seu número de 0 a 6. Nunca coloque neste arquivo o runlevel 0 ou 6 senão o sistema nunca entrará em produção.

Você poderá determinar em qual runlevel o sistema está em execução através do comando runlevel.

Este comando retorna o nível de execução anterior e o nível de execução atual. Se o nível de execução permaneceu inalterado desde a carga do sistema, o nível anterior será mostrado como a letra N.

O comando runlevel não altera o nível de execução, mas somente informa. Para alterar utilize o comando init.

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