Aviso: eu implementei essa solução e ela funciona, mas os tempos de mesclagem para retornar ao instantâneo podem levar o processo de inicialização a demorar muito tempo se grandes alterações forem feitas no sistema durante a última inicialização. Durante esse período de espera, pode parecer aos usuários que o sistema está travando!
Lembre-se também de que qualquer pessoa que possua conhecimento suficiente para montar o instantâneo, poderá fazer alterações no estado "congelado". Aproveitei essa possibilidade de atualizar sistemas "congelados", mas, novamente, isso também pode aumentar o tempo necessário para mesclar (reverter para) o instantâneo!
Instantâneos do LVM + cron + script = estado "congelado"
Recentemente, comecei a pesquisar no LVM e ocorreu-me que era possível criar um estado "congelado" em uma máquina usando o LVM e seus recursos de instantâneo. Obviamente, esse método requer um sistema configurado usando o LVM (ou pelo menos o LVM nas partições a serem congeladas).
Resumo:
- Instale o sistema em partições LVM reservando espaço suficiente em um PV para uma captura instantânea
- Configure o sistema da maneira que desejar.
- Crie um trabalho cron que seja executado como raiz na inicialização para mesclar o instantâneo e crie um novo instantâneo para substituir o mesclado
- Todas as reinicializações sucessivas revertem para o instantâneo. Todas as capturas instantâneas criadas são tiradas do sistema no estado em que você a criou.
- Como um bônus adicional, o instantâneo pode ser montado e modificado (desde que você tenha privilégios de root) e o estado "congelado" pode ser atualizado, se necessário.
Prova de conceito: congele tudo, exceto uma partição, a partir de uma instalação limpa
A instalação:
- Inicialize a partir de um disco / USB ativo do Ubuntu e escolha a opção "Experimente o Ubuntu sem instalar". Isso é importante para configurar manualmente partições com o LVM
- Quando o Ubuntu carrega a partição do disco, use a ferramenta de sua escolha, para que ela tenha uma partição que ocupa todo o espaço da unidade. Aqui está o que eu estou trabalhando:
- Em seguida, em um terminal, configure o LVM
/dev/sda1. Vou colocar a maior parte do sistema em uma única partição, mas você não precisaria.
sudo pvcreate /dev/sda1
sudo vgcreate ubuntu-vg /dev/sda1
sudo lvcreate -n swap -L 1G ubuntu-vg
sudo lvcreate -n unfrozen -L 10G ubuntu-vg
sudo lvcreate -n root -l +50%free ubuntu-vg
- Agora, se você for executado
sudo vgsseguido por sudo lvsvocê, poderá ver que a quantidade de espaço livre restante no grupo de volumes "ubuntu-vg" (VFree na saída vgs) é igual à quantidade de espaço ocupado pela raiz do volume lógico " "(LSize na saída lvs). No meu caso, tenho 506,44g grátis no ubuntu-vg e minha partição raiz é 506,44g grande. Se o espaço livre restante no grupo de volumes for igual ao tamanho da partição que eu quero congelar, conseguirá apagar toda a partição e ainda conseguir recuperar com uma reinicialização. Deixe o restante do espaço livre no ubuntu-vg por enquanto não utilizado. Usaremos mais tarde.
- Agora instale o Ubuntu usando o particionamento manual

- Quando a instalação estiver concluída, vá em frente e reinicie o sistema recém-instalado.
- Depois de inicializado em seu novo sistema, configure-o para que seja exatamente da maneira que você deseja que seja quando o computador inicializar toda vez.
- Se você não fizer alterações acidentais no snapshot e não desejar que a partição do snapshot apareça na barra de menus ...
mkdir /steady
- Edite
/etc/fstabadicionando (esta é uma linha) /dev/ubuntu-vg/steadystate /steady ext4 defaults,ro,nofail 0 1como a última linha do arquivo
- Como coisas como atualizações ficam impressionadas com cada reinicialização, você pode desativá-las.
- Se você tiver uma partição descongelada como a minha em / descongelada, não se esqueça de torná-la acessível aos usuários que precisam acessar
- Depois de configurar o sistema exatamente da maneira que você deseja, crie o seguinte script (você precisará de privilégios de root) e salve como
/root/steadystate.shno seu editor favorito. Observe que se você alterou o nome do grupo de volumes ao configurar o LVM, também será necessário atualizá-lo no script abaixo.
#!/bin/bash
LOG=/dev/kmsg
# wait for merge in progress
echo -n "Reverting to snapshot if present... " | tee -a $LOG
merging=1
while [ "$merging" == "1" ];
do
/usr/sbin/service lightdm stop #prevent the auto-login/login screen from loading
[ "$(sudo lvs -a | grep steadystate)" == "" ] && merging=0
sleep 1
done
# create snapshot
echo -n "Creating new snapshot... " | tee -a $LOG
/sbin/lvcreate -s -n steadystate -l +100%free /dev/ubuntu-vg/root
# make sure root comes online before trying to merge
while [ ! -e /dev/mapper/ubuntu--vg-root];
do
sleep .5;
done
echo -n "Scheduling reset to snapshot... " | tee -a $LOG
/sbin/lvconvert --merge /dev/ubuntu-vg/steadystate
echo -n "Starting lightdm... " | tee -a $LOG
/usr/sbin/service lightdm start
- Por fim
sudo crontab -e, execute , selecione um editor e coloque @reboot /bin/bash /root/steadystate.shno final do arquivo. Salvar e fechar ( Ctrl+ X; responda Ypara salvar)
- Reinicialize e você deverá ter um sistema congelado, exceto a partição montada em / descongelada
Isso funciona porque o instantâneo é criado no momento da inicialização e, embora passemos o comando para mesclar o instantâneo logo depois, o instantâneo não pode ser mesclado enquanto o volume lógico para raiz está ativo. Portanto, adia a ação de mesclagem até a próxima vez em que o / dev / ubuntu-vg / root for ativado, o que ocorrerá na próxima reinicialização. Essa ação também seria acionada se o sistema fosse inicializado a partir de um USB ativo.
Apenas para começar, entrei após uma reinicialização e executei o sudo apt remove --purge firefox* libreoffice-* unity*que normalmente não aconselho a fazer, porque remove alguns programas úteis e coloca o sistema no que poderia ser um estado menos que o desejável!
O sistema nem sequer desligou corretamente a partir da GUI. Então, como se corrige isso? Reinicie!
Após a reinicialização, tudo estava em ordem. Firefox, LibreOffice e Unity estavam de volta aonde pertenciam.
Eu também tentei remover o linux *. Isso deixou a máquina incapaz de inicializar, no entanto, simplesmente inicializar a partir de um disco Ubuntu ao vivo parecia fazer a fusão acontecer. Reiniciar novamente deixou o sistema em seu estado "congelado"
Se você quiser fazer alterações, poderá (re) montar o instantâneo com privilégios rw e, em seguida, executar o chroot nele e fazer as alterações que desejar permanecer permanentes. Isso não é perfeito, mas é uma prova de conceito.