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.

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.


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.


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?

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.