Índice
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.
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.
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.
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 29, O Carregador de Boot.
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 28.1.1, “initramfs”.
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. 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 28.1.2, “init no initramfs”.
init. O init realiza a inicialização do sistema através de diversos níveis, oferecendo funcionalidades diferentes. Ele é descrito na Seção 28.2, “O processo init”.
initramfs é um pequeno sistema de arquivos 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. O initramfs está disponível durante todo o processo de boot. Assim, é possível manipular todos os eventos hotplug 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.
![]() | 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. | |
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.
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.
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.3, “Configuração de RAID de software”. Informações sobre a LVM podem ser encontradas na Seção 2.2, “Configuração da LVM”.
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:
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.
Como mencionado na Seção 28.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 gravados posteriormente em INITRD_MODULES em /etc/sysconfig/kernel para que qualquer processo de boot subseqüente possa usar um initrd personalizado. Durante o processo de instalação, o init carrega esse conjunto de módulos.
Depois que o hardware for reconhecido adequadamente e os drivers adequados forem carregados, o init iniciará o sistema de instalação, que contém o instalador do YaST ou o sistema de recuperação.
Por fim, o init inicia o YaST que, por sua vez, inicia a instalação do pacote e a configuração do sistema.