Advertencia: he implementado esta solución y funciona, pero los tiempos de fusión para volver a la instantánea pueden hacer que el proceso de arranque tarde mucho tiempo si se realizaron grandes cambios en el sistema durante su último arranque. ¡Durante este período de espera, puede parecer a los usuarios que el sistema se está bloqueando!
También tenga en cuenta que cualquiera que tenga el conocimiento suficiente para montar la instantánea, podría hacer cambios al estado "congelado". He aprovechado esta posibilidad para actualizar los sistemas "congelados", pero de nuevo, ¡esto también puede aumentar el tiempo que lleva fusionar (volver a) la instantánea!
Instantáneas LVM + cron + script = estado "congelado"
Recientemente comencé a excavar en LVM y se me ocurrió que uno podría crear un estado "congelado" en una máquina usando LVM y sus capacidades de instantánea. Por supuesto, este método requiere un sistema que esté configurado usando LVM (o al menos LVM en las particiones a congelar).
Resumen:
- Instale el sistema en particiones LVM reservando suficiente espacio en un PV para una instantánea
- Configure el sistema de la manera que lo desee.
- Cree un trabajo cron que se ejecute como raíz en el arranque para fusionar la instantánea y cree una nueva instantánea para reemplazar la fusionada
- Todos los reinicios sucesivos vuelven a la instantánea. Todas las instantáneas creadas se toman del sistema en el estado en que lo creó.
- Como beneficio adicional, la instantánea se puede montar y modificar (siempre que tenga privilegios de root) y el estado "congelado" se puede actualizar si es necesario.
Prueba de concepto: congele todo excepto una partición de una instalación limpia
La instalación:
- Arranque desde un disco / USB de Ubuntu en vivo y elija la opción para "Probar Ubuntu sin instalar". Esto es importante para configurar particiones manualmente con LVM
- Cuando Ubuntu carga la partición, su disco utiliza la herramienta que elija para que tenga una partición que ocupe todo el espacio de la unidad. Esto es con lo que estoy trabajando:
- A continuación, en un terminal, configure LVM activado
/dev/sda1
. Voy a poner la mayor parte del sistema en una sola partición, pero no tendría que hacerlo.
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
- Ahora, si tuviera que ejecutar
sudo vgs
seguido sudo lvs
, debería poder ver que la cantidad de espacio libre que queda en el grupo de volúmenes "ubuntu-vg" (VFree bajo la salida vgs) es igual a la cantidad de espacio ocupado por la raíz del volumen lógico " "(LSize bajo salida lvs). En mi caso, tengo 506.44g gratis en ubuntu-vg y mi partición raíz es 506.44g grande. Si el espacio libre que queda en el grupo de volúmenes es igual al tamaño de la partición que quiero congelar, debería poder borrar toda la partición y aún así poder recuperarme con un reinicio. Deje el resto del espacio libre en ubuntu-vg sin usar por ahora. Lo usaremos más tarde.
- Ahora instale Ubuntu usando particionamiento manual
- Cuando finalice la instalación, continúe y reinicie en el sistema recién instalado.
- Una vez que se inicia en su nuevo sistema, configúrelo para que sea exactamente como desea que sea cuando la computadora se inicia cada vez.
- Si no realiza cambios accidentales en la instantánea y no desea que la partición de la instantánea se muestre en la barra de menú ...
mkdir /steady
- Edite
/etc/fstab
agregando (esto es todo una línea) /dev/ubuntu-vg/steadystate /steady ext4 defaults,ro,nofail 0 1
como la última línea del archivo
- Dado que cosas como las actualizaciones quedarán impresionadas con cada reinicio, es posible que desee desactivarlas.
- Si tiene una partición no congelada como la mía en / unfrozen, no olvide hacerla accesible para los usuarios que necesitan acceder a ella.
- Una vez que haya configurado el sistema exactamente como lo desea, cree el siguiente script (necesitará privilegios de root) y guárdelo como
/root/steadystate.sh
con su editor favorito. Tenga en cuenta que si cambió el nombre del grupo de volúmenes al configurar LVM, también deberá actualizarlo en el script a continuación.
#!/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
- Finalmente ejecute
sudo crontab -e
, seleccione un editor y colóquelo @reboot /bin/bash /root/steadystate.sh
al final del archivo. Guardar y cerrar ( Ctrl+ X; responder Ypara guardar)
- Reinicie, y debería tener un sistema que esté congelado, excepto la partición montada en / sin congelar
Esto funciona porque la instantánea se crea en el momento del arranque, y aunque pasamos el comando para fusionar la instantánea inmediatamente después, la instantánea no se puede fusionar mientras el volumen lógico para root esté activo. Por lo tanto, pospone la acción de fusión hasta la próxima vez que se active / dev / ubuntu-vg / root, que es el próximo reinicio. Esta acción también se activaría si el sistema se iniciara desde un USB en vivo.
¡Solo por diversión, entré después de un reinicio y ejecuté sudo apt remove --purge firefox* libreoffice-* unity*
lo que normalmente no recomendaría hacer porque elimina algunos programas útiles y pone el sistema en un estado que podría ser menos que deseable!
El sistema ni siquiera se apaga correctamente desde la GUI. Entonces, ¿cómo se soluciona esto? ¡Reiniciar!
Al reiniciar, todo volvió a estar en orden. Firefox, LibreOffice y Unity estaban de vuelta donde pertenecían.
También intenté eliminar Linux *. Esto dejó a la máquina incapaz de arrancar, sin embargo, simplemente arrancar desde un disco Ubuntu en vivo pareció hacer que la fusión tuviera lugar. Reiniciar nuevamente dejó el sistema en su estado "congelado"
Si quisiera poder hacer cambios, podría (re) montar la instantánea con privilegios rw y luego hacer un chroot y hacer los cambios que desea que permanezcan permanentes. Esto no es perfecto, pero es una prueba de concepto.