Capítulo 8. Inicializando e configurando um sistema Linux

Sumário

8.1. Processo de inicialização do Linux
8.2. O processo init
8.3. Configuração do sistema via /etc/sysconfig

Resumo

A inicialização de um sistema Linux envolve vários componentes. Este capítulo descreve os princípios subjacentes e realça os componentes envolvidos, além de abordar o conceito de runlevels e a configuração do sistema SUSE com osysconfig.


8.1. Processo de inicialização do Linux

O processo de inicialização do Linux consiste em vários estágios, e cada um deles é representado por outro componente. A lista a seguir resume o processo de inicialização e apresenta todos os principais componentes envolvidos.

  1. BIOS.  Depois que o computador é desligado, 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 - Registro Mestre de Inicialização). 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 9, O Carregador de Boot.

  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 ramfs inicial pode ser usado diretamente pelo kernel. O init ramfs contém um pequeno executável chamado init que realiza a montagem do sistema de arquivos raiz. Em versões anteriores do SUSE Linux, essas tarefas eram realizadas pelo initrd e linuxrc, respectivamente. Para obter mais informações sobre o initramfs, consulte a Seção 8.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 8.1.2, “init no initramfs”. Há mais informações a respeito do udev no Capítulo 12, Gerenciamento de dispositivo de kernel dinâmico com udev.

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

8.1.1. 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 a 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. Após os módulos serem carregados, o udev fornece ao initramfs os dispositivos necessários. O initramfs está disponível durante todo o processo de boot. Assim, é possível manipular todos os eventos de dispositivo gerados durante o boot.

Se você precisar mudar o hardware (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 o 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 -R cria um initrd. No SUSE Linux, 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 com o valor correto. Os módulos são carregados na mesma ordem em que são exibidos em INITRD_MODULES. Isso será especialmente importante se vários drivers SCSI forem usados, pois, caso contrário, os nomes dos discos rígidos seriam mudados. Em suma, seria suficiente apenas carregar os drivers necessários para acessar o sistema de arquivos raiz. Contudo, todos os drivers SCSI necessários à instalação são carregados por meio do initramfs ou initrd porque o carregamento posterior poderia ser problemático.

[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 a inicialização.

8.1.2. 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 é 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 de bloco especiais

Para cada módulo carregado, o kernel gera eventos de dispositivo. O udev gerencia esses eventos e gera os arquivos especiais de dispositivo necessários em um sistema de arquivos RAM em /dev. Sem esses arquivos especiais, o sistema de arquivos não estaria acessível.

Gerenciamento de configurações RAID e LVM

Se você tiver configurado o sistema para armazenar o sistema de arquivos raiz na RAID ou LVM, o init configurará a LVM ou a RAID para permitir acesso posterior ao sistema de arquivos raiz. Informações sobre a RAID podem ser encontradas na Seção 2.2, “Configuração de RAID de software”. Informações sobre a LVM podem ser encontradas na Seção 2.1, “Configuração da LVM”.

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 a primeira inicialização como parte do processo de instalação, suas tarefas são diferentes daquelas mencionadas anteriormente:

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 proveniente da mídia de instalação. O instalador do YaST, que é executado em um sistema de arquivos RAM, precisa ter informações sobre a localização da mídia de instalação para acessá-la e instalar o sistema operacional.

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

Como mencionado na Seção 8.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. Esses valores são posteriormente gravados em INITRD_MODULES no /etc/sysconfig/kernel a fim de habilitar qualquer processo de boot subsequente para usar um initrd personalizado ou em um arquivo /etc/sysconfig/hardware/hwconfig-* se o dispositivo não for necessário durante o processo de boot. Durante o processo de instalação, o init carrega esse conjunto de módulos.

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

Depois que o hardware for reconhecido adequadamente, os drivers adequados forem carregados e o udev tiver criado os arquivos especiais de dispositivo, o init iniciará o sistema de instalação, que contém o instalador do YaST ou o sistema de recuperação.

Inicialização do YaST

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