Saltar la navegación

tar

El comando tar puede utilizarse como alternativa para hacer copias de seguridad de nuestro sistema de ficheros. En tal caso, es importante tener en cuenta que si un usuario modifica un fichero a la vez que tar lo está archivando es muy probable que la copia de seguridad no se realice correctamente y la recuperación del fichero falle.

Existen dos opciones especiales en la orden tar para hacer copias de seguridad, y son:

--listed-incremental=fichero-de-registro ó -g fichero-de-registro

--incremental ó -G

Estas opciones permiten crear y manipular información que registra los ficheros que han intervenido en el backup.

La opción -g (--listed-incremental) incluye el fichero donde tar registrará qué ficheros fueron modificados, añadidos y borrados desde el último backup, para así tenerlo en cuenta en la siguiente copia de seguridad y sólo incluir las modificaciones.

Creación de una copia de seguridad completa o de nivel 0:

Si quisiéramos crear una copia de seguridad completa del directorio /home sobre el fichero /var/backups/completa.tgz debemos ejecutar la siguiente orden:

# tar -czf /var/backups/completa.tgz -g /var/backups/backup.info /home

La clave para que el backup sea de nivel 0 es que el fichero /var/backups/completa.info no exista y entonces se cree por primera vez. En dicho fichero se registrarán todos los archivos que han intervenido en la copia.

Si el fichero /var/backups/completa.info existiera y quisiéramos hacer un backup de nivel 0, simplemente tendríamos que borrarlo.

Creación de copias de seguridad diferenciales:

Para hacer una copia de seguridad diferencial días después de haber hecho una copia total, tendríamos que ejecutar lo siguiente:

# tar -czf /var/backups/diferencial.tgz -g /var/backups/backup.info /home

donde el fichero backup.info contiene inicialmente la información generada por el backup total previo.

En este caso, sólo se copiarán en diferencial.tgz las modificaciones (ficheros nuevos y actualizados) desde la copia total, y en backup.info se añadirá la metainformación necesaria para registrar los ficheros que han intervenido, es decir, los ficheros nuevos, modificados y borrados desde el backup total.

Es el fichero backup.info (generado por la copia de seguridad completa) la base para calcular los cambios producidos en el directorio /home. Es por esto, que si nuestra intención es hacer días después, otra copia de seguridad diferencial, antes del paso anterior deberíamos haber hecho una copia de backup.info original, para que la nueva copia diferencial se vuelva a basar en la metainformación generada por el backup completo. Es decir, para la primera copia diferencial:

# cp /var/backups/backup.info /var/backups/backup-diferencial.info
# tar -czf /var/backups/backup-diferencial.tgz -g /var/backups/backup-diferencial.info /home

y días después para la segunda copia diferencial:

# rm /var/backups/backup-diferencial.tgz /var/backups/backup-diferencial.info
# cp /var/backups/backup.info /var/backups/backup-diferencial.info # tar -czf /var/backups/backup-diferencial.tgz -g /var/backups/backup-diferencial.info /home

Creación de copias de seguridad incrementales:

Si después de hacer la copia de seguridad total, lo que queremos es ir haciendo copias de seguridad incrementales, lo que debemos hacer es acumular la metainformación sobre el mismo fichero, es decir, backup.info. Así, tras la copia total, para hacer la primera copia incremental:

# tar -czf /var/backups/incremental-1.tgz -g /var/backups/backup.info /home

Para la siguiente copia incremental ejecutaríamos:

# tar -czf /var/backups/incremenl-2.tgz -g /var/backups/backup.info /home

Y así, sucesivamente.

Restauración de la copia de seguridad:

Para restaurar las copias de seguridad usaremos la opción -x junto con la opción -G (--incremental); no será necesario hacer referencia al fichero con los metadatos del backup, pues toda la información para la extracción se encuentra en los ficheros de backup.

Cuando se extrae un fichero de copia de seguridad, el comando tar intenta restaurar el estado exacto del sistema de ficheros que había cuando el fichero se creó, lo que implica borrar aquellos ficheros y directorios que no existían por entonces. Si se utilizan varios niveles de copias de seguridad, para dejar el sistema de ficheros como estaba cuando se realizó el último backup, habrá que restaurar cada uno de los niveles por orden, empezando por el nivel más bajo, el nivel 0. Por ejemplo, en los casos anteriores:

  • Con una copia de seguridad completa y una diferencia:
# tar -xzf /var/backups/completa.tgz -G
# tar -xzf /var/backups/diferencial.tgz -G
  • Con una copia de seguridad completa y dos incrementales:
# tar -xzf /var/backups/completa.tgz -G
# tar -xzf /var/backups/incremental-1.tgz -G
# tar -xzf /var/backups/incremental-2.tgz -G

Listar el contenido de una copia de seguridad:

Puede obtenerse información extra de los fichero backup generados con tar, es necesario para ello usar la opción -G y dos veces la opción -v, por ejemplo:

# tar -tvvGf i.tgz 
tar: Eliminando la `/' inicial de los nombres
drwxr-xr-x root/root        16 2014-11-23 21:49 /root/tmp/
D d1
D d2
Y h.txt

drwxr-xr-x root/root         9 2014-11-23 14:36 /root/tmp/d1/
N f1
N f2

drwxr-xr-x root/root         5 2014-11-23 21:50 /root/tmp/d2/
Y g1

-rw-r--r-- root/root         0 2014-11-23 21:49 /root/tmp/h.txt
-rw-r--r-- root/root        15 2014-11-23 21:50 /root/tmp/d2/g1

El significado de la D, N e Y que aparecen en el listado anterior es el siguiente:

  • D: Es un directorio
  • Y: Es un fichero almacenado en la copia de seguridad.
  • N: Es un fichero que está en el directorio respaldado pero que no se encuentra en la copia de seguridad por no haber sido modificado.