Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización: 17 de julio de 2006 - Lunes
Desde que uso Linux en mi máquina personal hago copias de seguridad contra el servidor de backups (sí, tengo un servidor de backups :-) de mi red, utilizando el excelente programa "rdiff-backup". Este programa une a las ventajas del sistema RSYNC normal (solo se transfieren los ficheros que hayan sido alterados y, de éstos, solo los fragmentos modificados) el almacenamiento de todo el histórico de cambios. Es decir, no solo el backup se completa de forma rápida y eficiente, como con RSYNC, sino que disponemos de un histórico de todos los cambios, pudiendo volver a cualquier versión anterior. Por supuesto, los cambios en sí se almacenan como diferenciales RSYNC, por lo que si a una base de datos de un terabyte, por ejemplo, se le modifican 64kbytes, diarios, un año completo de históricos diarios de dicha base de datos ocupará solo 23 megabytes.
Mi disco duro está particionado de la siguiente manera:
/dev/sda5 1052184 337436 714748 33% / /dev/mapper/LVM-home 7864076 6442316 1421760 82% /home /dev/mapper/LVM-opt 2211768 2087644 124124 95% /opt /dev/mapper/LVM-usr 5799752 5662880 136872 98% /usr /dev/mapper/LVM-var 1163224 687404 475820 60% /var /dev/mapper/LVM-work 1048540 32840 1015700 4% /work /dev/mapper/LVM-windowsF 52427196 21561776 30865420 42% /home/jcea/mnt/particion_1
Hago respaldo de cada partición por separado para poder definir políticas de backup y de retención de históricos diferentes en cada caso. Por ejemplo, puedo hacer un nuevo backup de las particiones del sistema operativo cuando instalo alguna actualización, y conservar un histórico corto, mientras que el backup de mi directorio personal es diario y guardo un histórico de varios años.
Mi script SHELL de backup de sistema operativo es:
backup="./rdiff-backup -v5 --ssh-no-compression --exclude-other-filesystems" $backup --remote-schema "ssh %s /usr/local/bin/rdiff-backup --server" \ --exclude "/tmp/*" \ / yolco.argo.es::/z-backups/castor/root $backup --remote-schema "ssh %s /usr/local/bin/rdiff-backup --server" \ /opt yolco.argo.es::/z-backups/castor/opt $backup --remote-schema "ssh %s /usr/local/bin/rdiff-backup --server" \ /usr yolco.argo.es::/z-backups/castor/usr $backup --remote-schema "ssh %s /usr/local/bin/rdiff-backup --server" \ --exclude "/var/tmp/*" \ /var yolco.argo.es::/z-backups/castor/var $backup --remote-schema "ssh %s /usr/local/bin/rdiff-backup --server" \ /work yolco.argo.es::/z-backups/castor/work
El script SHELL de backup de mi directorio personal es:
backup="./rdiff-backup -v5 --exclude-other-filesystems" $backup --remote-schema "ssh %s /usr/local/bin/rdiff-backup --server" \ --exclude "/home/jcea/.local/share/Trash/files/*" \ --exclude "/home/jcea/.mozilla/firefox/**/Cache/*" \ --exclude "/home/jcea/.thunderbird/**/Cache/*" \ --exclude "/home/jcea/.thumbnails/normal/*" --exclude "/home/jcea/.thumbnails/large/*" \ --include "/home/jcea/.thunderbird/**/News/newsrc-*" \ --include "/home/jcea/.thunderbird/**/msgFilterRules.dat" \ --include "/home/jcea/.thunderbird/**/feeditems.rdf" \ --include "/home/jcea/.thunderbird/**/feeds.rdf" \ --exclude "/home/jcea/.thunderbird/**/Mail/*" \ --exclude "/home/jcea/.thunderbird/**/News/*" \ --exclude "/home/jcea/Desktop/spambayes/spambayes.messageinfo.db" \ --exclude "/home/jcea/.xsession-errors" \ --exclude "/home/jcea/firefox-*-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*" \ --exclude "/home/jcea/thunderbird-*-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*" \ --exclude "/home/jcea/.googleearth/Cache/dbCache.dat*" \ /home yolco.argo.es::/z-backups/castor/home
Como puede verse, excluyo del backup cosas como cachés de navegación o del "google earth". Tampoco hago backup de mi correo electrónico (para eso tengo otros mecanismos) pero sí hago copia de seguridad de mis reglas de correo electrónico, mi configuración de news o el estado (que no su contenido) de los feeds RSS.
ATENCIÓN: Yo utilizo una versión parcheada de "rdiff-backup" que conserva los "numeric-ids" originales, sin intentar mapear entre usuarios y grupos de ambas máquinas. Las versiones de desarrollo de "rdiff-backup" ya incorporan esa funcionalidad de serie mediante una opción en la línea de comando, pero aún están verdes para utilizarlas en producción. También tengo varios parches para la información que se va mostrando durante la ejecución del programa, razón por la que un "-v5" en otro despliegue puede no tener sentido.
Si perdermos algún fichero o directorio, podemos recuperarlo directamente del servidor de backup. Si lo que nos interesa estaba correcto en el último backup, lo podemos copiar directamente del servidor, sin más. Si es necesario recurrir a un valor histórico pasado, hay que utilizar las funcionalidades de recuperación de históricos de "rdiff-backup", explicadas de forma muy clara y precisa en el manual.
La cosa se complica si lo que queremos recuperar es una partición entera o, peor aún, el disco duro completo. Los pasos son los siguientes:
ifconfig eth0 195.47.206.4 up
mount /dev/sda5 /mnt cd /mnt rsync -a -H -S --delete --numeric-ids --stats --progress \ --force -e ssh --exclude rdiff-backup-data \ 195.47.206.8:/z-backups/castor/PATH .
Obsérverse el punto al final de la línea (larga) anterior. Obsérvese también que no estamos usando compresión porque estamos comunicándonos por red local a gigabit ethernet, así que comprimir nos quemaría CPU y probablemente sea más lento. Si estuviésemos haciendo la recuperación a través de Internet, la cosa cambiaría. El PATH indica dónde tenemos la copia de seguridad de nuestra partición "root". Nótese también que excluimos de la recuperación al directorio de metadatos de "rdiff-backup". Aunque muchos despliegues "rsync" ya utilizan SSH por defecto como transporte de datos, no siempre es así. Otros emplean "rsh" por defecto, así que forzamos el uso de SSH de forma explícita.
Por supuesto, al utilizar RSYNC nos beneficiamos de cualquier fichero utilizable que ya estuviese presente en el disco duro, amén de poder continuar donde se había quedado si, por ejemplo, se nos va la luz durante la recuperación.
Pero también hay que crear un par de directorios para sistemas de ficheros virtuales. En concreto "proc", "sys" y "dev". Esos directorios se crean si no existen ya, pero no se tocan más allá de la acción en sí de crearlos. Es decir, los dejamos vacíos. Son simples puntos de montaje para que el kernel pueda colgar sus cosas. Estos puntos se corresponden a una SUSE 10.0. Otras distribuciones pueden tener otros requisitos. Los puntos que haya creado en RAM el LiveCD/DVD nos pueden ser una guía útil.
Es conveniente haber sacado en algún momento anterior un listado de los puntos de montaje con su propietario, grupo y permisos, para dejarlos tal cual. Sino, los permisos que les da "root" por defecto probablemente sean apropiados. Los permisos de los puntos de montaje de particiones reales son accesibles también en el backup. Se copian tal cual.
En mi caso, todas las particiones de las que hago backup cuelgan de la partición "root". Si hiciese también backup de la partición que cuelgo en "/home/jcea/mnt/particion_1", entonces tendría que colgar esa partición en su lugar, y recuperarla con RSYNC, una vez que haya reconstruido "/home".
Este esquema nos permite recuperarnos tanto de borrados accidentales como de fallos catastróficos del disco duro completo o, también, para revertir una actualización completa del sistema. Esta última posibilidad la he utilizado en infinidad de ocasiones :-). Al tener las particiones separadas, por ejemplo, puedo revertir el sistema sin afectar a mi directorio personal.
¿Por qué utilizamos RSYNC para recuperar el sistema en vez de "rdiff-backup", por ejemplo?. La razón fundamental es que el LiveCD/DVD probablemente no incluya esa aplicación y, desde luego, no es la versión parcheada que yo empleo en mis sistemas :-).
Durante la realización del backup, los datos pueden estar siendo modificados. "rdiff-backup" no copiará al backup ningún fichero que haya sido alterado entre que se inicia y se termina su salvaguarada. Si ello es un problema, y nuestro sistema permite realizar "snapshots" de particiones (Solaris lo permite, y LVM de Linux también), la solución es crear un snapshot y hacer backup del mismo, aunque ello puede confundir la lógica que detecta cambios de "rdiff-backup".
En mi entorno diario, y dado que hago backups incluso varias veces al día, me conformo con una versión anterior de ese fichero, respaldado apenas unas horas antes. O, si el fichero es importante, repito el backup nuevamente, ya que el coste de espacio de cada backup es muy bajo. Como digo, no es raro que haga copias de seguridad varias veces al día.
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS