Copias de seguridad (Incrementales y diferenciales)

Buenas, hoy os traigo algo diferente de lo que he hecho hasta ahora, en esta entrada os enseñaré como realizar copias de seguridad con «tar» en Debian Jessie y con un programa externo (DFIncBackup) en Windows 7.

Primero os explicaré en que consiste cada tipo de copia, de las cuáles veremos 3:

  • Completa:

Como su nombre indica es una copia entera de ficheros o carpetas.

  • Incremental:

Es una copia que se realiza solo de la modificación desde la ultima copia, es decir, si por ejemplo después de realizar una copia completa se realizan modificaciones en los ficheros o carpetas, solo se realizará la copia de esas modificaciones.

  • Diferencial:

Consiste en la copia de las modificaciones desde la última copia completa.

Ahora os lo explicaré de un modo más práctico en un gráfico temporal:

Imaginemos que vamos a realizar varios tipos de copias durante una semana, se realizarán todas a las 11:59 de la noche y los datos se irán almacenando hasta las 11:59 de la noche de cada día. Según la siguiente tabla hablaremos de lo que pasará cada día:

DÍA Lunes Martes Miércoles Jueves Viernes Sábado Domingo
TIPO Completa Incremental Diferencial Incremental Incremental Diferencial Incremental
COPIAS A,B, C D D,E F,G H D,E,F,G,H,I J
DATOS A, B, C A, B, C, D A,B,C,D,E A,B,C,D,E,F,G A,B,C,D,E,F,G,H, A,B,C,D,E,F,G,H,I A,B,C,D,E,F,G,H,I,J
  • Lunes:

Aquí vemos que tenemos almacenados las carpetas o archivos «A,B,C», por lo tanto si por la noche se realiza la copia completa se realizará de «A,B,C».

  • Martes:

Ahora se añade un nuevo archivo o carpeta llamado «D», por lo tanto si por la noche realizamos una copia incremental se realiza la copia de solo «D».

  • Miércoles:

Ahora se añade un nuevo archivo o carpeta llamado «E», por lo tanto si por la noche realizamos una copia diferencial se realiza la copia de «D,E» ya que se realiza la copia desde la última completa que contenía «A,B,C».

  • Jueves:

Ahora se añaden nuevos archivos o carpetas llamados «F,G», por lo tanto si por la noche realizamos una copia incremental se realiza la copia solo de «F,G».

  • Viernes:

Ahora se añade un nuevo archivo o carpeta llamado «H», por lo tanto si por la noche realizamos una copia incremental se realiza la copia de solo «H».

  • Sábado:

Ahora se añade un nuevo archivo o carpeta llamado «I», por lo tanto si por la noche realizamos una copia diferencial se realiza la copia de «D,E,F,G,H,I» ya que se realiza la copia desde la última completa que contenía «A,B,C».

  • Domingo:

Ahora se añade un nuevo archivo o carpeta llamado «J», por lo tanto si por la noche realizamos una copia incremental se realiza la copia de solo «J».

Habiendo visto esto, ya podemos empezar a realizar copias.

En Debian Jessie con «tar»

Trabajaremos con la herramienta «tar» en Debian la cuál empaqueta ficheros o carpetas, desde la línea de comandos.

A partir de ahora no realizaremos las copias de manera temporal, sino que las realizaremos directamente realizando cambios con archivos. Antes saber que con «tar» usaremos unos archivos llamados «snap» que son capturas de los «metadatos» de los archivos o carpetas que realizaremos copias y sirven para diferenciar los cambios en dichos archivos o carpetas en la realización de los distintos tipos de copias.

Supongamos que tenemos una carpeta llamada «datos», donde se encontrarán los datos de los que queremos realizar las copias, una carpeta llamada «copias», donde almacenaremos los distintos tipos de copias, y otra carpeta llamada «snaps» donde se almacenarán las capturas de los metadatos:

jpcr@pcjp:~/prueba$ mkdir datos copias snaps
jpcr@pcjp:~/prueba$ ls
copias  datos  snaps

En la carpeta «datos» crearemos 3 ficheros llamados «A,B,C» respectivamente:

jpcr@pcjp:~/prueba$ cd datos
jpcr@pcjp:~/prueba/datos$ touch A B C
jpcr@pcjp:~/prueba/datos$ ls
A  B  C

Lo primero que haremos será crear una copia completa y de ella un «snap»:

jpcr@pcjp:~/prueba/datos$ cd ..
jpcr@pcjp:~/prueba$ tar -cvf copias/completa1.tar.gz -g snaps/completa.snap datos/
tar: datos: El directorio es nuevo
datos/
datos/A
datos/B
datos/C
jpcr@pcjp:~/prueba$ tar -tvf copias/completa1.tar.gz
drwxr-xr-x jpcr/jpcr        10 2017-02-01 18:55 datos/
-rw-r--r-- jpcr/jpcr         0 2017-02-01 18:55 datos/A
-rw-r--r-- jpcr/jpcr         0 2017-02-01 18:55 datos/B
-rw-r--r-- jpcr/jpcr         0 2017-02-01 18:55 datos/C
jpcr@pcjp:~/prueba$ ls snaps/
completa1.snap

Como vemos hemos realizado una copia completa de «datos» en «copias» llamado «completa1.tar.gz» con la opción «-c» (la extensión de la copia debe ser»tar.gz» IMPORTANTE) y el fichero «completa.snap» con la opción «-g». La opción «-v» sirve para mostrar lo que realiza el comando. La opción «-t» sirve para listar el contenido de un archivo «tar.gz».

Ahora crearemos 2 copias de «completa.snap» para poder utilizarlas en las siguientes copias incrementales y diferenciales:

jpcr@pcjp:~/prueba$ cd snaps/
jpcr@pcjp:~/prueba/snaps$ cp completa1.snap incremental.snap 
jpcr@pcjp:~/prueba/snaps$ cp completa1.snap diferencial.snap 
jpcr@pcjp:~/prueba/snaps$ ls 
completa.snap  diferencial.snap  incremental.snap

Con esto realizaremos ahora una modificación en la carpeta «datos» y añadiremos 1 fichero «D»:

jpcr@pcjp:~/prueba/snaps$ cd ../datos/
jpcr@pcjp:~/prueba/datos$ touch D 
jpcr@pcjp:~/prueba/datos$ ls
A  B  C  D

Y procederemos a realizar la primera copia incremental:

jpcr@pcjp:~/prueba/datos$ cd ..
jpcr@pcjp:~/prueba$ tar -cvf copias/incremental1.tar.gz -g snaps/incremental.snap datos/
datos/
datos/D
jpcr@pcjp:~/prueba$ tar -tvf copias/incremental1.tar.gz
drwxr-xr-x jpcr/jpcr        13 2017-02-01 19:17 datos/
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:15 datos/D

Como vemos se nos ha realizado solo la copia de «D» y el «snap» de la copia completa que copiamos «incremental.snap» se nos ha actualizado.

Ahora creamos un nuevo fichero llamado «E» y realizamos una copia diferencial:

jpcr@pcjp:~/prueba$ touch datos/E
jpcr@pcjp:~/prueba$ ls datos/
A  B  C  D  E
jpcr@pcjp:~/prueba$ tar -cvf copias/diferencial1.tar.gz -g snaps/diferencial.snap datos/
datos/
datos/D
datos/E
jpcr@pcjp:~/prueba$ tar -tvf copias/diferencial1.tar.gz
drwxr-xr-x jpcr/jpcr        16 2017-02-01 19:29 datos/
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:15 datos/D
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:29 datos/E

Como vemos se nos ha realizado la copia de «D,E» y el «snap» de la copia completa que copiamos «diferencial1.snap» se nos ha actualizado.

Volvemos a crear por ejemplo 2 nuevos ficheros «F,G»:

jpcr@pcjp:~/prueba$ cd datos/
jpcr@pcjp:~/prueba/datos$ touch F G
jpcr@pcjp:~/prueba/datos$ ls
A  B  C  D  E  F  G

Si queremos realizar incrementales después de una diferencial deberemos realizar una copia de «diferencial1.snap» y la sobrescribimos en la actual «incremental1.snap»para poder realizar dicha incremental:

jpcr@pcjp:~/prueba/datos$ cd ..
jpcr@pcjp:~/prueba$ cp snaps/diferencial.snap snaps/incremental.snap 
jpcr@pcjp:~/prueba$ tar -cvf copias/incremental2.tar.gz -g snaps/incremental.snap datos/
datos/
datos/F
datos/G
jpcr@pcjp:~/prueba$ tar -tvf copias/incremental2.tar.gz
drwxr-xr-x jpcr/jpcr        22 2017-02-01 19:35 datos/
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:35 datos/F
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:35 datos/G

Volvemos a crear otro fichero «H» y seguimos con otra incremental:

jpcr@pcjp:~/prueba$ cd datos/
jpcr@pcjp:~/prueba/datos$ touch H
jpcr@pcjp:~/prueba/datos$ cd ..
jpcr@pcjp:~/prueba$ tar -cvf copias/incremental3.tar.gz -g snaps/incremental.snap datos/
datos/
datos/H
jpcr@pcjp:~/prueba$ tar -tvf copias/incremental3.tar.gz
drwxr-xr-x jpcr/jpcr        25 2017-02-01 19:43 datos/
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:43 datos/H

Creamos un nuevo fichero «I».

Ahora si queremos volver a realizar una copia diferencial, deberemos realizar una copia de «completa.snap» y la sobrescribimos en «diferencial.snap»:

jpcr@pcjp:~/prueba$ touch datos/I
jpcr@pcjp:~/prueba$ ls datos/
A  B  C  D  E  F  G  H  I
jpcr@pcjp:~/prueba$ cd snaps/
jpcr@pcjp:~/prueba/snaps$ cp completa.snap diferencial.snap 
jpcr@pcjp:~/prueba/snaps$ cd ..
jpcr@pcjp:~/prueba$ tar -cvf copias/diferencial2.tar.gz -g snaps/diferencial.snap datos/
datos/
datos/D
datos/E
datos/F
datos/G
datos/H
datos/I
jpcr@pcjp:~/prueba$ tar -tvf copias/diferencial2.tar.gzdrwxr-xr-x jpcr/jpcr        28 2017-02-01 19:54 datos/
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:15 datos/D
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:29 datos/E
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:35 datos/F
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:35 datos/G
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:43 datos/H
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:54 datos/I

Finalmente crearemos una copia completa creando un nuevo «snap» llamado «completa2.snap»:

jpcr@pcjp:~/prueba$ tar -cvf copias/completa2.tar.gz -g snaps/completa2.snap datos/
tar: datos: El directorio es nuevo
datos/
datos/A
datos/B
datos/C
datos/D
datos/E
datos/F
datos/G
datos/H
datos/I
jpcr@pcjp:~/prueba$ tar -tvf copias/completa2.tar.gz
drwxr-xr-x jpcr/jpcr        28 2017-02-01 19:54 datos/
-rw-r--r-- jpcr/jpcr         0 2017-02-01 18:55 datos/A
-rw-r--r-- jpcr/jpcr         0 2017-02-01 18:55 datos/B
-rw-r--r-- jpcr/jpcr         0 2017-02-01 18:55 datos/C
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:15 datos/D
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:29 datos/E
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:35 datos/F
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:35 datos/G
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:43 datos/H
-rw-r--r-- jpcr/jpcr         0 2017-02-01 19:54 datos/I

Si queremos seguir realizando copias deberemos hacerlas del mismo modo que hemos hecho anteriormente pero ahora seguiremos trabajando con el «snap» «completa2.snap».

Para la restauración de las copias podremos usar el siguiente coamando:

jpcr@pcjp:~/prueba$ tar -xvf copias/completa2.tar.gz restauración/

Donde se restaurará la copia «completa2.tar.gz» en la carpeta «restauración»

Viendo todo esto puede parecer un poco lioso pero es cuestión de saber trabajar bien con los archivos «snaps». También podríamos utilizar «scripts» para que se automatizaran las copias utilizando el formato de fechas para nombrar las distintas copias y «snaps», y así podrían realizarse en los días determinados.

En Windows 7 con «DFIncBackup»

En esta parte solo explicaré como realizar copias con la aplicación «DFIncBackup», ya que la teoría de como funcionan los distintos tipos de copias lo hemos visto anteriormente.

Lo primero sería descargar la aplicación aquí e instalarlo siguiendo los sencillos pasos que nos ofrece Windows.

Cuando abramos la aplicación por primera vez veremos esta ventana:

Captura de pantalla de 2017-02-01 20:25:08.png

Lo primero que haremos será elegir donde se van a guardar las copias que realicemos. Entramos en «File», «Configuration» y se nos abrirá una ventana. En donde en la primera pestaña «Main Parametres» y la opción «Local HDD folder» ubicaremos el directorio donde guardaremos las copias y aceptamos.

Captura de pantalla de 2017-02-01 20:30:20.png

Ahora para añadir un nuevo proyecto de copia hacemos clic en el icono «New». Primero escribiremos el nombre:

captura-de-pantalla-de-2017-02-01-203347

Luego pulsamos 2 veces en «Siguiente» y llegaremos al apartado donde podremos elegir los directorios que queramos realizar las copias.

Captura de pantalla de 2017-02-01 20:36:02.png

Pulsamos 4 veces en «Siguiente», nos aparecerá una ventana que aceptaremos y otra vez pulsamos en «Siguiente» donde deberemos elegir el dispositivo que queremos usar para guardar las copias, en nuestro caso elegiré el «Target» «Local disk only».

Captura de pantalla de 2017-02-01 20:38:45.png

Pulsamos en «Siguiente» y ahora toca elegir que tipo de copia queremos realizar, elegimos la que queramos y «Siguiente».

Captura de pantalla de 2017-02-01 20:40:06.png

Ahora podemos elegir los métodos de copia como por ejemplo si se realizará la copia solo por modificaciones o por nuevos ficheros, por fecha y contenido, archivos ocultos, tipo de compresión. Elegiremos la que deseemos y pulsamos en «Siguiente».

Captura de pantalla de 2017-02-01 20:44:09.png

En esta parte podemos elegir si queremos que se realiza solo copias completas o una completa y de ahí una diferencial/incremental. Elegimos la opción que queramos y «Siguiente».

Captura de pantalla de 2017-02-01 20:45:56.png

Llegó el momento de elegir con que periodicidad queremos realizar la copia completa o por el contrario dejarlo sin periodo y la realizaremos a mano. Elegimos la que deseemos y «Siguiente». Después se nos mostrará la misma ventana pero para la copia incremental/diferencial.

Captura de pantalla de 2017-02-01 20:48:27.png

En la siguiente configuración podemos elegir un cifrado de las copias con contraseña. «Siguiente».

Captura de pantalla de 2017-02-01 20:51:35.png

Por último podremos elegir que se nos manden avisos de cuando se realicen las copias y de eventos, finalizamos la creación del proyecto de copia. Luego nos preguntará si queremos realizar la primera copia completa, elegiremos que sí para que se realicen las siguientes copias incrementales automáticamente desde ya o para hacer una copia manual.

Luego en la venta principal del programa nos aparecerá un listado con los proyectos. Si queremos realizar la copia manualmente solo tendremos que pulsar en el icono «Start» teniendo seleccionado el proyecto deseado.

Captura de pantalla de 2017-02-01 20:59:36.png

Para restaurar copias pulsamos en el icono «Restore» y se nos creará un fichero «zip» que luego deberemos extraer.

Habiendo hecho todo esto vemos como con la aplicación en Windows es mucho más fácil que con «tar» en Debian, pero con la diferencia de que en Debian sabemos lo que hacemos y en Windows no sabemos en el fondo lo que hace.

Con todo esto espero que este post os sirva de ayuda y hayáis aprendido al nuevo.

Un saludo!