Espero estar no lugar certo. Não encontrei nenhuma sugestão na "web" sobre minha dúvida. Como poderia um sistema operacional, digamos uma distribuição do linux, ser carregado do disco rígido e executar todas as modificações (todos os aplicativos) na RAM? Em outras palavras, como poderíamos usar um sistema operacional para ler os dados de que precisa de um disco rígido e apenas gravar o que precisa na RAM.
O objetivo é garantir que todas as "instruções" (pode ser a palavra errada) feitas pelo sistema operacional (e todos os aplicativos que ele executa) sejam feitas exclusivamente na RAM (sem gravação no disco rígido).
Sei que algumas distribuições Linux podem ser totalmente carregadas na RAM, mas o inconveniente é o tamanho do sistema que obtemos: não podemos ter muito espaço disponível para aplicativos na RAM, enquanto um sistema normal encontrará o aplicativo necessário na unidade e carregará na memória. Isso poderia ser feito usando uma RAM extra para o sistema, mas não é uma ótima solução em comparação com o uso de um disco rígido para salvar os aplicativos de que precisamos (devido aos preços reais da RAM)
Também pensei em uma máquina virtual que pode ler a unidade para usar o aplicativo e apenas gravar na RAM, na maioria dos casos. Mas é necessário carregar a VM de um sistema operacional existente e carregado, então existe uma maneira de pular a parte do sistema operacional existente?
Se você tiver alguma sugestão ou palavra técnica que eu tenha que usar para pesquisar sozinho, obrigado.
É possível, mas não trivial. Darei algumas dicas, mas não posso fornecer etapas detalhadas, pois nunca tentei isso sozinho.
OverlayFS - Permite criar um sistema de arquivos "em camadas", onde a camada inferior é somente leitura e a camada superior é gravável. Dito isto, a camada inferior ainda é completamente mutável (você pode editar, excluir arquivos etc., mas eles não são realmente alterados - as alterações são armazenadas inteiramente na camada superior) e funciona como um sistema de arquivos completo.
tmpfs - É outro sistema de arquivos completo que reside inteiramente na memória. Você pode definir uma capacidade inferior à quantidade de RAM para evitar o bloqueio acidental do sistema operacional. Além disso, a capacidade não utilizada está disponível como RAM regular, o que é bom.
pivot_root - Uma chamada de sistema que se move
/
para um diretório diferente.Normalmente, no início do processo de inicialização, pivot_root é chamado para alternar do espaço do usuário inicial para o sistema de arquivos em disco. Você pode alterar isso: crie OverlayFS com sistema de arquivos em disco na camada inferior e tmpfs na camada superior e, em seguida, pivot_root para OverlayFS.
Esteja avisado que a camada superior pode crescer rapidamente, consumindo muita RAM disponível. O zram pode ser usado para reduzir o uso de RAM ao custo do uso da CPU, mas não é uma solução definitiva. A atualização permanente do sistema operacional em disco também será complicada.
Vou expandir um pouco sobre o assunto para ajudar um iniciante completo como comecei.
Processo de inicialização
O primeiro disco rígido é normalmente dividido em 2 seções:
/dev/sda1
na maioria das distribuições linux/dev/sdb1
. (os arquivos do sistema e do usuário podem estar em seções diferentes)No setor de inicialização há uma imagem do kernel, que na verdade é uma imagem initramfs . Um intramfs é o "menor" sistema funcional carregado na RAM. Pode ser visto como uma pequena versão do seu sistema linux: você encontrará módulos, alguns diretórios que você vê em seu sistema habitual, mas com um conteúdo diferente. Esse pequeno sistema linux é usado para verificar a configuração do seu computador (que tipo de dispositivo de armazenamento você usa, quais são seus componentes, etc.) arquivos de sistema reais para torná-lo acessível para mais tarde. Em outras palavras, quando você liga o computador, ele lê a
/dev/sda1
partição e tenta encontrar a partição/dev/sdb1
para um uso posterior. Mas para entender como seus arquivos são acessíveis, você precisa entender os pontos de montagemPonto de montagem
No Linux, todos os diretórios são acessíveis em um único diretório chamado root , que é
/
. Não misture o armazenamento do usuário root/root
com o root do sistema de arquivos/
. Quando você conecta um dispositivo de armazenamento externo, como uma unidade USB, seu sistema cria um novo diretório e o usa como raiz desse dispositivo. Em outras palavras, nesse diretório você pode acessar todos os arquivos armazenados nele. Esse diretório é chamado de ponto de montagem. Para criar um ponto de montagem você precisa ter um dispositivo (um USB por exemplo), um diretório e um sistema de arquivos (um programa que é usado como uma interface entre seus programas de espaço de usuário e a memória física de seu dispositivo) e então use o seguinte comando:Tecnicamente, quando você conecta algo, precisa montar manualmente o dispositivo. Mas o linux faz isso automaticamente quando você conecta um dispositivo comum (como um USB). Todos os dispositivos internos do seu computador são montados automaticamente durante a inicialização graças ao arquivo file
/etc/fstab
que contém todas as informações necessárias para montá-los (como as partições do seu disco rígido, leitor de cd-ROM, ...) Para ver todos os outros pontos de montagem usado atualmente pelo sistema, você pode ver/proc/mounts
Montando o sistema de arquivos raiz na inicialização
De volta ao processo de inicialização, quando a imagem initramfs é carregada na memória, ela verifica qual partição do seu disco rígido é usada para armazenar seus arquivos (como
/dev/sdb1
) e monta-a na raiz do seu sistema de arquivos comumente chamado de/root
. Isso/root
não é o mesmo que/root
em seu espaço de usuário (quando seu sistema está completamente carregado). Com isso/root
, você terá acesso a todos os seus arquivos e ao/root
que você conhece:O sistema de arquivos raiz é montado como somente leitura durante a inicialização e então remontado como leitura/gravação em um sistema de arquivos virtual (que é apenas uma maneira de lidar com diferentes dispositivos, portanto, diferentes sistemas de arquivos relacionados a cada dispositivo, com os mesmos comandos para programas em seu espaço de usuário )
Initrd vs Initramfs
Initramfs é o sucessor do initrd que foi carregado na memória com todas as ferramentas necessárias para então montar o sistema de arquivos real e finalmente se descarregar da memória. Mas um initramfs permanece na memória e todo o sistema é baseado no sistema de arquivos raiz que é montado pelo initramfs. Essa diferença também implica em comandos diferentes ( por exemplo
pivot_root
, torne- seswitch_root
)Editar initramfs
A imagem do kernel usada para o processo de inicialização pode ser editada no sistema. Essa imagem está armazenada em
/boot
. Você pode editá-lo descompactando -o. O processo que você deseja editar é oinit
da sua imagem (que é o primeiro script executado) e precisamente a parte quando o sistema de arquivos real é montado sob o/root
qual se parece com:Observe que
${ROOT}
contém o nome do dispositivo usado para seus arquivos de sistema (por exemplo/dev/sdb1
, mas pode ser diferente)Mas essa é uma solução confusa porque quando a imagem for atualizada pelo seu sistema (por alguns motivos), suas modificações serão perdidas. Mas o linux tem a solução para manter suas modificações em todas as imagens do kernel, mesmo após as atualizações: initramfs-tools . Todas as modificações que você terá que fazer serão feitas em
/etc/initramfs-tools
Então, depois de editar sua imagem, use o seguinte comando para atualizar a imagem do kernel:Essa imagem será usada após a próxima reinicialização. Portanto, para evitar travar seu sistema, use uma máquina virtual como virtualBox ou
Sobreposição
Para montar a sobreposição sobre um diretório existente, use:
Observe que não há absolutamente nenhum espaço entre
lowerdir=..,upperdir=...,workdir=...
e o últimooverlay
pode ser substituído pornone
(porque você não monta nada, nenhum dispositivo sobre/myDir
; basta montaroverlay
). E quando você fizer algo ruim (se um diretório não existir ou você colocar espaços nas opções de montagem-o ...
, o resultado será "não existe tal dispositivo em/etc/fstab
" ( overlay gerencia terrivelmente erros durante a montagem). Você pode olhar para esse link e aquele para encontrar mais ajuda.Abaixo
/myDir
você verá todos os arquivos que estão em/overlay/lower
e todas as modificações que você fez (que estão armazenadas em/overlay/upper
):tmpfs
tmpfs é um sistema de arquivos que pode manipular a RAM como uma memória padrão. Para criar um disco RAM (uma parte da RAM que funciona como uma parte de um disco rígido), use:
Em seguida, todas as operações feitas
/myDir
serão salvas na RAM.Solução
Módulos
Adicione o módulo de sobreposição à imagem do kernel (para que o módulo possa ser usado durante o processo de inicialização). Adicionar
overlay
no arquivo/etc/initramfs-tools/modules
ganchos
Adicione o seguinte script em
/etc/initramfs-tools/hooks
( como um executável )Roteiro
Adicione o seguinte script em
/etc/initramfs-tools/scripts/init-bottom
(como um executável)Atualizar
Atualize a imagem do kernel com:
update-initramfs -u
Links para montar a sobreposição sobre o sistema de arquivos raiz
resolva problemas de corrupção de cartão SD raspbian com partição raiz montada somente leitura
Initramfs personalizados
Não é possível desmontar após pivot_root
Montar raiz como overlayfs
Can not mount overlayfs inside initrd
How to use OverlayFS to protect the root filesystem ?