Como o / etc / fstab é acessado antes da montagem do root?

21

Eu estava fazendo algumas alterações em /etc/fstabquando essa pergunta sobre frango e ovo me ocorreu - se /etc/fstabcontém as instruções para montar os sistemas de arquivos, incluindo a partição raiz, então como o sistema operacional lê esse arquivo em primeiro lugar?

sashoalm
fonte

Respostas:

18

Quando o carregador de inicialização chama o kernel, ele passa um parâmetro chamado root. Assim que o kernel terminar de inicializar, ele continuará montando a partição raiz especificada /e depois chamando /sbin/init(a menos que isso tenha sido substituído por outros parâmetros).

Em seguida, o initprocesso inicia o restante do sistema carregando todos os serviços definidos para serem iniciados no nível de execução padrão.

Dependendo da sua configuração e do sistema init que você usa, pode haver várias outras etapas entre as que eu mencionei. Atualmente, os sistemas init mais populares no Linux são o SysVInit (o tradicional), Upstart e Systemd. Você pode encontrar mais detalhes sobre o processo de inicialização neste artigo da wikipedia .

Aqui está um exemplo simplificado da minha configuração do Grub. A parte importante para responder sua pergunta está na penúltima linha, existe um root=/dev/sda3:

menuentry 'Gentoo GNU/Linux' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-40864544-2d0f-471a-ab67-edd7e4754dae' {
    set root='hd0,msdos1'
    echo    'Loading Linux 3.12.6-gentoo-c2 ...'
    linux   /kernel-3.12.6-gentoo-c2 root=/dev/sda3 ro  
}

Em muitas configurações, o kernel é montado /no modo somente leitura e todas as demais opções são definidas nos padrões. Em /etc/fstabque você pode especificar os parâmetros do sistema de arquivos, que passaria a ser aplicada uma vez o init remonta-lo.

repetição
fonte
2
A partição raiz é montada inicialmente somente leitura pelo kernel. Um initprocesso monta as coisas de /etc/fstabacordo com os parâmetros existentes, o que geralmente significa remontar a leitura / gravação da partição raiz.
precisa saber é o seguinte
1
Além disso, o kernel pode ser compilado com rotinas codificadas que procuram alguns arquivos especiais na partição ativa que ainda não está montada. O carregador do FreeBSD funciona dessa maneira.
Kondybas
@Kondybas LILO no Linux também é codificado para carregar o kernel em alguns números de blocos fixos
phuclv
3

É fstabnecessária uma entrada , se você desejar especificar algumas opções de montagem não padrão. No entanto, hoje em dia com systemd, um dispositivo do kernel correto e o fstype in não fstabsão necessários. Você pode substituir a entrada raiz por algo como:

#UUID=8f74237d-b689-4beb-9d1f-f60b426c9969 /            ext4        rw,relatime,data=ordered    0 1
dummy /             auto        rw,relatime,data=ordered,debug  0 1

e as opções de montagem ainda são respeitadas pelo systemd.

Você pode usar qualquer nome de dispositivo inválido, por exemplo /dev/sdz1, exceto UUID inválido. Com um UUID inválido, a mensagem será impressa na inicialização:, Failed to start Remount Root and Kernel File Systemsmas o sistema é inicializado de qualquer maneira.

bacia
fonte