systemdjournalctl: consultar o diário do systemdudev
A inicialização de um sistema Linux envolve componentes e tarefas diferentes. O próprio hardware é inicializado pelo BIOS ou pela UEFI, que inicia o Kernel por meio de um carregador de boot. A partir deste ponto, o processo de boot é completamente controlado pelo sistema operacional e administrado pelo systemd. O systemd oferece um conjunto de “destinos” que inicializa configurações para uso diário, manutenção ou emergências.
O processo de boot do Linux consiste em vários estágios, cada um deles representado por um componente diferente. A lista a seguir resume o processo de boot e apresenta todos os principais componentes envolvidos:
BIOS/UEFI. Após ligar o computador, o BIOS ou a UEFI inicializa a tela e o teclado e testa a memória principal. Até esse estágio, a máquina não acessa nenhuma mídia de armazenamento em massa. Em seguida, as informações sobre a data e o horário atuais e sobre os periféricos mais importantes são carregadas dos valores do CMOS. Quando o primeiro disco rígido e sua geometria são reconhecidos, o controle do sistema passa do BIOS para o carregador de boot. Se o BIOS oferecer suporte à inicialização pela rede, também será possível configurar um servidor de inicialização que ofereça o carregador de boot. Em sistemas x86_64, a inicialização PXE é necessária. Outras arquiteturas normalmente usam o protocolo BOOTP para obter o carregador de boot.
Carregador de boot. O primeiro setor de dados físico de 512 bytes do primeiro disco rígido é carregado na memória principal e o carregador de boot existente no início desse setor assume o controle. Os comandos executados pelo carregador de boot determinam a parte restante do processo de boot. Desse modo, os primeiros 512 bytes do primeiro disco rígido são chamados de MBR (Master Boot Record). O carregador de boot passa o controle para o sistema operacional real, neste caso, o Kernel do Linux. Mais informações sobre o GRUB 2, o carregador de boot do Linux, podem ser encontradas no Capítulo 13, O carregador de boot GRUB 2. Para uma inicialização pela rede, o BIOS age como o carregador de boot. Ele obtém a imagem do servidor de boot e inicia o sistema. Isso é totalmente independente dos discos rígidos locais.
Kernel e initramfs.
Para passar pelo controle do sistema, o carregador de boot carrega na memória o kernel e um sistema de arquivos inicial baseado em RAM (initramfs). O conteúdo do initramfs pode ser usado diretamente pelo Kernel. O initramfs contém um pequeno executável chamado init que faz a montagem do sistema de arquivos raiz real. Se forem necessários drivers de hardware especiais para acessar o armazenamento em massa, eles deverão estar em initramfs. Para obter mais informações sobre o initramfs, consulte a Seção 10.2, “initramfs”. Caso o sistema não tenha um disco rígido local, o initramfs deverá indicar o sistema de arquivos raiz ao Kernel. Isso pode ser feito com a ajuda de um dispositivo de bloco de rede, como iSCSI ou SAN, mas também é possível usar o NFS como o dispositivo raiz.
initDois programas diferentes são comumente chamados “init”:
o processo initramfs, que monta o sistema de arquivos raiz
o processo do sistema operacional, que configura o sistema
Neste capítulo, vamos chamá-los de “init no initramfs” e de “systemd”, respectivamente.
init no initramfs.
Este programa executa todas as ações necessárias para montar o sistema de arquivos raiz apropriado. Ele dispõe da funcionalidade do Kernel para o sistema de arquivos necessário e de drivers do dispositivo para controladoras de armazenamento em massa com o udev. Uma vez encontrado o sistema de arquivos raiz, ele é verificado quanto a erros e montado. Se esse procedimento for bem-sucedido, o initramfs será limpo e o daemon systemd no sistema de arquivos raiz será executado. Para obter mais informações sobre o init no initramfs, consulte a Seção 10.3, “init no initramfs”. Há mais informações a respeito do udev no Capítulo 17, Gerenciamento dinâmico de dispositivos do Kernel com udev.
systemd.
Ao iniciar serviços e montar sistemas de arquivos, o systemd controla a inicialização real do sistema. O systemd está descrito no Capítulo 11, O daemon systemd.
initramfs #
O initramfs é um pequeno arquivo cpio que pode ser carregado pelo Kernel em um disco RAM. Ele fornece um ambiente Linux mínimo que permite a execução de programas antes da montagem do sistema de arquivos raiz. Este ambiente mínimo do Linux é carregado na memória pelas rotinas do BIOS ou da UEFI e não tem outros requisitos de hardware específicos além de memória suficiente. O arquivo initramfs sempre deve incluir um executável denominado init, que executa o daemon systemd no sistema de arquivos raiz para realização do processo de boot.
Antes da montagem do sistema de arquivos raiz e da inicialização do sistema operacional, o Kernel precisa dos drivers correspondentes para acessar o dispositivo em que o sistema de arquivos raiz está localizado. Esses drivers podem incluir drivers especiais para determinados tipos de unidades de discos rígidos ou até drivers de rede para acesso a um sistema de arquivos de rede. Os módulos necessários para o sistema de arquivos raiz podem ser carregados pelo init no initramfs. Depois de carregados os módulos, o udev fornecerá os dispositivos necessários ao initramfs. Posteriormente no processo de boot, depois de mudar o sistema de arquivos raiz, será necessário gerar novamente os dispositivos. Isso é feito pela unidade do systemd udev.service, com o comando udevtrigger.
Se você precisar mudar o hardware (por exemplo, discos rígidos) em um sistema instalado e esse hardware exigir a presença de drivers diferentes no Kernel durante a inicialização, será necessário atualizar o arquivo initramfs. Para fazer isso, chame dracut (a opção -f-f sobregrava o arquivo initramfs existente). Para adicionar um driver para o novo hardware, edite /etc/dracut.conf.d/01-dist.conf e adicione a linha a seguir.
force_drivers+="driver1"
Substitua driver1 pelo nome do driver do módulo. Se for necessário adicionar mais do que um driver, liste-os separados com espaço (driver1 driver2.
initramfs ou o init
O carregador de boot carrega o initramfs ou o init da mesma maneira que o Kernel. Não será necessário reinstalar o GRUB 2 após atualizar o initramfs ou o init, pois o GRUB 2 procura o arquivo certo no diretório durante a inicialização.
initramfs #
O principal objetivo do init no initramfs é preparar a montagem e o acesso ao sistema de arquivos raiz real. Dependendo da configuração do sistema, o init no initramfs será responsável pelas tarefas a seguir.
Dependendo da configuração do hardware, drivers especiais poderão ser necessários para acessar os componentes de hardware do computador (sendo que o componente mais importante é o disco rígido). Para acessar o sistema de arquivos raiz final, o Kernel precisa carregar os drivers adequados do sistema de arquivos.
Para cada módulo carregado, o Kernel gera eventos de dispositivo. O udev gerencia esses eventos e gera os arquivos de bloco especiais necessários em um sistema de arquivos RAM em /dev. Sem esses arquivos especiais, o sistema de arquivos e outros dispositivos não estariam acessíveis.
Se você configurar o sistema para armazenar o sistema de arquivos raiz no RAID ou no LVM, o init no initramfs configurará o LVM ou o RAID para permitir acesso ao sistema de arquivos raiz posteriormente. Obtenha informações sobre RAID e LVM no Chapter 12, Advanced Disk Setup, Deployment Guide.
Se você configurar o sistema para usar um sistema de arquivos raiz montado em rede (via NFS), o init no initramfs deverá verificar se os drivers de rede apropriados foram carregados e configurados para permitir acesso ao sistema de arquivos raiz.
Se o sistema de arquivos residir em um dispositivo de blocos em rede, como iSCSI ou SAN, a conexão com o servidor de armazenamento também será configurada pelo init no initramfs.
Quando o init no initramfs é chamado durante o boot inicial como parte do processo de instalação, suas tarefas são diferentes das que foram mencionadas acima:
Ao iniciar o processo de instalação, a máquina carrega um Kernel de instalação e um init especial que inclui o instalador do YaST. O instalador do YaST é executado em um sistema de arquivos RAM e precisa ter informações sobre a localização do meio de instalação para acessá-lo e instalar o sistema operacional.
Como mencionado na Seção 10.2, “initramfs”, o processo de boot é iniciado com um conjunto mínimo de drivers que pode ser usado com a maioria das configurações de hardware. O init inicia um processo de exploração de hardware que determina o conjunto de drivers adequado à sua configuração de hardware. Esses drivers são usados para gerar um initramfs personalizado necessário para inicializar o sistema. Se os módulos não forem necessários para inicialização, mas forem para coldplug, eles poderão ser carregados com systemd. Para obter mais informações, consulte a Seção 11.6.3, “Carregamento de módulos Kernel”.
Os drivers apropriados serão carregados logo após o reconhecimento adequado do hardware. O programa udev cria os arquivos de dispositivo especiais, e o init inicia o sistema de instalação com o instalador do YaST.
Por fim, o init inicia o YaST, que inicia a instalação do pacote e a configuração do sistema.