O initramfs usa o / etc / fstab?

14

Do jeito que eu entendi, o initramfs é responsável por carregar o sistema de arquivos raiz "real".

Agora, há dois lugares em que definimos essa raiz. Primeiro, colocamos uma entrada em /etc/fstab . Em segundo lugar, colocamos o dispositivo nos comandos de inicialização do kernel, por exemplo. %código%.

Qual deles o initramfs usa para determinar onde está o sistema de arquivos raiz? Se ele usa o parâmetro do kernel raiz, por que temos uma entrada em root=/dev/sda1 ? A segunda opção, (lê-se /etc/fstab ), é bastante ilógica porque o arquivo /etc/fstab está no mesmo dispositivo raiz que o initramfs está tentando montar em primeiro lugar.

Coisas muito confusas.

    
por Ahmed Ghonim 28.09.2013 / 01:51

3 respostas

9

Como você afirmou, o propósito do initramfs é obter o sistema de arquivos raiz "real" montado (ele pode fazer outras coisas também, mas esta é a tarefa mais comum).

Sem um initramfs, o kernel normalmente monta uma partição como somente leitura e depois passa o controle para /sbin/init . Um initramfs apenas assume essa tarefa do kernel, geralmente quando o sistema de arquivos raiz não é uma partição normal (mdraid, lvm, criptografado, etc).

Agora, além do plano de fundo no initramfs, seu /etc/fstab reside em seu sistema de arquivos raiz. Dessa forma, quando o initramfs é iniciado, esse sistema de arquivos raiz não está lá e, portanto, não consegue chegar ao fstab (problema de galinha e ovo).
Em vez disso, temos que passar um parâmetro para os argumentos de inicialização do kernel para o initramfs usar. Normalmente isso é algo como root=/dev/sdX . No entanto, ele também pode fazer algo para descobrir automaticamente onde está o seu dispositivo raiz e, portanto, não há nenhum parâmetro. Como é apenas um software (geralmente um script), ele pode realmente fazer o que quiser para montar o dispositivo raiz.

Agora, como dito anteriormente, o kernel irá montar a raiz real como somente leitura. O initramfs deve fazer exatamente isso. Uma vez que o initramfs é feito, o sistema continua inicializando exatamente como se não houvesse nenhum initramfs, e /sbin/init inicializa. Este init então inicia todos os seus scripts de inicialização normais, e é o trabalho de um desses scripts ler /etc/fstab , mudar a raiz para leitura-gravação e montar todos os seus outros sistemas de arquivos.

    
por 28.09.2013 / 09:04
1

Pode ou não pode. Como o Initramfs pode ser construído de várias maneiras (o kernel apenas o carrega e executa /init , que faz o que for). No entanto, usar um parâmetro é mais comum, pois permite mais flexibilidade, ou seja, se algo mudar, basta editar a entrada de inicialização e continuar funcionando. Com uma raiz embutida no código, isso não seria necessariamente possível.

A entrada fstab ainda pode ser necessária de qualquer forma, pois também determina outras coisas, como opções de montagem (algumas das quais podem ser alteradas em qualquer lugar) e fsck . Também, mesmo que fosse totalmente supérfluo (e se o Initramf o manuseia, pode funcionar sem), eu ainda manteria a entrada lá simplesmente por completo.

    
por 28.09.2013 / 02:17
0

Você pode considerar o / etc / fstab como montagem estática, é apenas uma maneira de executar tal tarefa, mas não a única, na verdade, executar o comando mount, e você verá muitos sistemas de arquivos que estão faltando no fstab. Serviço como udev e udisk gerenciam muito do "automounting" ignorando o arquivo / etc / fstab ...

Então, se algo estiver montado ou não, não tem nada a ver com / etc / fstab.

initramfs é apenas um rootfs temporário usado durante o processo de inicialização até que o rootfs "verdadeiro" seja montado, então por que o initramfs deve estar em / etc / fstab?

    
por 28.09.2013 / 02:17