Sobre la (no) purga de snapshots automáticos en Ubuntu 20.04 con zsys
Una de las características estrella —si bien experimental— es la instalación del sistema sobre ZFS. Cuando se instala de esta manera el demonio zsys
se encarga de realizar snapshots del sistema antes de instalar cualquier paquete y snapshots de los directorios home
de los usuarios cada vez que inician sesión y cada hora.
Se pueden consultar los detalles en: Primeras impresiones de Ubuntu 20.04 Focal Fossa.
Para resumir:
/usr/libexec/zsys-system-autosnapshot
permite crear snapshots del sistema y también actualizargrub
para permitir revertir el estado del sistema. El snapshot se toma antes de instalar un paquete ygrub
se actualiza cuando se ha completado la instalación del paquete. El script se invoca mediante los hooks definidos en/etc/apt/apt.conf.d/90_zsys_system_autosnapshot
. Cuando se crea un snapshot de la raíz porque se isntala algo también se crea un snapshot de cada uno de los datasets de los usuarios con el mismo identificador./usr/lib/systemd/user/zsys-user-savestate.timer
es un timer dependiente de cada usuario. Invoca a/sbin/zsysctl state save
un minuto después de que el usuario inicie sesión y después una vez cada hora. En cada caso se crea un nuevo snapshot del directorio del usuario.- El comando
zsysctl show
muestra la lista de snapshots de la raíz y de loshome
de los usuarios. - Utilizando el nuevo menú del gestor de arranque es posible revertir el estado de la máquina a uno de los snapshots de la raíz restaurando solo la raíz o la raíz y los home de los usuarios.
Purga de los snapshots automáticos
Después de utilizar Ubuntu 20.04 durante cinco días la máquina de prueba tiene estos snapshots:
usuario@laika:/etc/apt/apt.conf.d$ zsysctl show Name: rpool/ROOT/ubuntu_hrsnga ZSys: true Last Used: current History: - Name: rpool/ROOT/ubuntu_hrsnga@autozsys_ycarpr Created on: 2020-05-09 14:11:28 - Name: rpool/ROOT/ubuntu_hrsnga@autozsys_nsjvim Created on: 2020-05-09 10:08:06 - Name: rpool/ROOT/ubuntu_hrsnga@autozsys_dedlwp Created on: 2020-05-09 10:05:56 - Name: rpool/ROOT/ubuntu_hrsnga@autozsys_lic9a8 Created on: 2020-05-09 10:01:17 - Name: rpool/ROOT/ubuntu_hrsnga@autozsys_jgduti Created on: 2020-05-07 13:11:36 - Name: rpool/ROOT/ubuntu_hrsnga@autozsys_vilhf5 Created on: 2020-05-07 13:11:03 - Name: rpool/ROOT/ubuntu_hrsnga@autozsys_ty866o Created on: 2020-05-07 12:54:05 - Name: rpool/ROOT/ubuntu_hrsnga@autozsys_t0an3y Created on: 2020-05-07 12:54:05 Users: - Name: root History: - rpool/USERDATA/root_i0pjda@autozsys_ycarpr (2020-05-09 14:11:28) - rpool/USERDATA/root_i0pjda@autozsys_nsjvim (2020-05-09 10:08:06) - rpool/USERDATA/root_i0pjda@autozsys_dedlwp (2020-05-09 10:05:57) - rpool/USERDATA/root_i0pjda@autozsys_lic9a8 (2020-05-09 10:01:17) - rpool/USERDATA/root_i0pjda@autozsys_jgduti (2020-05-07 13:11:36) - rpool/USERDATA/root_i0pjda@autozsys_vilhf5 (2020-05-07 13:11:04) - rpool/USERDATA/root_i0pjda@autozsys_ty866o (2020-05-07 12:54:05) - rpool/USERDATA/root_i0pjda@autozsys_t0an3y (2020-05-07 12:54:05) - Name: usuario History: - rpool/USERDATA/usuario_i0pjda@autozsys_8cwk9a (2020-05-11 11:37:55) - rpool/USERDATA/usuario_i0pjda@autozsys_p0b75e (2020-05-11 10:36:55) - rpool/USERDATA/usuario_i0pjda@autozsys_62txpx (2020-05-11 09:35:54) - rpool/USERDATA/usuario_i0pjda@autozsys_0ev2ng (2020-05-10 20:38:34) - rpool/USERDATA/usuario_i0pjda@autozsys_16fy5a (2020-05-10 16:45:47) - rpool/USERDATA/usuario_i0pjda@autozsys_21vmrl (2020-05-10 15:44:47) - rpool/USERDATA/usuario_i0pjda@autozsys_trdiuj (2020-05-10 14:43:46) - rpool/USERDATA/usuario_i0pjda@autozsys_rghosj (2020-05-10 13:38:07) - rpool/USERDATA/usuario_i0pjda@autozsys_l3nu1g (2020-05-10 12:37:28) - rpool/USERDATA/usuario_i0pjda@autozsys_vh01pk (2020-05-10 11:37:16) - rpool/USERDATA/usuario_i0pjda@autozsys_bxa87w (2020-05-10 10:26:32) - rpool/USERDATA/usuario_i0pjda@autozsys_w61kut (2020-05-09 19:45:32) - rpool/USERDATA/usuario_i0pjda@autozsys_407m46 (2020-05-09 18:05:06) - rpool/USERDATA/usuario_i0pjda@autozsys_79x70r (2020-05-09 16:51:51) - rpool/USERDATA/usuario_i0pjda@autozsys_ycarpr (2020-05-09 14:11:28) - rpool/USERDATA/usuario_i0pjda@autozsys_n5c9f5 (2020-05-09 13:42:55) - rpool/USERDATA/usuario_i0pjda@autozsys_42t3x2 (2020-05-09 12:20:40) - rpool/USERDATA/usuario_i0pjda@autozsys_z8hxq2 (2020-05-09 11:19:40) - rpool/USERDATA/usuario_i0pjda@autozsys_moe05w (2020-05-09 10:19:00) - rpool/USERDATA/usuario_i0pjda@autozsys_nsjvim (2020-05-09 10:08:06) - rpool/USERDATA/usuario_i0pjda@autozsys_dedlwp (2020-05-09 10:05:57) - rpool/USERDATA/usuario_i0pjda@autozsys_lic9a8 (2020-05-09 10:01:17) - rpool/USERDATA/usuario_i0pjda@autozsys_d4ouls (2020-05-08 15:19:30) - rpool/USERDATA/usuario_i0pjda@autozsys_jgduti (2020-05-07 13:11:36) - rpool/USERDATA/usuario_i0pjda@autozsys_vilhf5 (2020-05-07 13:11:04) - rpool/USERDATA/usuario_i0pjda@autozsys_ty866o (2020-05-07 12:54:05) - rpool/USERDATA/usuario_i0pjda@autozsys_t0an3y (2020-05-07 12:54:05) usuario@laika:/etc/apt/apt.conf.d$
Aunque los snapshots de ZFS son muy ligeros es evidente que si se crean de manera automática convendrá tener algún sistema para eliminarlos de manera automática y liberar espacio.
El sistema automático para purgar snapshots de zsys
parece estar compuesto por el timer /lib/systemd/system/zsys-gc.timer
:
[Unit] Description=Clean up old snapshots to free space [Timer] OnStartupSec=10min OnUnitActiveSec=24h [Install] WantedBy=timers.target
Y la unidad /lib/systemd/system/zsys-gc.service
:
[Unit] Description=Clean up old snapshots to free space # We can't run it in a container ConditionVirtualization=!container [Service] Type=oneshot ExecStart=/sbin/zsysctl service gc
Que parece haberse ejecutado con normalidad pero no ha eliminado nada:
usuario@laika:/etc/apt/apt.conf.d$ systemctl status zsys-gc ● zsys-gc.service - Clean up old snapshots to free space Loaded: loaded (/lib/systemd/system/zsys-gc.service; static; vendor preset: enabled) Active: inactive (dead) since Mon 2020-05-11 09:44:51 CEST; 2h 47min ago TriggeredBy: ● zsys-gc.timer Process: 9792 ExecStart=/sbin/zsysctl service gc (code=exited, status=0/SUCCESS) Main PID: 9792 (code=exited, status=0/SUCCESS) may 11 09:44:49 laika systemd[1]: Starting Clean up old snapshots to free space... may 11 09:44:51 laika systemd[1]: zsys-gc.service: Succeeded. may 11 09:44:51 laika systemd[1]: Finished Clean up old snapshots to free space. usuario@laika:/etc/apt/apt.conf.d$
Porque si se invoca manualmente zsysctl service gc
sencillamente no hace nada.
Configuración para la purga automática
Desgraciadamente no existe un fichero de configuración para indicar algunos parámetros básicos como el número de snapshots a guardar o durante qué periodo de tiempo se deben preservar. Estos valores están definidos en el código fuente de la aplicación y no están al alcance del administrador (a no ser que compile su propia versión de zsys
).
Fichero: https://github.com/ubuntu/zsys/blob/master/internal/config/zsys.conf
Sin embargo tratándose de una característica experimental que puede hacer perder datos al usuario la versión de zsys
instalada por defecto no elimina ningún snapshot. Tal y como confirma este hilo de twitter.
Así que si el próximo curso planeamos utilizar Ubuntu 20.04 instalado sobre ZFS en las aulas será necesario implementar algún script que borre periódicamente snapshots antiguos para no consumir todo el espacio de disco.