Script Initramfs-tools para montar pastas compactadas em tmpfs

Script Initramfs-tools para montar pastas compactadas em tmpfs

Estou tentando criar uma pequena partição de resgate (~ 800 MB de espaço livre depois de todas as outras partições de sistema e armazenamento) para um laptop com hardware especializado que requer kernel especial e módulos de kernel, de modo que ferramentas de resgate de estoque, como Clonezilla Live e GParted Live, não não funciona muito bem. A partição é muito pequena para incluir os módulos e software necessários para o que eu gostaria de construir, então a maior parte do sistema precisa ser compactada e carregada na RAM em tempo de execução. Além disso, prefiro que o sistema seja totalmente extraído em vez de confiar no squashfs, e gostaria de poder salvar as alterações feitas no sistema tanto quanto a partição permitir. Usando o Ubuntu 20.04 como sistema base, desenvolvi o seguinte esquema para esta finalidade:

  1. Depois de construir o sistema inicial em chroot, crie e esvazie a pasta /ramcomo ponto de montagem para tmpfshospedar o sistema descompactado e os arquivos do usuário em tempo de execução, mova todas as pastas de arquivos do sistema e do usuário ( home, usr, var, opt, etc,etc.) /rame substitua cada um por um link simbólico para /ram/$dir. Compacte /ramcomo /ram.tar.gze deixe os pontos de montagem especiais ( dev, sys, run, tmpe proc) e também bootem rootfs. Exclua /ram/*e grave rootfsna partição.
  2. Na inicialização, após o kernel e initrdserem carregados, pré-montar rootfs, montar tmpfse /ramextrair o conteúdo de /ram.tar.gzinto /ram. Isso deve acontecer antes rootfsda substituição initramfscomo root, caso contrário rootfsnão será possível acessar os utilitários necessários para montar /rame extrair do arquivo compactado.
  3. Monte rootfse prossiga com a inicialização.
  4. No desligamento, faça backup /ram.tar.gze /ram.tar.gz.bakcompacte o arquivo modificado /ramem /ram.tar.gz. Isto pode ser conseguido usando systemd.

Obviamente, as coisas podem dar errado na etapa 4 e, portanto, a etapa 2 precisa incluir a integridade /ram.tar.gze carregar o backup se isso falhar, mas devem ser apenas alguns comandos adicionais para incluir no initramfs-toolsscript e além do escopo da minha pergunta, que é :

Sem alterar /usr/share/initramfs-tools/init, como faço para criar um script /etc/initramfs-tools/scriptspara realizar a etapa 2? Os comandos devem ser fáceis o suficiente como

mount -t tmpfs -o $OPTIONS none /ram
tar xvzf ram.tar.gz

Mas não sei qual pasta incluir o script (init? local? top? bottom? premount?) e como trabalhar com o PREREQcabeçalho no próprio script.

Responder1

Acabou sendo bastante simples. Criar:

/etc/initramfs-tools/scripts/local-bottom/ramfiles
#!/bin/sh

set -e

PREREQ=""

prereqs()
{
        echo "${PREREQ}"
}

case "${1}" in
        prereqs)
                prereqs
                exit 0
                ;;
esac

mount -t tmpfs -o size=100% none ${rootmnt}/ram
tar xvzf ${rootmnt}/ram.tar.gz -C ${rootmnt}


então

sudo chmod +x /etc/initramfs-tools/scripts/local-bottom/ramfiles
sudo update-initramfs -u

informação relacionada