Crear copias de seguridad de manera sencilla con tar
Perder toda la información de nuestro sistema e intentar recuperarla puede ser un auténtico quebradero de cabeza. Los sistemas basados en UNIX como Linux disponen de un amplio abanico de comandos para facilitarnos las cosas.
Uno de ellos es tar (Tape ARchiver), una herramienta de fácil manejo que encontramos en todas las versiones de Linux y UNIX, que nos permitirá copiar ficheros y directorios a un sólo fichero, que podrá ser comprimido.
Los parámetros más importantes son los siguientes:
- c, crea un nuevo archivo o contenedor.
- d, calcula las diferentes entre el archivo y el sistema de archivos.
- x, extrae ficheros de un archivo o contenedor.
- t, testeo los archivos almacenados en el fichero.
- v, modo verbose o detallado.
- f, especifica el nombre del contenedor.
- z, comprime o descomprime los ficheros.
Es muy importante que las copias de seguridad las guardemos fuera de nuestra máquina, es decir, en otra máquina, en la nube o en un disco duro externo. Para éste artículo he guardado las copias de seguridad en un sistema externo con Windows y NTFS, podéis ver como montarlo con fstab en éste artículo.
El sistema operativo que he utilizado es donde tengo instalado NAGIOS, así que aprovecharemos para realizar una copia de seguridad de los ficheros de configuración y de log. Si queréis ver los artículos relacionados con éste sistema de monitorización los podéis consultar:
- Instalar y configurar Nagios en servidor Debian 7 (Parte I)
- Instalar y configurar Nagios en servidor Debian 7 (Parte II)
Tantos los archivos de configuración como los de log están ubicados en /usr/local/nagios, el directorio de backup lo he montado en /media/BACKUP, por lo tanto el comando será:
tar cvfz /media/BACKUP/copia_servernagios.tgz /usr/local/nagios
Al ejecutar el comando veremos un resulta como el siguiente:
Cuando acabe ya tendremos el archivo comprimido resultante:
Se puede observar que el archivo ocupa poco más de 5 MB, ya que está comprimido.
Para descomprimirlo sólo tenemos que substituir el parámetro c por x, y añádir z, ya que lo hemos comprimido.
Programando las copias
Hacerlo de forma manual puede ser algo farragoso, además que se nos puede olvidar. Así que la mejor manera es programarlo y así nos olvidamos. Crearemos un script en bash, que lo dejaremos programado con crontab.
Al archivo lo he llamado: /root/backup_diario.sh
El script puede ser parecido al que he hecho yo, pero cada uno como más le guste:
#!/bin/bash
_fecha=$(date +"%m_%d_%Y")
_destino="/media/BACKUP/copianagios("$_fecha").tgz"
tar cfz $_destino /usr/local/nagios/
Ahora usamos el servicio crontab. Ejecutamos el comando crontab -e, y añadimos:
PATH=/bin
0 0 * * * /root/backup_diario.sh
De esta manera se ejecutará todos los días a las 0 horas.
Espero que el artículo haya sido de vuestro interés.
¡Comentad malditos! 😉
Gracias por el artículo, me fue muy útil.
Como quedaría el script, si necesito copia de varias configuraciones?.
Hola!
Simplemente tienes que añadir las ubicaciones a continuación:
tar cfz $_destino /usr/local/nagios/ /home/lo-que-sea /var/log/lo-que-sea /etc……
Excelente aporte me es muy util tu pagina!!! saludos!!
Gracias a ti por pasarte 🙂
si quisiera que al añadir un nuevo backup se borre el anterior y actualice al nuevo..como lo haria?? gracias excelente post
Hola, muchas gracias por tu aporte. Tengo una pregunta, como podría hacer para que las copias de seguridad sean cada 2 minutos de un directorio, pero ademas que el script haga todo lo referente a la configuracion en el crontab. Osea, correr el script y que el mismo configure ese archivo para que se ejecute cada 2 minutos
Gracias por tu post, me sirvio para realizar mis respaldos.
Me alegro. Saludos!
muchas gracias muy util la varible fecha que es lo que hace exactamente es para decir en que fecha se hizo el backup? o es para el crontab
hola buenas noches tengo un problema y no he podido con eso, debo crear una copia de seguridad que tenga como parametros los siguientes:
Ruta del directorio a donde se quiere llevar la información.
• Recibe n parámetros. Extensiones
de archivos, por ejemplo:
docx,doc, txt, xls, xlsx, odt,java,
c, cpp, sh.
y que ada vez que se ejecute el comando se debe crear dentro
del directorio recibido como parámetro otro directorio, el
cual tendrá un nombre con la siguiente estructura: nombre
de usuario + fecha + hora. Dentro de este nuevo
directorio, se debe almacenar la información de los
documentos que el usuario solicito según las extensiones
indicadas.
¿Si quiero que la copia se haga todos los dias a las 1:00 de la madrugada como sería?
Hola,
Tienes que programar la tarea con Cron y Crontab, aquí te explico como:
https://www.ochobitshacenunbyte.com/2018/03/22/programar-tareas-en-linux-facilmente-con-cron-y-crontab/
Saludos