La partición raiz (/) de archlinux se quedaba sin espacio cada cierto tiempo

Para solucionarlo (con la ayuda de la IA) implementé 2 timers de systemd que realizan una limpieza de paquetes viejos dejando sólo las 2 últimas versiones (para realizar un downgrade si hace falta) cada 3 dias y una limpieza de paquetes huérfanos cada 2 semanas. Los procesos se disparan a medianoche, y si el equipo no está encendido se disparan luego de 15 minutos del booteo, con un tiempo aleatorio para no sobrecargar el sistema. Aquí va el detalle:

Documentación — Automatización de mantenimiento de pacman

Objetivo

Implementar tareas automáticas de mantenimiento del sistema para:

  1. Limpiar caché de paquetes manteniendo solo 2 versiones
  2. Eliminar paquetes huérfanos
  3. Evitar ejecución simultánea entre equipos
  4. Ejecutar tareas pendientes tras reinicios
  5. No interferir con procesos de arranque

Componentes creados

Se definieron 2 servicios y 2 timers de systemd.


1. Limpieza de caché de paquetes

Servicio
sudo nano /etc/systemd/system/paccache-clean.service

Contenido:

[Unit]
Description=Limpiar cache de pacman (mantener 2 versiones)

[Service]
Type=oneshot
ExecStart=/usr/bin/paccache -rk2
Timer
sudo nano /etc/systemd/system/paccache-clean.timer

Contenido:

[Unit]
Description=Timer limpieza cache pacman

[Timer]
OnBootSec=15min
OnUnitActiveSec=3d
RandomizedDelaySec=10min
Persistent=true

[Install]
WantedBy=timers.target

Frecuencia efectiva: primera ejecución → 15-25 min después del boot repite → cada 3 días

2. Eliminación de paquetes huérfanos

Servicio
sudo nano /etc/systemd/system/pacman-orphans-clean.service

Contenido:

[Unit]
Description=Eliminar paquetes huérfanos

[Service]
Type=oneshot
ExecStart=/bin/sh -c '/usr/bin/pacman -Qtdq | /usr/bin/pacman -Rns --noconfirm -'
Timer
sudo nano /etc/systemd/system/pacman-orphans-clean.timer

Contenido:

[Unit]
Description=Timer limpieza paquetes huérfanos

[Timer]
OnBootSec=15min
OnUnitActiveSec=14d
RandomizedDelaySec=10min
Persistent=true

[Install]
WantedBy=timers.target

Frecuencia efectiva: primera ejecución → 15-25 min tras arranque repite → cada 14 días

Activación de timers

Comandos ejecutados:

sudo systemctl daemon-reload
sudo systemctl enable --now paccache-clean.timer
sudo systemctl enable --now pacman-orphans-clean.timer
Verificación

Listar timers activos:

systemctl list-timers

Ver configuración específica:

systemctl status paccache-clean.timer
systemctl status pacman-orphans-clean.timer

Parámetros técnicos clave Parámetro Función

  • Persistent=true Ejecuta tareas pendientes tras apagados
  • OnBootSec Retrasa ejecución después de arrancar
  • OnUnitActiveSec Intervalo real entre ejecuciones
  • RandomizedDelaySec Evita ejecuciones simultáneas
  • Type=oneshot Ejecuta tarea única y finaliza

Comportamiento final del sistema

El mantenimiento ahora es:

  • automático
  • resiliente a reinicios
  • distribuido en el tiempo
  • no intrusivo al arranque
  • sin intervención manual

Beneficios operativos

  • evita acumulación de paquetes
  • reduce consumo de disco
  • previene conflictos por dependencias obsoletas
  • disminuye carga simultánea en infraestructura multi-host
  • mantiene sistema limpio de dependencias innecesarias

Posibles mejoras futuras

  • Opciones recomendables si el entorno crece:
  • unificar tareas en un único timer maestro
  • registrar logs de espacio liberado
  • enviar alertas si falla mantenimiento
  • integrar limpieza de journal logs
  • política de mantenimiento centralizada

Deja un comentario