O initramfs usa / etc / fstab?

20

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

Agora, existem dois lugares onde definimos essa raiz. Primeiro, inserimos uma entrada /etc/fstab. Segundo, colocamos o dispositivo nos comandos de inicialização do kernel, por exemplo root=/dev/sda1.

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

Coisas muito confusas.

Ahmed Ghonim
fonte

Respostas:

14

Como você afirmou, o objetivo do initramfs é montar o sistema de arquivos raiz "real" (ele também pode fazer outras coisas, mas esta é a tarefa comum).

Sem um initramfs, o kernel normalmente montará uma partição como somente leitura e passará 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, criptografada, etc).

Agora, além do histórico do initramfs, você /etc/fstabreside no seu sistema de arquivos raiz. Assim, quando o initramfs é iniciado, o sistema de arquivos raiz não existe e, portanto, não pode chegar ao fstab (problema de galinhas e ovos).
Em vez disso, temos que passar um parâmetro para os argumentos de inicialização do kernel para o initramfs usar. Normalmente isso é algo parecido root=/dev/sdX. No entanto, também pode fazer algo para descobrir automaticamente onde está o seu dispositivo raiz e, portanto, não há parâmetro algum. Como é apenas um software (geralmente um script), ele pode realmente fazer o que quiser para montar o dispositivo raiz.

Agora, como declarado anteriormente, o kernel montará a raiz real como somente leitura. O initramfs deve fazer exatamente isso. Depois que o initramfs é concluído, o sistema continua inicializando exatamente como se não houvesse initramfs e /sbin/initinicia. Esse init inicia todos os seus scripts de inicialização normais, e é o trabalho de um desses scripts ler /etc/fstab, alternar entre raiz e ler / escrever e montar todos os outros sistemas de arquivos.

Patrick
fonte
Então, você está dizendo que / sbin / init dentro do sistema de arquivos raiz real remontaria novamente o root usando as opções no / etc / fstab?
Ahmed Ghonim 28/09
3
Sim. Geralmente através de um simples mount -o remount,rw /. Não altera o dispositivo montado, mas altera as opções na montagem. A partir da página de manual:After this call mount reads fstab (or mtab) and merges these options with options from command line
Patrick
Como passamos um parâmetro para os argumentos de inicialização do kernel se estamos usando a linha de comando grub2? Meu sistema não mostra o menu grub por algum motivo.
intuited
@ intuited Você deve fazer uma nova pergunta. Comentários não são o lugar para as perguntas e respostas.
Patrick
lsinitramfs /boot/initrd* | fgrep fstabe surpresa, o initramfs do contém o arquivo fstab, pelo menos para mim.
youfu 14/10
2

Pode ou não pode. Como o Initramfs pode ser construído de várias maneiras (o kernel apenas o carrega e executa o /initque faz). No entanto, o uso de um parâmetro é mais comum, pois permite mais flexibilidade - ou seja, se algo mudar, você pode simplesmente editar a entrada de inicialização e as coisas continuam funcionando. Com uma raiz codificada embutida, isso não seria necessariamente possível.

A entrada fstab ainda pode ser necessária de qualquer maneira, pois também determina outras coisas, como opções de montagem (algumas das quais podem ser alteradas em movimento) e fsckordem. Além disso, mesmo que fosse inteiramente supérfluo (e se o Initramfs lidar com isso, pode funcionar sem), eu ainda manteria a entrada lá simplesmente por uma questão de integridade.

frostschutz
fonte
1

Você pode considerar o / etc / fstab como montagem estática, é apenas uma maneira de executar essa tarefa, mas não é o único, de fato, executa o comando mount, e você vê muitos sistemas de arquivos ausentes no fstab. Um serviço como o udev e o udisk gerenciam grande parte da "montagem automática" ignorando o arquivo / etc / fstab ...

Portanto, se algo está montado ou não frequentemente, 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 "true" seja montado. Por que o initramfs deve estar no / etc / fstab?

sebelk
fonte