Por que precisamos de initramfs e initrd?

3

Por exemplo, temos um sistema de arquivos exótico no disco e, para carregar o sistema, precisamos montar o sistema de arquivos raiz. Mas nós não podemos porque não existe um driver adequado na imagem do kernel.

Deixe-me explicar como eu entendo kernel e initrd .

  1. Quando o kernel é compilado, podemos selecionar diferentes módulos para serem incluídos na imagem do kernel (um único arquivo)
  2. Por exemplo, meu sistema de arquivos raiz é reiserfs e eu configurei o kernel para não incluir module para este sistema de arquivos
  3. Nesse caso, o kernel não sabe como montar esse sistema de arquivos e precisa de ajuda - > então carregue initramfs na memória
  4. Encontre o módulo apropriado no ram fs (lib / modules ou etc)
  5. Carregue este módulo no kernel
  6. Agora o kernel pode montar reiserfs em montagens e depois descarrega (libera) a memória ocupada por ramfs

Estou certo?

Mas eu não entendo por que precisamos de initramfs em cada distro (eu já vi isso em todas as distros que já instalei) se a maioria dos drivers específicos já estão presentes na imagem do kernel (arquivo único) precisam de drivers para sistemas de arquivos quando o kernel inicializa outros drivers podem ser carregados do sistema de arquivos depois que ele é montado.

Então, é realmente parte essencial de qualquer distro?

P.S O que é mais usado initramfs ou initrd e por quê?

    
por solderingiron 09.06.2016 / 22:56

3 respostas

4

A força vem de todas as outras coisas que você pode fazer além de carregar módulos. Basicamente, ele oferece um espaço de usuário e a possibilidade de fazer todas as coisas que você pode fazer com isso.

Um exemplo: eu uso um initrd para ter um root fs criptografado, configurando isso requer código que não faz sentido ter no kernel.

A seção "Justificativa" da página da Wikipédia no initrd tem mais exemplos.

O initramfs é uma implementação mais recente (mas ainda bastante antiga) da mesma ideia, mas o nome initrd sobreviveu com frequência para se referir à imagem usada como o espaço inicial do usuário.

Uma razão totalmente diferente que acabei de pensar: Dispositivos embarcados, eles podem não ter memória suficiente para lidar com um kernel que inclui tudo.

    
por 09.06.2016 / 23:23
2

Existem muitos motivos para ter um initramfs, alguns estão abaixo.

  1. Quando você precisa ter um / usr / var separado, algumas distros dependem de ter esses diretórios em /
  2. Quando você deseja criptografar / mas gostaria de ter / boot em um pendrive, pois não é possível ter um / boot
  3. criptografado
  4. Quando você não quer ter coisas no kernel embutido, mas como módulo, dessa forma você só carrega o que você precisa e isso é feito no espaço do usuário inicial
  5. Ao usar o dmraid em /
  6. Quando você precisa de mais controles finos, ou seja, você tem um servidor remoto que você criptografou / no qual agora requer que ele configure uma rede no início do espaço do usuário junto com dropbear (tiny ssh daemon) para permitir que você decodifique seu / e continue com inicialização normal;)

Eu posso continuar com o motivo pelo qual você precisa de um initramfs, mas no final, se houver um software que precise ser executado antes de 'switch_root ...', você precisará de um initramfs para isso.

    
por 10.06.2016 / 00:17
1

Suponho que é verdade que o hardware moderno não se importaria, por exemplo um kernel de 50MB. Você poderia argumentar que carregar tudo como módulos separados não é tão importante há algum tempo.

No entanto, o sistema ram inicial permite a inicialização de qualquer configuração possível, sem precisar de nenhum tratamento especial no kernel. Escrever código do kernel é um grande negócio. O sistema de ram inicial é a solução correta. Podemos usar muitos códigos semelhantes ao sistema principal, por ex. systemd ; -).

A inicialização a partir de um sistema de arquivos criptografado é um ótimo exemplo disso. O kernel não precisa solicitar a frase secreta.

Um exemplo todos os usos da instalação moderna é encontrar o sistema de arquivos raiz pelo UUID (ou talvez o nome do volume do LVM). Isso é útil porque, do contrário, sua inicialização é interrompida quando você remove uma partição não relacionada, porque todas elas são renumeradas. Ou quando você move discos ao redor ou entre computadores. Ou quando o disco é um CD ao vivo.

Por que precisamos de um sistema de arquivos RAM? Porque não queremos estar strongmente acoplados ao firmware / boot loader. Ele pode nos entregar os dados como um bloco de memória e pronto. Queremos manter o processo de inicialização o mais simples possível. A inicialização é crítica e um caso especial. Não precisamos de uma interface complexa com o outro software de casos especiais. Especialmente o caso do firmware. Firmware é um caso tão especial, então não nos importaríamos com ele o tempo todo, ele será cheio de bugs que ninguém notou. E o firmware é tão crítico que qualquer correção é muito arriscada. Costumava ser que era ROM e você não poderia consertá-lo.

    
por 10.06.2016 / 00:49