
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:
- Depois de construir o sistema inicial em
chroot
, crie e esvazie a pasta/ram
como ponto de montagem paratmpfs
hospedar 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.)/ram
e substitua cada um por um link simbólico para/ram/$dir
. Compacte/ram
como/ram.tar.gz
e deixe os pontos de montagem especiais (dev
,sys
,run
,tmp
eproc
) e tambémboot
emrootfs
. Exclua/ram/*
e graverootfs
na partição. - Na inicialização, após o kernel e
initrd
serem carregados, pré-montarrootfs
, montartmpfs
e/ram
extrair o conteúdo de/ram.tar.gz
into/ram
. Isso deve acontecer antesrootfs
da substituiçãoinitramfs
como root, caso contráriorootfs
não será possível acessar os utilitários necessários para montar/ram
e extrair do arquivo compactado. - Monte
rootfs
e prossiga com a inicialização. - No desligamento, faça backup
/ram.tar.gz
e/ram.tar.gz.bak
compacte o arquivo modificado/ram
em/ram.tar.gz
. Isto pode ser conseguido usandosystemd
.
Obviamente, as coisas podem dar errado na etapa 4 e, portanto, a etapa 2 precisa incluir a integridade /ram.tar.gz
e carregar o backup se isso falhar, mas devem ser apenas alguns comandos adicionais para incluir no initramfs-tools
script 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/scripts
para 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 PREREQ
cabeç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