O initramfs usa /etc/fstab?

O initramfs usa /etc/fstab?

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

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

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

Coisas muito confusas.

Responder1

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

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

Agora, além do histórico do initramfs, você /etc/fstabreside no sistema de arquivos raiz. Assim, quando o initramfs é iniciado, esse sistema de arquivos raiz não está lá e, portanto, não pode chegar ao fstab (problema do ovo e da galinha).
Em vez disso, temos que passar um parâmetro nos argumentos de inicialização do kernel para o initramfs usar. Normalmente isso é algo como root=/dev/sdX. No entanto, 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 afirmado anteriormente, o kernel montará a raiz real como somente leitura. O initramfs deve fazer exatamente isso. Depois que o initramfs for concluído, o sistema continuará inicializando exatamente como se não houvesse nenhum initramfs e /sbin/initserá inicializado. Este init então inicia todos os seus scripts de inicialização normais, e é trabalho de um desses scripts ler /etc/fstab, mudar root para leitura-gravação e montar todos os seus outros sistemas de arquivos.

Responder2

Pode ou não. Como o Initramfs pode ser construído de várias maneiras (o kernel apenas o carrega e executa, /initfazendo o que quer que seja). No entanto, usar um parâmetro é mais comum, pois permite mais flexibilidade - ou seja, se algo mudar, você pode simplesmente editar a entrada de inicialização e tudo continuará 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 trânsito) e fsckordem. Além disso, mesmo que fosse totalmente 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.

Responder3

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

Portanto, se algo é montado ou não com frequência, 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 deveria estar em /etc/fstab ?

informação relacionada