viernes, 18 de febrero de 2011

Script para que el sistema haga copias de seguridad automáticas,conservando solo las mas modernas.

Tenía interés en  hacer un script que no fuera muy complicado, y que ejecutándolo con Gnome-Schedule ( automatizar tareas repetitivas con Gnome-schedule ) con permisos de root*  1 vez por semana fuera: a) creando copias de seguridad de varias cosas ( programas, correos, archivos de configuración etc ), con la fecha en la que se van creando los archivos en sus respectivos nombres,  pero que al mismo tiempo b)  fuera borrando las copias de seguridad con mas de, por ejemplo, 30 días, para que no se fueran acumulando copias de seguridad demasiado viejas y que ocupan un espacio innecesario en el disco duro.  Por supuesto también se puede ejecutar este script con crontab.

La solución a la parte a) ya la sabia de otras lecturas en blogs, foros, etc , y de leer lo que sale al teclear en la terminal: man tar

La solución a la parte b) me la dio el amigo Guadafan, de Gualdalinex: http://hostinglandia.com/viewtopic.php?f=32&t=19 ,y tras leer lo que sale en la terminal al teclear:  man find
-mtime n : Los  datos  del  fichero  fueron modificados por última vez hace n×24 horas.
-exec orden ; Ejecuta  orden;  verdad  si  se  devuelve el status 0. Todos los argumentos que siguen a find se toman como de la orden hasta que se encuentre uno consistente en `;'. La cadena `{}' se reemplaza por el nombre del fichero que se está procesando;  en  cualquier sitio de los argumentos de la orden, no sólo en argumentos donde esté sola, como en algunas otras versiones de find.  Ambas  construcciones  pueden necesitar `escaparse' (con una `\') o entrecomillarse, para protegerlas de la expansión que  efectuaría  el shell. La orden se ejecuta en el directorio de comienzo.

Al final lo he conseguido: La "sintaxis básica" del script seria algo así:

1 #!/bin/bash
2 #echo Script para crear backups fecha.tar en el directorio /media/mi-disco/backups
3 #echo
4 cd /media/mi-disco/backups
5 #echo  crear archivos comprimidos .tar backups de lo que queramos
6 tar zcvf nombre_del_backup_`date +%d%B%Y-%H-hora-%M-minutos`.tar  dirección de los archivos y/o directorios a copiar
7 #echo eliminar los archivos .tar mas "viejos" de 30 dias
8 sudo find /media/mi-disco/backups/*.tar* -mtime +30 -exec rm {} \;
9 exit

Los números no forman parte del script, solo los he puesto para identificar mejor lo que es cada línea.

-----------------------------------

Un ejemplo de este scirpt con comandos mas "reales" seria:

1 #!/bin/bash
2 #echo Script para crear backups fecha.tar en el directorio /media/mi-disco/backups
3 #echo
4 cd  /media/mi-disco/backups
5 #echo
6 tar zcvf backup-firefox_`date +%d%B%Y-%H-hora-%M-minutos`.tar /home/usuario/.mozilla
7 tar zcvf backup-sylpheed_`date +%d%B%Y-%H-hora-%M-minutos`.tar /home/usuario/.sylpheed-2.0
8 tar zcvf backup-mail_`date +%d%B%Y-%H-hora-%M-minutos`.tar /home/usuario/Mail
9 tar zcvf grub2_`date +%d-%B-%Y-%H-hora-%M-minutos`.tar /etc/default/grub /etc/grub.d/  /boot/grub/grub.cfg
10 sudo tar zcvf apt_`date +%d-%B-%Y-%H-hora-%M-minutos`.tar /etc/apt/ /var/lib/apt/ /var/cache/apt/
11 sudo find /media/mi-disco/backups/*.tar* -mtime +30 -exec rm {} \;
12 exit

Los números no forman parte del script, solo los he puesto para identificar mejor lo que es cada línea.

Se le pueden añadir mas lineas del tipo tar zcvf.... para crear copias de seguridad en forma de archivos comprimidos .tar de mas directorios y/o archivos.

Con él , ejecutándolo 1 vez por semana ( con Gnome-Schedule en modo root*  ) mantendríamos copias de seguridad  de Firefox, Sylpheed ( programa de correos ) y de los correos, del Grub2, y de Synaptic,  de los últimos 30 días, borrándose las copias mas antiguas.



* Sobre el uso del comando sudo en este script:

Si los archivos/directorios que queremos copiar tienen permisos de usuario, la línea tar zcvf ....no necesita llevar delante el comando sudo, y el archivo .tar que se creará tendrá también permisos de usuario.
Si los archivos/directorios que queremos copiar tienen permisos de root, la línea tar zcvf ... necesita llevar delante el comando sudo, y el archivo .tar que se creará tendrá también permisos de root.
Si hay una o mas líneas tar zcvf...con el comando sudo delante, la línea find también tendrá que llevar delante el comando sudo, para que al borrar los archivos .tar con permisos de root no nos pida confirmación ni contraseña para borrar cada uno de ellos.
Si en todo el script no hay ninguna línea que comience por el comando sudo ( ni delante de tar zcvf ni de find ), se podrá ejecutar con Gnome-Schedule con permisos de usuario.
Si en el script hay alguna línea que comience por el comando sudo, se debe ejecutar con Gnome-Schedule con permisos de root.
Lo mas sencillo es ponel el script  para ser ejecutado por Gnome-Schedule con permisos de root, ya que así podrá ser ejecutado tanto si hay o no líneas con el comando sudo delante, de forma que si lo modificamos (añadiendo una línea con sudo  ) no tengamos que modificar también como ejecutarlo.

------------------------------------------------------------------------------------

En resumen: Si ejecutamos un  script de este tipo con Gnome-Schedule ejecutado con permisos de root, podremos hacer que el sistema trabaje por nosotros y haga de forma automática copias de seguridad de lo que queramos ( según las líneas tar zcvf ... que pongamos), en el directorio que hayamos puesto en el script, cada un cierto tiempo que nosotros elegimos (en el Gnome-Schedule) , y conservar solo las copias mas modernas del tiempo que queramos (según el número que pongamos tras -mtime+ ) ; vamos, que me parece un chollo de script.

-------------------------------------------------------------------------------------

1 comentario:

  1. Muy bueno hatteras.

    Ya he revisado todo el script , aunque lo entiendo en términos generales, aún hay comandos que no tengo idea.

    Saludos y gracias por poner algo de luz a mis penumbras.

    ResponderEliminar

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.