Posts Tagged ‘respaldo’

Enlaces simbólicos y scp

Wednesday, July 9th, 2008

Me tocó hacer unos respaldos de cantidades importantes de archivos, entre dos equipos que se encontraban localizados en la misma red. Al enfrentar dicho trabajo, supuse erróneamente que sería muy fácil utilizando el comando scp, utilizando el parámetro r.


# scp -r /home/dante root@192.168.1.1:/mnt/disk015/dante

Se necesitaban respaldar aproximadamente 210GB. Calculé que el proceso iba a tomar aproximadamente unas 5 horas, dejo los cálculos, espero que estén bien :-P

  • 210 GB = 225485783040 Bytes
  • 225485783040 Bytes = 1803886264320 bits
  • 1803886264320 bits = 1803886 mbits
  • A 100 mbps -> 18038 segundos
  • 18038 segundos = 5 horas

La cuestión es que al pasar las cinco horas seguía copiando. Deje que siguiera, creyendo que había algún error de redondeo u horrores en los cálculos anteriores, pero luego de 3 horas más (con un total de 8 horas) ¡todavía seguía copiando!

Tenía dos hipótesis:

  1. Tengo serios problemas con las matemáticas.
  2. Pasa algo raro con el comando scp.

Con respecto a la primera todavía tengo dudas :-D En cuanto a la segunda, pude comprobar que scp no entiende los links simbólicos. Por lo tanto, al encontrar un link simbólico, no lo respeta y lo sigue, copiando todo el contenido al que apunta. Para entender la magnitud de esto, les sigo comentando mi experiencia.

rsync

Es un programa similar a rcp, pero tiene muchas más opciones. Además permite transferir sólo las diferencias entre archivos, logrando velocidad de transferencia.

Al revisar las copias, comprobé lo comentado anteriormente. Efectivamente, hacía copias de los contenidos apuntados por los links simbólicos. El problema principal fue un serie de links simbólicos que apuntaban a una carpeta llamada “Videos”,que pesaba unos 120GB y existían 3 links simbólicos a esta carpeta, entonces de los 120GB que creí que se debían copiar, pase a copiar ¡360GB!

Todo esto pude haberlo aludido si hubiese sabido sobre el comando rsync, su uso es tan sencillo como scp.


# rsync -r -l -t -v -u /home/dante root@192.168.1.1:/mnt/disk015/dante

Las opciones que utilicé indican.

r
Recursive, recurre dentro de los directorios.
l
Links, al encontrarse con un link simbólico lo copia como tal.
t
Time, preserva los tiempos (de los archivos) al copiarlos.
v
Verbosity, incrementa la verbosidad en la salida del comando.
u
Updates, no copia archivos que estén actualizados en el receptor.

Además de estas opciones, se encuentran muchas más y muy útiles. Puedes consultar todas las opciones y ejemplos de uso en las páginas man de rsync[samba.org].

Excluyendo carpetas o archivos

Al realizar un backup de una carpeta como home es frecuente que se encuentren archivos o carpetas que no necesitan ser respaldadas, esto puede ser indicado a rsync con el parámetro exclude. Por ejemplo, supongamos que queramos excluir del respaldo la carpeta foo/ relativa /home/dante/:


# rsync -r -l -t -v -u --exclude 'foo' /home/dante root@192.168.1.1:/mnt/disk015/dante

Nota: el archivo o carpeta a excluir debe ir entre comillas simples.

Excluir más de un archivo o carpeta

Será necesario editar un simple archivo de texto plano que liste los archivos o carpetas que no se deberán respaldar. Un pequeño ejemplo podría ser:


quux
quuux/tmp/*/*.pid
quuuux
baz

Guardamos el archivo como no_respaldar en /home/dante/ y se lo indicamos a rsync:


# rsync -r -l -t -v -u --exclude-from 'no_respaldar' /home/dante root@192.168.1.1:/mnt/disk015/dante

Problemas frecuentes

Al ejecutar el comando puede ser que obtengas la siguiente salida:


rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127) at io.c(454) [sender=2.6.9]

Para solucionarlo basta instalar rsync también en la máquina remota.

Respaldo de nuestro blog

Monday, January 7th, 2008

Por muchos motivos es muy recomendable respaldar nuestros archivos, especialmente si contamos con un sitio web, ya que cualquier problema que tengamos con el sistema de archivos, tendremos una copia de respaldo y podremos recuperar el servicio.

Otra ventaja de hacer respaldos es que si contamos con un blog propio, por ejemplo con Wordpress, estos contienen varias vulnerabilidades de seguridad muy conocidas que pueden ser aprovechados por crackers.

Si tenemos el blog sobre una plataforma GNU/Linux, podemos utilizar las herramientas que nos provee para hacer los respaldos y automatizarlos. Utilizaremos

  • Pdumpfs, para respaldar
  • Crontab, para automatizar

Crontab, viene ya en todas las plataformas GNU/Linux y Unix, por lo que sólo deberemos instalar pdumpfs. Antes que nada la explicación tiene en cuenta cualquier distribución basada en Debian, pero esto no implica que no se pueda ejecutar en otras, sólo hay que hacer cambios menores. Primero verificaremos que si lo tenemos instalado


# aptitude search pdumpfs
p   pdumpfs                         - a daily backup system similar to Plan9’s d
p   pdumpfs-rsync                   - pdumpfs extension using rsync

El comando busca todos los paquetes que concuerden con la cadena que le pasamos como parámetro, en este caso pdumpfs. Los paquete que concuerden se muestran en una lista, como se puede ver cada línea comienza con la letra p, que significa que el paquete no está en el sistema; si lo hubiésemos tenido instalado tendría el estado i, que se encuentra instalado.

Como el paquete lo tenemos en el estado p, vamos a instalarlo


#aptitude install pdumpfs

Pdumpfs es un programa muy sencillo, pero potente, al igual que el lenguaje en que fue desarrollado Ruby, escrito por Satoru Takabayashi. La sintaxis sería


pdumps [directorio-fuente] [directorio-destino]

Dentro del directorio destino se crea un directorio llamado YYYY/MM/DD, que indica el año, el mes y el día respectivamente en que ejecutamos el comando.

Por ejemplo para realizar el respaldo cree una carpeta backup en un disco que monté, para respaldos que se encuentra en /mnt/sdb1


#pdumpfs /var/www/blog /mnt/sdb1/backup

Ahora debemos automatizar el proceso, para eso bastará con editar nuestra tabla cron, que se encuentra /etc/crontab. Voy a indicar en la tabla que este proceso se ejecute todos los días a las 5:00 AM. Para esto hacemos


#echo "0 5 * * * root pdumpfs /var/www/blog /mnt/sdb1/backup >> /etc/crontab

Para mayor información sobre la sintaxis de la tabla cron consultar aquí.

Resultó muy sencillo, ahora vamos a hacer al proceso un poco más robusto. Es importante que mantegamos log sobre el proceso de respaldo y también log de los errores que podrían surgir. Esto se puede hacer agregando un par de parámetros más al ejecutar pdumpfs. Tendríamos que ejecutar este comando en vez del anterior o editar la tabla cron


#echo "0 5 * * * root pdumpfs /var/www/blog /mnt/sdb1/backup >/mnt/sdb1/backup/log/pdumpfs.log 2>/mnt/sdb1/backup/log/error.log" >> /etc/crontab

Aquí cree una nueva carpeta log dentro de la carpeta backup y indico que el archivo de log se llame pdumpfs.log. Luego indico que la salida de error estándar (indicada por el 2) se redirija a /mnt/sdb1/backup/log/error.log. Por lo tanto si hay error se escribirá en el archivo error.log.

Listo con esto tenemos un sistema de respaldo automatizado, algo que vale la pena comentar es que todos los archivos son copiados la primera vez que respaldamos, pero luego pdumpfs sólo copia los archivos nuevos o actualizados y los que no fueron cambiados los mantiene como links en duro de los archivos del respaldo anterior, esto produce una gran eficiencia en el uso de la memoria.