Como o / etc / fstab é acessado antes da raiz ser montada?

18

Eu estava fazendo algumas alterações em /etc/fstab , quando essa pergunta de ovo e galinha me ocorreu - se /etc/fstab contém as instruções para montar os sistemas de arquivos, incluindo a partição raiz, como o SO lê esse arquivo o primeiro lugar?

    
por sashoalm 04.01.2014 / 14:56

2 respostas

16

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

Em seguida, o processo init 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ários outros passos entre os que eu mencionei. Atualmente, os sistemas init mais populares no Linux são o SysVInit (o tradicional), o Upstart e o 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 é da segunda à última linha, há 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 monta / no modo somente leitura e todas as outras opções são definidas como padrões. Em /etc/fstab , você pode especificar os parâmetros do sistema de arquivos que seriam aplicados depois que o init os remontasse.

    
por 04.01.2014 / 15:00
2

É necessária uma entrada em fstab , se você quiser especificar algumas opções de montagem não padrão. No entanto, hoje em dia com systemd , um dispositivo de kernel correto e fstype em fstab são desnecessários. Você pode substituir a entrada da 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 pelo mau UUID. Com um UUID ruim, a mensagem será impressa na inicialização: Failed to start Remount Root and Kernel File Systems , mas o sistema será inicializado de qualquer maneira.

    
por 24.03.2018 / 13:33