Categorías
Servidores

Restaurar un backup creado con tar

Se necesita algo más que los comandos simples usados con los backups completos, pues va unido a la naturaleza misma de las copias de seguridad incrementales que haya que extraer muchos archivos.

Para que no tengas que extraer cada archivo tar de forma individual, usa un ciclo for:

BACKUP_DIR=/carpetadestino/backup
cd /
for archiv in ${BACKUP_DIR}/backup-*.tar.gz; do
tar -xpzf $archiv -C /
done

  1. Ciclo for. Este comando repite todas las acciones que se encuentran entre do y done hasta que hayan pasado todas las posibilidades. Para la especificación del comando establece la ruta de tu copia de seguridad con un asterisco a modo de comodín, ya que deseas extraer todos los ficheros de archivo de la carpeta. 
  2. El comando tar se indica de la siguiente forma: extrae (-x) manteniendo los derechos de acceso (-p) y descomprime (-z) el archivo (-f $archiv) en la carpeta raíz (-C /).
  3. Con done establece el punto final del ciclo for.

Como al crear el archivo tar los backups se han enumerado correlativamente, también se ejecutarán uno detrás de otro, empezando por el más antiguo. Para ello hay que tener en cuenta que en los archivos creados tras una copia de seguridad completa se encuentran versiones nuevas de los ficheros contenidos en ella. De modo que en el ciclo for primero se extraen las versiones antiguas para más tarde ser sobrescritas por las nuevas, permitiendo que el sistema completo sobrescrito con el backup contenga la última versión archivada de cada fichero.

La razón principal por la que se crean copias de seguridad incrementales es para permitir la completa restauración del sistema, aunque con un pequeño rodeo también es posible rescatar solo algunos de los ficheros, así como recuperar una versión anterior a la última creada:

BACKUP_DIR=/carpetadestino/backup
ls -l ${BACKUP_DIR}
for archiv in ${BACKUP_DIR}/backup-*tar.gz; do
tar -tzf $archiv | grep fichero-buscado;
done

También en los primeros casos se vuelve a recurrir al ciclo for, aunque este se usará principalmente para la búsqueda y no para la extracción:

  1. Vuelve a definir la carpeta de la copia de seguridad.
  2. Con el comando ls se muestran todos los ficheros y carpetas contenidos en la carpeta de la copia de seguridad. La opción –l proporciona información detallada.
  3. Abre un el ciclo for como ocurría al restaurar el archivo completamente.
  4. Las diferencias con respecto al proceso anterior residen en las opciones del comando tar. En vez de crear (c) o extraer (x) un archivo, se solicita que se muestre el contenido del archivo tar (t) y se reenvía la salida con una barra vertical al comando grep, pues no se pretende buscar los ficheros personalmente. El comando busca en la salida o contenido del archivo los ficheros específicos buscados.
  5. Finaliza el ciclo for.

Ahora, el terminal muestra los ficheros buscados y probablemente algunos más, si has trabajado con ellos regularmente y aparecen en cada copia de seguridad incremental. Recuerda la ruta del fichero y crea un nuevo ciclo que se encargue de restaurar la última versión guardada.

for archiv in ${BACKUP_DIR}/backup-*.tar.gz; do
tar –xzf $archiv -C / carpetadestino/backup/archivo-buscado
done

Es en este momento cuando los ficheros se restauran en su lugar original, sobrescribiendo además las versiones posteriores, en caso de que las hubiera.