Inicializando e configurando um sistema Linux

Sumário

9.1. Processo de boot do Linux
9.2. O processo init
9.3. Configuração do sistema via /etc/sysconfig

Resumo

O boot de um sistema Linux envolve componentes diferentes. O próprio hardware é inicializado pelo BIOS, que inicia o kernel através de um carregador de boot. Depois disso, o processo de boot com init e os níveis de execução é totalmente controlado pelo sistema operacional. O conceito de nível de execução permite que você mantenha configurações para uso diário, e também execute tarefas de manutenção no sistema.

Processo de boot do Linux

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.

  1. BIOS.  Após ligar o computador, o BIOS 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.

  2. 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, nesse caso, o kernel Linux. Mais informações sobre o GRUB, o carregador de boot do Linux, podem ser encontradas no Capítulo 10, O carregador de boot GRUB.

  3. Kernel e initramfs.  Para passar o 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 trata a montagem do sistema de arquivos raiz real. Se forem necessários drivers de hardware especiais antes de o armazenamento em massa ser acessado, eles deverão estar em initramfs. Para obter mais informações sobre o initramfs, consulte a Seção 9.1.1, “initramfs”.

  4. init no initramfs.  Este programa executa todas as ações necessárias para montar o sistema de arquivos raiz adequado, por exemplo, fornecer a funcionalidade de kernel para o sistema de arquivos e os drivers de dispositivo necessários aos controladores de armazenamento em massa com 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 programa init no sistema de arquivos raiz será executado. Para obter mais informações sobre o init, consulte a Seção 9.1.2, “init no initramfs”. Há mais informações a respeito do udev no Capítulo 13, Gerenciamento de dispositivo de kernel dinâmico com udev.

  5. init.  O init realiza o boot do sistema através de diversos níveis, oferecendo funcionalidades diferentes. Ele é descrito na Seção 9.2, “O processo init”.

initramfs

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. Esse ambiente é carregado na memória pelas rotinas de BIOS e não têm requisitos de hardware específicos, além de memória suficiente. O initramfs deve sempre fornecer um executável chamado init que deve executar o programa init no sistema de arquivos raiz para a continuaçã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 disco rígido 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 através de boot.udev com o comando udevtrigger.

Se você precisar mudar o hardware (por exemplo, discos rígidos) em um sistema instalado e esse hardware necessitar da existência de diversos drivers no kernel durante o boot, será necessário atualizar o initramfs. Para isso, basta chamar mkinitrd, o que também era feito no initrd, predecessor do initramfs. A chamada de mkinitrd sem argumentos cria um initramfs. A chamada de mkinitrd cria um initrd. No SUSE® Linux Enterprise Desktop, os módulos a serem carregados são especificados pela variável INITRD_MODULES em /etc/sysconfig/kernel. Após a instalação, essa variável é definida automaticamente para o valor correto. Os módulos são carregados na mesma ordem em que são exibidos em INITRD_MODULES. Isso só é importante quando você depende da configuração correta dos arquivos de dispositivo /dev/sd?. No entanto, em sistemas atuais, também é possível usar os arquivos de dispositivo em /dev/disk/ que são classificados em vários subdiretórios, chamados by-id, by-path e by-uuid, e que sempre representam o mesmo disco. Isso também é possível na hora da instalação, especificando a respectiva opção de montagem.

[Important]atualizando o initramfs ou o initrd

O carregador de boot carrega o initramfs ou initrd da mesma maneira que o kernel. Não é necessário reinstalar o GRUB após a atualização do initramfs ou initrd, pois o GRUB procura o arquivo correto no diretório durante o boot.

init no initramfs

O principal objetivo do init no initramfs é preparar a montagem do sistema de arquivos raiz e o acesso a este. Dependendo da configuração do sistema, o init será responsável pelas tarefas a seguir.

Carregamento de módulos Kernel

Dependendo da configuração do seu hardware, drivers especiais podem ser necessários para acessar os componentes de hardware do computador (sendo que o componente mais importante é a unidade de disco rígido). Para acessar o sistema de arquivos raiz final, o kernel precisa carregar os drivers adequados do sistema de arquivos.

Fornecendo arquivos especiais de bloco

Para cada módulo carregado, o kernel gera eventos de dispositivo. udev gerencia esses eventos e gera os arquivos especiais de bloco em um sistema de arquivos em RAM em /dev. Sem esses arquivos especiais, o sistema de arquivos e outros dispositivos não estariam acessíveis.

Gerenciamento de configurações RAID e LVM

Se você tiver configurado o sistema para armazenar o sistema de arquivos raiz no RAID ou no LVM, o init configurará o LVM ou o RAID para permitir acesso posterior ao sistema de arquivos raiz. Obtenha informações sobre RAID e LVM no Capítulo Advanced Disk Setup (↑Guia de Implantação).

Gerenciamento de conexões de rede

Se você tiver configurado o sistema para usar um sistema de arquivos raiz montado em rede (via NFS), o init deverá ter certeza de que os drivers de rede corretos foram carregados e de que estejam configurados para permitir acesso ao sistema de arquivos raiz.

Quando o init é chamado durante o boot inicial como parte do processo de instalação, as respectivas tarefas diferem das que foram mencionadas acima:

Localização da mídia de instalação

Quando o processo de instalação é iniciado, a máquina carrega um kernel de instalação e um initrd especial com o instalador do YaST localizado no meio de instalação. O instalador do YaST, executado em um sistema de arquivos em RAM, necessita das informações sobre a localização do meio de instalação para acessá-lo e instalar o sistema operacional.

Inicialização do reconhecimento de hardware e carregamento dos módulos kernel adequados

Como mencionado na Seção 9.1.1, “initramfs”, o processo de boot inicia 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 para sua configuração de hardware. Os nomes dos módulos necessários ao processo de boot são gravados em INITRD_MODULES, localizado em /etc/sysconfig/kernel. Esses nomes são usados para gerar um initramfs personalizado que é necessário para inicializar o sistema. Se os módulos não forem necessários para o boot, mas forem para coldplug, eles serão gravados em /etc/sysconfig/hardware/hwconfig-*. Todos os dispositivos descritos com arquivos de configuração nesse diretório são inicializados durante o processo de boot.

Carregamento do sistema de instalação ou do sistema de recuperação

Assim que o hardware for reconhecido corretamente, os drivers adequados serão carregados, o udev criará os arquivos de dispositivos especiais e o init iniciará o sistema de instalação com o instalador real do YaST ou o sistema de recuperação.

Iniciando o YaST

Por fim, init inicia o YaST, que, por sua vez, inicia a instalação do pacote e a configuração do sistema.