26 de nov. 2009

Linux Backups , basico y facil backups de documentos en linux

http://www.xs4all.nl/~voorburg
/backup.html



http://tecnoloxiaxa.blogspot.com/2008/11/backup-copias-de-seguridad-en-ubuntu-o.html

Backup script for Linux using tar and find

Every Linux distribution provides a range of utilities that you can use to make backups of your files. Here is the how I get the job done with crontab and a shell script using tar and find
Goal

I wanted to secure all the data-files on my system on a regular basis. Regular for me implies on an automated basis. I've tried doing a manual backup every week or so but that caused too much hassle, so effectively I stopped making backups....
Further, I wanted to have an up-to-date backup of the most essential configuration settings on my system. This would help me in case I accidentally lost some datafiles or setting on my system. In case of losing everything I would need to reinstall my Linux distribution (plus extra installed software) and restore data files and settings. I decided that a full backup of the whole system wouldn't be worth the effort (and resources!).
Choice of hardware

Say "backup" and most Unix people think "tapedrive". However, nowadays harddrives come that cheap that I chose to add an extra harddrive to my AMD 400 machine. This cheap option has the advantage that a harddrive can be mounted automatically, no need for manually inserting tapes. A disadvantage is that the backup resides in the same physical unit as the very data it is supposed to secure. However, since I do have a CD-writer om my local network I still have the option to copy a backup to a CD once in a while.
My main HD is 6Mb. The backup HD has 10Mb.
Script

After adding the drive to my machine I wrote a little shell script (for bash) that basically does the following:

* it mounts my backupdrive
* it checks the date
* every sunday it makes a full backup of some datafiles and some configuration settings, older incremental backups are removed. other days it backups files that have been accessed the last day
* it dumps all the contents of a mysql database to the backup drive and zips the file
* it unmounts the backup drive

This script (I've stored it in /root/scripts) is called every night at 3:01 AM by cron. The crontab file looks like:

1 3 * * * /root/scripts/daily_backup

Add this line using contab -e when root.

Code

Here's the actual code:

#!/bin/bash
#
# creates backups of essential files
#
DATA="/home /root /usr/local/httpd"
CONFIG="/etc /var/lib /var/named"
LIST="/tmp/backlist_$$.txt"
#
mount /mnt/backup
set $(date)
#
if test "$1" = "Sun" ; then
# weekly a full backup of all data and config. settings:
#
tar cfz "/mnt/backup/data/data_full_$6-$2-$3.tgz" $DATA
rm -f /mnt/backup/data/data_diff*
#
tar cfz "/mnt/backup/config/config_full_$6-$2-$3.tgz" $CONFIG
rm -f /mnt/backup/config/config_diff*
else
# incremental backup:
#
find $DATA -depth -type f \( -ctime -1 -o -mtime -1 \) -print > $LIST
tar cfzT "/mnt/backup/data/data_diff_$6-$2-$3.tgz" "$LIST"
rm -f "$LIST"
#
find $CONFIG -depth -type f \( -ctime -1 -o -mtime -1 \) -print > $LIST
tar cfzT "/mnt/backup/config/config_diff_$6-$2-$3.tgz" "$LIST"
rm -f "$LIST"
fi
#
# create sql dump of databases:
mysqldump -u root --password=mypass --opt mydb > "/mnt/backup/database/mydb_$6-$2-$3.sql"
gzip "/mnt/backup/database/mydb_$6-$2-$3.sql"
#
umount /mnt/backup

Discussion

data files:
All my data files are in /root, /home or /usr/local/httpd.

settings:
I chose to backup all the setting in /etc (where most essential settings are stored), /var/named (nameserver settings) and /var/lib (not sure about the importance of this one...). I might need to add more to the list but I still far from being a Unix-guru ;-). All suggestions are welcome!

tar versus cpio
The first version of this script used cpio to create backups iso tar. However, I found the cpio format not very handy for restoring single files so I chang ed it to tar. A disadvantage of using tar is that you can't (as far as I know) simply pipe the output of a find to it.
Using a construct like tar cvfz archive.tgz `find /home -ctime -1 -depth -print` caused errors for files that contained a space " " character. This problem was solved by wring the output of find to a file first (and using tar with the -T option).


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


Tipos de copia de seguridad
En función de la cantidad de archivos que se salvaguardan a la hora de realizar la copia de seguridad, podemos distinguir tres tipos de copia:

* Copia de seguridad total o íntegra
* Copia de seguridad incremental
* Copia de seguridad diferencial

Copia normal o copia total

Una copia de seguridad normal, es una copia de seguridad total de todos los archivos y directorios seleccionados.
Copia incremental

En un proceso de copia de seguridad incremental, se hace una copia de seguridad sólo de los archivos que han cambiado desde la última copia de seguridad realizada. Ejemplo, si hacemos copia de seguridad total el día 1 de cada mes y copia de seguridad incremental el resto de los días, cada copia incremental solo guardará los archivos que se hayan modificado ese día. Si tenemos que realizar la restauración de archivos ante un desastre, debemos disponer de la copia total y de todas las copias incrementales que hayamos realizado desde la copia total.

Copia diferencial

Una copia de seguridad diferencial es una copia de todos los archivos que han cambiado desde la última copia de seguridad total que hayamos hecho. Ejemplo, si hacemos copia de seguridad total el día 1 de cada mes y copia de seguridad diferencial el resto de los días, cada copia diferencial guardará los archivos que se hayan modificado desde el día 1. La ventaja es que se requiere menos espacio que la copia total y que en el proceso de restauración únicamente necesitaremos la última copia total y la última copia diferencial. Una copia diferencial anula a la copia diferencial anterior. Por el contrario, se consume más tiempo en realizar la copia y también más espacio que en el caso de copia incremental.

Recomendación sobre el tipo de copia a efectuar
Si el volumen de datos de nuestra copia de seguridad no es muy elevado (menos de 100 MB), lo más práctico es realizar siempre copias totales ya que en caso de desastre, tan solo debemos recuperar la última copia.

Si el volumen de datos de nuestra copia de seguridad es muy elevado (varios GB) pero el volumen de datos que se modifican no es elevado (menos de 500 MB), lo más práctico es realizar una primera copia total y posteriormente realizar siempre copias diferenciales. Así, en caso de desastre, tan solo debemos recuperar la copia total y la última diferencial. Periódicamente debemos realizar una copia total y así empezar de nuevo.

Si el volumen de datos de nuestra copia de seguridad es muy elevado (varios GB) y el volumen de datos que se modifican también lo es, las copias diferenciales ocuparán mucho espacio, por lo tanto en este caso lo más práctico será realizar una primera copia total y posteriormente realizar siempre copias incrementales ya que son las que menos espacio ocupan. El problema es que en caso de desastre debemos recuperar la última copia total y todas las incrementales realizadas desde que se hizo la última copia total. En estos casos, conviene hacer copias totales más a menudo para no tener que mantener un número muy elevado de copias incrementales.

En grandes compañías donde la realización de copias de seguridad está perfectamente planificada, se suelen utilizar sistemas mixtos. Por ejemplo en un caso típico se realizarían las siguientes tareas:

* Todos los días 1 de cada més, a las 23:00 horas: copia de seguridad total
* Todos los viernes a las 23:00 horas: copia de seguridad diferencial desde la copia de día 1
* Todos los días (excepto los viernes y el día 1) a las 23:00 horas: copia de seguridad incremental desde la copia del día anterior.

Con ésta planificación nos aseguramos disponer de copia de seguridad diaria. En caso de desastre deberíamos recuperar la copia total, la última diferencial y todas las incrementales desde la última diferencial.

En una política de este tipo se pueden utilizar por ejemplo 5 juegos diferentes de cintas de forma que se almacenen las copias de seguridad diarias de los últimos 3 meses. Luego se van reutilizando pero no más de 20 veces ya que las cintas se deterioran y la fiabilidad disminuye.
Creación de copias de seguridad
Elección de las carpetas a salvaguardar
Lo primero que debemos determinar son las carpetas que queremos salvaguardar en nuestro proceso de copias de seguridad.

En un sistema informático que da servicio a usuarios, la información más importante es precisamente la información de los usuarios, por lo tanto, la carpeta /home es una de las carpetas que debemos salvaguardar.

El objetivo de la realización de copias de seguridad es el reestablecimiento del servicio en el mínimo tiempo posible, por eso es conveniente realizar una copia de seguridad de los archivos de configuración del servidor, los cuales se encuentran en la carpeta /etc.

Otras carpetas de cierta importancia que se pueden salvaguardar son la carpeta /root y la carpeta /var/log. La primera es la carpeta personal del usuario root y la segunda es la carpeta donde se almacenan las incidencias del sistema (archivos de log del sistema). Resumiendo, deberíamos salvaguardar las siguientes carpetas:

* /home (Carpetas personales de los usuarios)
* /etc (Archivos de configuración del sistema)
* /root (Carpeta personal del usuario root)
* /var/log (Carpeta de logs del sistema)
* /var/www (Web de la intranet)

Por qué se debe comprimir la copia de seguridad
Cuando realizamos copias de seguridad, los datos deben comprimirse siempre por tres razones:

* La copia se realiza más rápidamente
* El tamaño de la copia es menor
* La compresión garantiza la integridad de los datos

Al quedar los datos reducidos, la cantidad de datos a copiar en el soporte de almacenamiento es mucho menor que lo que ocupan los datos descomprimidos; eso unido al hecho de que los datos estén compactados en un único archivo, hace que el tiempo en trasmitir los datos desde el servidor al soporte, sea menor que si no se comprime.

La integridad de los datos queda garantizada porque el algoritmo de compresión añade un código de redundancia cíclica (CRC) que se consulta a la hora de descomprimir los datos de forma que tenemos seguridad si están correctos o no lo están.
Automatización

El proceso de creación de copias de seguridad debe ser un proceso automático que no requiera la intervención del usuario para realizarse ya que un olvido o dejadez del usuario podría ocasionar que el día que necesitemos la copia de seguridad, no se haya hecho.

Para lanzar la realización automática de copias utilizaremos cron. Cron es un servicio que nos permite lanzar comandos autom�ticamente los días y a las horas que deseemos. Cada usuario tiene su propio cron en el que puede configurar sus tareas programadas mediante el comando 'crontab -e' o con la aplicación gráfica kcron. En nuestro caso, como realizamos copia de seguridad de carpetas que solamente tiene acceso el usuario root, debemos programar la copia mediante el cron de root.

Supongamos que deseamos crear una copia de seguridad total los días 1 de cada mes y una copia de seguridad diferencial el resto de días en la carpeta /tmp (temporal), de las carpetas /home y /etc. El comando que ejecutaremos el día 1 de cada mes será:

// Comando a ejecutar los días 1 de cada mes

tar -jcvf /tmp/CopiaTotal_etc-home_`date +%d%b%y`.tar.bz2 /home /etc


Como puede verse, utilizamos `date %d%b%y` que si hoy es 1 de febrero de 2009 se sustituira por 1feb09. De ésta forma nos sirve el mismo comando para todos los meses.

El comando que ejecutaremos todos los días para realizar la copia diferencial, será:

// Comando a ejecutar los días para hacer copia diferencial respecto al día 1

tar -jcvf /tmp/CopiaDiferencial_etc-home_01`date +%b%y`-`date +%d%b%y`.tar.bz2 /home /etc -N 01`date +%b%y`


Como puede verse, utilizamos 01`date %b%y`-`date %d%b%y` que si hoy es 13 de febrero de 2009 se sustituira por 01feb09-13feb09. También en la opción -N ponemos 01`date +%b%y` para que añada únicamente los archivos más nuevos que el día 1 del mes actual. De ésta forma nos sirve el mismo comando para todos los días.

Si deseamos programar para que automáticamente se ejecute la copia total el día 1 de cada més y la copia diferencial todos los días, debemos añadirlo en el cron del usuario root lo cual se puede realizar ejecutando el comando 'crontab -e' o bien utilizando una aplicación como 'kcron':

Al final nuestro archivo cron para que se ejecuten automáticamente los comandos que realizan las copias de seguridad quedará como el de la figura:

De ésta forma, los días 1 de cada mes a las 02:30 horas se realizará la copia total de las carpetas /etc y /home y todos los días a las 03:30 horas se realizará la copia diferencial respecto de la copia del día 1 del mes.

Las copias de seguridad se realizarán sobre la carpeta /tmp, pero lo recomendable es realizar la copia de seguridad sobre un dispositivo extraible como cintas, cds, dvds o un pendrive. Habrá que sustituir /tmp por la carpeta donde esté montado el dispositivo. Ejemplo, si se trata de un pendrive USB, lo más normal es que el dispositivo esté montado en la carpeta /mnt/sda1 o algo parecido ya que se monta como un dispositivo SCSI, lo que quiere decir que en lugar de poner /tmp en el comando tendríamos que poner /mnt/sda1.

Copias de seguridad en servidores remotos
Lo comentado anteriormente permite realizar copias de seguridad en un disco duro local. Una mejora añadida sería la creación de la copia en una carpeta remota. Al igual que se automatiza la creación de la copia, se podría ejecutar automáticamente un comando que, vía ftp o ssh, vuelque los archivos en un servidor remoto para mayor seguridad. También existen herramientas para realizar directamente copias de seguridad remotas:

* rsync: permite realizar copias en carpetas remotas
* unison: permite mantener sincronizadas dos carpetas remotas

Aplicaciones para la realización de copias de seguridad
Existen aplicaciones tanto libres como de pago que facilitan la tarea de realización de copias de seguridad. Entre las aplicaciones libres destacamos:

* BackupPC: Herramienta para hacer copias de seguridad de PCs de la red
* Amanda: Herramienta para hacer copias de seguridad de PCs de la red
* afbackup: Herramienta para hacer copias de seguridad de PCs de la red
* sbackup: Simple Backup.
* pybackpack: copias de seguridad locales y remotas vía ssh.

Estas aplicaciones tienen la ventaja de ser muy completas ya que disponen de un sinfín de posibilidades, pero son más complejas de manejar.


Fuentes:

*

Página del isftic

* Curso Redes de Área Local. Aplicaciones y servicios en Linux. del isftic: http://www.isftic.mepsyd.es/formacion/materiales/85/cd/REDES_LINUX/indice.htm

* http://ubuntu.teoriza.net/como-crear-copias-de-seguridad-facil-e-intuitivamente-con-sbackup.php
* http://www.alejandrox.com/2007/05/copias-de-seguridad-en-ubuntu-con-pybackpack/