Comparto un script sencillo que permite borrar automáticamente backups viejos en un servidor GNU/Linux.
Uno de los servidores en la nube que administro es un pequeño VPS con sólo 30 GB de espacio en disco. En este servidor se generan copias de seguridad (backups) diariamente, que son enviadas a un servicio en la nube para su almacenamiento persistente (por ejemplo Google Drive, GCS o Dropbox). Sin embargo las copias locales se acumulan hasta ocupar todo el espacio en disco disponible. Otro de mis scripts me avisa por correo electrónico antes de que se llene el disco. Como los backups son pequeños, esto ocurre apenas un par de veces al año, sin embargo hoy me aburrí de entrar a borrar backups viejos e implementé este script.
La idea del script es, dada una lista de directorios y una cantidad de días de antigüedad, buscar y borrar en los directorios de la lista todos los archivos cuya fecha de modificación sea anterior a la antigüedad especificada (x cantidad de días hacia atrás).
#!/bin/bash # Directorios donde borrar archivos DIRS="/backup/files/ /backup/databases/" # Borrar archivos de más de x días DAYS=60 echo "[$(date '+%Y-%m-%d %H:%M:%S')] inicio borrado de backups" # Borrar del directorio local los archivos de más de $DAYS días for D in $DIRS; do for F in $(find $D -type f -mtime +$DAYS 2>/dev/null); do echo "rm $F" rm $F done done
La variable DIRS
permite configurar una lista de directorios donde buscar archivos a borrar. Cabe destacar que se deben utilizar rutas completas, sin espacios en los nombres de directorio. La variable DAYS
establece la cantidad de días de antigüedad a partir de donde se borra un archivo. Con un valor de 60
, se borran todos los archivos cuya antigüedad es superior a (aproximadamente) dos meses.
Tal como acostumbro, el script queda publicado en mi cuenta de GitHub: linuxitux/scripts/backup/delete_old_backups.sh.
Veamos el funcionamiento, actualmente el directorio de backups ocupa unos 16 GB:
root@vps:~# du -hs /backup/ 16G /backup/
Al ejecutar el script, indica los nombres de archivo que está borrando:
root@vps:~# scripts/delete_old_backups.sh [2018-10-10 11:29:41] inicio borrado de backups rm /backup/files/varwww_2018-08-06_040001.tar.bzip2 rm /backup/databases/www/www_2018-07-18_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-19_024003.tar.bzip2 rm /backup/databases/www/www_2018-08-09_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-14_024004.tar.bzip2 rm /backup/databases/www/www_2018-08-07_024004.tar.bzip2 rm /backup/databases/www/www_2018-08-03_024003.tar.bzip2 rm /backup/databases/www/www_2018-07-31_024004.tar.bzip2 rm /backup/databases/www/www_2018-08-05_024007.tar.bzip2 rm /backup/databases/www/www_2018-07-20_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-17_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-27_024003.tar.bzip2 rm /backup/databases/www/www_2018-07-24_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-29_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-23_024003.tar.bzip2 rm /backup/databases/www/www_2018-07-30_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-12_024003.tar.bzip2 rm /backup/databases/www/www_2018-07-16_024003.tar.bzip2 rm /backup/databases/www/www_2018-08-06_024004.tar.bzip2 rm /backup/databases/www/www_2018-08-01_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-11_024003.tar.bzip2 rm /backup/databases/www/www_2018-07-13_024003.tar.bzip2 rm /backup/databases/www/www_2018-08-10_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-25_024003.tar.bzip2 rm /backup/databases/www/www_2018-08-02_024004.tar.bzip2 rm /backup/databases/www/www_2018-08-04_024003.tar.bzip2 rm /backup/databases/www/www_2018-08-08_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-26_024003.tar.bzip2 rm /backup/databases/www/www_2018-07-21_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-22_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-28_024004.tar.bzip2 rm /backup/databases/www/www_2018-07-15_024003.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-25_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-15_020005.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-08-05_020007.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-13_020003.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-08-08_020005.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-08-02_020003.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-14_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-31_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-28_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-08-04_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-08-06_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-22_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-16_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-26_020005.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-18_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-08-01_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-23_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-29_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-30_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-21_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-27_020005.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-08-10_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-19_020003.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-08-09_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-08-03_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-12_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-20_020003.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-08-07_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-17_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-24_020004.tar.bzip2 rm /backup/databases/mediawiki/mediawiki_2018-07-11_020004.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-21_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-25_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-30_023002.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-23_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-19_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-27_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-15_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-26_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-22_023002.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-31_023002.tar.bzip2 rm /backup/databases/mysql/mysql_2018-08-05_023002.tar.bzip2 rm /backup/databases/mysql/mysql_2018-08-08_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-12_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-24_023002.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-28_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-18_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-08-07_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-08-02_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-08-01_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-16_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-20_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-14_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-08-10_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-08-09_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-08-04_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-17_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-08-03_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-11_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-29_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-08-06_023001.tar.bzip2 rm /backup/databases/mysql/mysql_2018-07-13_023001.tar.bzip2
Al final la ejecución, se recupera 1 GB (aclaro que había realizado una "limpieza" previa del directorio):
root@vps:~# du -hs /backup/ 15G /backup/
Luego resta configurar una tarea programada para borrar backups viejos 1 vez a la semana (domingos):
root@vps:~/scripts# nano /etc/cron.d/backup
Esta configuración corre el script los días domingo a las 10 de la mañana:
# Delete old backups (weekly) 0 10 * * 1 root /root/scripts/delete_old_backups.sh >> /var/log/backup/delete_old_backups.log 2>&1