Por que preciso do initramfs?

Por que preciso do initramfs?

Descobri que se eu escolher jffsou sdcomo sistema de arquivos (e não initramfs), o tamanho do kernel será muito pequeno (1,4 MB em comparação com initramfs3,4 MB). Isso significa que initramfsocupa um espaço consideravelmente grande. Então, se eu puder, eu o removeria completamente e, portanto, teria um kernel muito pequeno, que é o que eu quero.

A pergunta básica que surge em minha mente é: Por que eu preciso initramfs? Não é possível inicializar um kernel Linux sem ter nenhum sistema de arquivos inicial?

Meu aplicativo final fará apenas cálculo e comunicação - nenhum armazenamento. Portanto, um sistema operacional sem sistema de arquivos faz sentido - pelo menos para minha aplicação.

Responder1

O aumento de tamanho de ter um initramfs não se deve ao driver ramfs (tem apenas alguns kB e é necessário para outras coisas de qualquer maneira), mas ao próprio initramfs. O initramfs contém programas necessários para montar o sistema de arquivos raiz real.

O Initramfs torna muito mais fácil, e em alguns casos possível (por exemplo, criptografado /), inicializar o sistema. É altamente recomendável mantê-lo em hardware estilo PC com muitos periféricos hotpluggable. Por outro lado, faz muito sentido inicializar um dispositivo embarcado sem qualquer initramfs, com um kernel que suporte apenas a configuração de hardware específica para a qual foi criado.

É claro que o kernel precisa inicializar em um sistema de arquivos: deve haver alguma maneira de ele carregar qualquer aplicativo que você queira executar. Se você não vai executar nada, é melhor manter a máquina desligada.

Se você não quiser usar um initramfs, apenas diga ao seu bootloader para não passar um. Também não inclua um na saída da compilação do kernel, é claro - como isso acontece, se é que depende da arquitetura e do carregador de inicialização: por exemplo, vmlinuxe bzImagenão inclua o initramfs (eles são o kernel bruto e compactado, respectivamente ), mas uImage(para U-Boot) empacota o kernel e o initramfs, se houver.

(Tecnicamente, comomikeservnotas, sempre há um initramfs - mas por padrão, é um arquivo vazio de 134 bytes. O que você está vendo, e do qual deseja se livrar, é um initramfs “verdadeiro” e não vazio, criado pelo seu processo de construção e contendo ferramentas que são então usadas para montar o sistema de arquivos raiz.)

Lembre-se, um initramfs pode ser uma maneira razoável de criar um sistema de aplicativo único sem dados persistentes: coloque todo o seu aplicativo no initramfs, inicialize-o e guarde-o. Isso torna mais fácil organizar seu armazenamento persistente ou imagem de inicialização (tudo que você precisa é do kernel e do initramfs, que podem ser empacotados). Porém, há desvantagens nessa abordagem: todos os dados no initramfs serão armazenados permanentemente na RAM e você não poderá modificar facilmente os arquivos na imagem de inicialização; será necessário reconstruir o arquivo.

Responder2

DeLFS:

O único propósito de um initramfs é montar o sistema de arquivos raiz. O initramfs é um conjunto completo de diretórios que você encontraria em um sistema de arquivos raiz normal. Ele é agrupado em um único arquivo cpio e compactado com um dos vários algoritmos de compactação.

...

Existem apenas quatro razões principais para ter um initramfs no ambiente LFS: carregar o rootfs de uma rede, carregá-lo de um volume lógico LVM, ter um rootfs criptografado onde uma senha é necessária, ou pela conveniência de especificar o rootfs como um ETIQUETA ou UUID. Qualquer outra coisa geralmente significa que o kernel não foi configurado corretamente.

...

Para a maioria das distribuições, os módulos do kernel são o maior motivo para ter um initramfs. Em uma distribuição geral, existem muitas incógnitas, como tipos de sistemas de arquivos e layouts de disco. De certa forma, isso é o oposto do LFS, onde os recursos e o layout do sistema são conhecidos e um kernel personalizado normalmente é construído. Nesta situação, um initramfs raramente é necessário.

Outra fontewww.kernel.org

Além disso, existem muitos sistemas Linux que gostam de roteadores que não usam initramfs.

Responder3

Você precisa de um initramfs para configurações mais complexas, como inicialização de rede, ou lvm ou raid, pois eles exigem alguns utilitários de modo de usuário para configurar o acesso ao root fs. Para uma partição simples e convencional em um disco, contanto que você tenha os drivers de disco integrados ao kernel e especifique o argumento root pelo caminho do dispositivo em vez do UUID, você poderá fazer isso sem um initramfs. É claro que o caminho do dispositivo está sujeito a alterações, dependendo de quais dispositivos plug and play (ou seja, usb) você conectou, ou até mesmo variações aleatórias de tempo, e é por isso que quase todo mundo usa uuids e um initramfs para confiabilidade.

Responder4

Se sua partição raiz estiver em um disco que usa uma tabela de partição MBR e você quiser um nome de dispositivo de bloco persistente como root=parâmetro para o kernel, será necessário usar um initramfs. /dev/sdXnão é persistente, PARTUUID=é um recurso exclusivo do GPT e LABEL=não UUID=é visível para o kernel nos estágios iniciais da inicialização. Um initramfs pode carregar os drivers de armazenamento e sistema de arquivos LABEL=e UUID=fica visível para o kernel.

informação relacionada