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/fstab
reside 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/init
inicia. 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.
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
lsinitramfs /boot/initrd* | fgrep fstab
e surpresa, o initramfs do contém o arquivo fstab, pelo menos para mim.Pode ou não pode. Como o Initramfs pode ser construído de várias maneiras (o kernel apenas o carrega e executa o
/init
que 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
fsck
ordem. 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.fonte
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?
fonte