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.