Tanto para hacer una copia de seguridad como para método de migración de un servidor a otro de la Bayes Database de Spamassasin podemos hacer uso de la herramienta sa-learn. El sistema de filtros bayesianos hace uso de técnicas estadísticas y de probabilidad para detectar los email spam, dando lugar a un porcentaje muy bajo de falsos positivos.
Para hacer la copia de seguridad, es tan sencillo como ejecutar el comando con el parámetro –backup y volcando la salida a un fichero:
# sa-learn --backup > /var/tmp/bayes.back
Para proceder a la restauración, ya sea en el mismo servidor o en otro se usa el parámetro –restore seguido de la ruta al fichero del backup. Podemos forzar también la ruta en la que se almacenan las bases de datos de bayesian:
# sa-learn --restore /var/tmp/bayes.back --dbpath $HOME_BAYES
Os recomiendo leer la documentación de sa-learn para comprender el resto de funcionalidades, como el entrenamiento de los filtros bayesianos para que sean efectivos:
http://spamassassin.apache.org/full/3.0.x/dist/doc/sa-learn.html
Hoy os quiero hablar de una aplicación muy interesante para aquellos que quieran guardar un backup completo de su sistema Debian/Ubuntu o crear una distribución/Live CD del mismo.
Remastersys es la aplicación que nos permite hacerlo con un único comando, más sencillo imposible. Vamos a ver como instalarlo y ejecutar los comandos para cada tarea.
Instalar Remastersys
Tenemos que añadir el repositorio correspondiente a nuestras sources, según la versión que tengáis de Ubuntu tenéis que añadir una línea distinta al fichero /etc/apt/sources.list
Gutsy o anterior:
# Remastersys
deb http://www.geekconnection.org/remastersys/repository remastersys/
Hardy:
# Remastersys
deb http://www.geekconnection.org/remastersys/repository ubuntu/
Karmic, Lucid y siguientes:
# Remastersys
deb http://www.geekconnection.org/remastersys/repository karmic/
Una vez hecho esto, instalamos con el siguiente comando:
sudo apt-get update && sudo apt-get install remastersys
Hacer una imagen del sistema (BACKUP)
sudo remastersys backup
Hacer un LIVE CD del sistema
sudo remastersys dist
Si no especificáis lo contrario, las imágenes se crearán en la carpeta /home/remastersys. Ya véis que su uso es bien sencillo, evidentemente se le pueden pasar parámetros para personalizar la ejecución del comando pero esto es lo más básico que se debe conocer para utilizarlo.
Probablemente la mayoría de vosotros trabajéis con bases de datos MySQL y tengáis scripts personalizados para hacer copias de seguridad de las mismas. Por ello, y por si os fuera de utilidad os dejo esta línea de comandos que hace un dump de todas las bases de datos de un servidor MySQL separadas en ficheros .sql independientes.
for DB in `mysql -e "show databases" -u USUARIO -pPASSWORD | grep -v Database`; do mysqldump -u USUARIO -pPASSWORD $DB > "$DB.sql"; done
Como podéis ver es bastante sencillo, hacemos un bucle con la salida del comando “show databases” que vuelca por pantalla todas las bases de datos del servidor, eliminamos la única línea que no nos interesa (la que contiene Database) y vamos haciendo una a una la copia de seguridad de cada una de las bases de datos con mysqldump. Únicamente tendréis que modificar el usuario y clave con el que conectar al servicio.
Por defecto, rsync no elimina los ficheros antiguos en el servidor de destino de la copia. Esto implica que pese a que haya ficheros en el sistema del que estamos haciendo copias de seguridad que ya han sido eliminados, permanecerán por siempre en el sistema de copias de seguridad (destino) a no ser que los eliminemos manualmente.
Las opciones para forzar que cada vez que ejecutemos rsync también se eliminen en el destino ficheros y carpetas que ya no existen en el origen son las siguientes:
--del an alias for --delete-during
--delete delete extraneous files from destination dirs
--delete-before receiver deletes before transfer (default)
--delete-during receiver deletes during transfer, not before
--delete-after receiver deletes after transfer, not before
--delete-excluded also delete excluded files from destination dirs
--ignore-errors delete even if there are I/O errors
--force force deletion of directories even if not empty
--max-delete=NUM don't delete more than NUM files
La opción más básica es –delete, aunque podemos personalizar aún más y elegir si deseamos que los ficheros a borrar se eliminen antes de la transferencia de ficheros (–delete-before, es lo mismo que –delete), después (-delete-after) o durante (–delete-during). Además de esto podemos elegir si ignorar errores y borrar pese a fallos de I/O, forzar eliminación de directorios no vacíos, etc.
Ejemplo de rsync con sincronización y borrado de archivos:
#!/bin/sh
# This script does personal backups to a rsync backup server. You will end up
# with a 7 day rotating incremental backup. The incrementals will go
# into subdirectories named after the day of the week, and the current
# full backup goes into a directory called "current"
# tridge@linuxcare.com
# directory to backup
BDIR=/home/$USER
# excludes file - this contains a wildcard pattern per line of files to exclude
EXCLUDES=$HOME/cron/excludes
# the name of the backup machine
BSERVER=owl
# your password on the backup server
export RSYNC_PASSWORD=XXXXXX
########################################################################
BACKUPDIR=`date +%A`
OPTS="--force --ignore-errors --delete-excluded --exclude-from=$EXCLUDES
--delete --backup --backup-dir=/$BACKUPDIR -a"
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# the following line clears the last weeks incremental directory
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync --delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir
# now the actual transfer
rsync $OPTS $BDIR $BSERVER::$USER/current
Últimamente encuentro bastante a menudo este error en servidores bajo cPanel. Este error se recibe en la cuenta de correo configurada para recibir todas las alertas de backups, creación de cuentas, etc.
En la mayor parte de casos, el error era provocado por una asignación incorrecta a los permisos de la carpeta public_ftp, por algún motivo tenían permisos 000, siendo los adecuados 750. El error entonces se soluciona reasignando los permisos correctos:
chmod 0750 public_ftp/
Si recibís el error pese a tener bien los permisos de la carpeta public_ftp, revisad los de las demás carpetas de la cuenta con problemas. Desde una actualización reciente, los backups se ejecutan con el usuario de la cuenta en vez de como root, lo que provoca que si una de las carpetas no tiene los permisos suficientes, salte el error.
No conocía la opción de hacer backups incrementales comprimidos con TAR, se puede realizar del siguiente modo:
tar -Pvuf backup.tar /carpeta/a/comprimir
De este modo se comprimirá dicha carpeta, y la próxima vez que se vuelva a repetir dicho comando, solo cambiarán los ficheros modificados y se añadirán los nuevos sin necesidad de hacer toda la compresión de nuevo. Todo esto se debe a añadir el parámetro “u” a la línea de comandos.
Nota: Los ficheros borrados no se eliminan del fichero comprimido.
Vía | Shell fu
Es posible hacer un backup de una sola tabla en vez de toda la base de datos, para ello, utiliza el siguiente comando mysqldump:
mysqldump -p --user usuario basededatos tabla > backuptabla.sql
Vía | Uno-Code
El comando rsync sustituye al obsoleto rcp (remote-copy). Se trata de un comando de gran flexibilidad, permite encriptar las trasferencias de datos a través de ssh, permite realizar copias desde una máquina local a una remota (y viceversa), de local a local, y entre servidores rsync.
Lo que diferencia a rsync de otros comandos o utilidades es que usa un algoritmo mediante el cual, cuando se copian datos, solamente se copian aquellos que han sido modificados o que han cambiado desde la última vez que se copiaron. Si un fichero a cambiado solamente copiará aquellos datos diferentes entre el fichero antiguo y el nuevo. Esto supone un ahorro considerable de ancho de banda, tiempo y carga del sistema.
Como siempre, toda la información y opciones de rsync en su página man:
man rsync
Os dejo algunos ejemplos para que os vayáis familiarizando con la herramienta, esto y mucho más en la web oficial de rsync.
backup a un servidor de backups central cada 7 días de forma incremental
#!/bin/sh
# This script does personal backups to a rsync backup server. You will end up
# with a 7 day rotating incremental backup. The incrementals will go
# into subdirectories named after the day of the week, and the current
# full backup goes into a directory called "current"
# tridge@linuxcare.com
# directory to backup
BDIR=/home/$USER
# excludes file - this contains a wildcard pattern per line of files to exclude
EXCLUDES=$HOME/cron/excludes
# the name of the backup machine
BSERVER=owl
# your password on the backup server
export RSYNC_PASSWORD=XXXXXX
########################################################################
BACKUPDIR=`date +%A`
OPTS="--force --ignore-errors --delete-excluded --exclude-from=$EXCLUDES
--delete --backup --backup-dir=/$BACKUPDIR -a"
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# the following line clears the last weeks incremental directory
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync --delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir
# now the actual transfer
rsync $OPTS $BDIR $BSERVER::$USER/current
Backup a un disco spare
I do local backups on several of my machines using rsync. I have an
extra disk installed that can hold all the contents of the main
disk. I then have a nightly cron job that backs up the main disk to
the backup. This is the script I use on one of those machines.
#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
LIST="rootfs usr data data2"
for d in $LIST; do
mount /backup/$d
rsync -ax --exclude fstab --delete /$d/ /backup/$d/
umount /backup/$d
done
DAY=`date "+%A"`
rsync -a --delete /usr/local/apache /data2/backups/$DAY
rsync -a --delete /data/solid /data2/backups/$DAY
The first part does the backup on the spare disk. The second part
backs up the critical parts to daily directories. I also backup the
critical parts using a rsync over ssh to a remote machine.
mirroring vger CVS tree
The vger.rutgers.edu cvs tree is mirrored onto cvs.samba.org via
anonymous rsync using the following script.
#!/bin/bash
cd /var/www/cvs/vger/
PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin
RUN=`lps x | grep rsync | grep -v grep | wc -l`
if [ "$RUN" -gt 0 ]; then
echo already running
exit 1
fi
rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog $HOME/ChangeLog
sum1=`sum $HOME/ChangeLog`
sum2=`sum /var/www/cvs/vger/CVSROOT/ChangeLog`
if [ "$sum1" = "$sum2" ]; then
echo nothing to do
exit 0
fi
rsync -az --delete --force vger.rutgers.edu::cvs/ /var/www/cvs/vger/
exit 0
Note in particular the initial rsync of the ChangeLog to determine if
anything has changed. This could be omitted but it would mean that the
rsyncd on vger would have to build a complete listing of the cvs area
at each run. As most of the time nothing will have changed I wanted to
save the time on vger by only doing a full rsync if the ChangeLog has
changed. This helped quite a lot because vger is low on memory and
generally quite heavily loaded, so doing a listing on such a large
tree every hour would have been excessive.
Backup automatizado de home
I use rsync to backup my wifes home directory across a modem link each
night. The cron job looks like this
#!/bin/sh
cd ~susan
{
echo
date
dest=~/backup/`date +%A`
mkdir $dest.new
find . -xdev -type f \( -mtime 0 -or -mtime 1 \) -exec cp -aPv "{}"
$dest.new \;
cnt=`find $dest.new -type f | wc -l`
if [ $cnt -gt 0 ]; then
rm -rf $dest
mv $dest.new $dest
fi
rm -rf $dest.new
rsync -Cavze ssh . samba:backup
} >> ~/backup/backup.log 2>&1
note that most of this script isn't anything to do with rsync, it just
creates a daily backup of Susans work in a ~susan/backup/ directory so
she can retrieve any version from the last week. The last line does
the rsync of her directory across the modem link to the host
samba. Note that I am using the -C option which allows me to add
entries to .cvsignore for stuff that doesn't need to be backed up.
Comentarios recientes