Backup utilizando alias
Publicado en Linux, Script el 10 de July, 2009 por Fran. (Sin comentarios)El título no es muy claro, lo sé, pero no podía resumir lo que voy a explicar en algo tan corto.
Básicamente, a este script se le pasa una lista de directorios junto a un alias (o seudónimo) bajo el que se guardarán en el archivo que contenga el backup. Esto sirve:
- Para que en el archivo del backup no se guarden las rutas absolutas de los directorios guardados.
- Para no tener que realizar una copia local (duplicando el tamaño ocupado durante la realización del backup) de los archivos contenidos en los directorios a copiar en un directorio temporal.
- Para poder guardar los directorios con el nombre que se quiera dentro del archivo del backup.
Script
Este script está preparado para que lo ejecute cron con permisos de root y así poder copiar partes del sistema a las que otro usuario no podría acceder.
Si queréis que funcione con un usuario normal, sólo hace falta que eliminéis el if que está detrás del comentario # Check if the script is being run as root.
Los directorios a copiar se guardan en la variable DIRS separados por un espacio y con el formato alias:/ruta/al/directorio.
#!/bin/bash
# This script makes backups of a list of directories.
# It must be executed by root.
# Backup data
DIRS="images:/home/user/images/ code:/home/user/projects/ docs:/home/user/docs"
TMP_DIR=`mktemp -d`
BACK_FILE="/mnt/backup/`hostname --fqdn`_`date "+%Y-%m-%d"`.tar.gz"
TAR=$(which tar)
# Check if the script is being run as root
if [ "$UID" -ne "0" ]; then
echo "This script must be run as root!"
exit -1
fi
# Logging backup
echo "[`date "+%Y-%m-%d"`] Starting backup"
# Create symbolic links
for dir in $DIRS
do
SYM_DIR=${dir%:*}
TARGET_DIR=${dir#*:}
ln -s $TARGET_DIR $TMP_DIR/$SYM_DIR
done
# Create backup
cd $TMP_DIR > /dev/null
$TAR -chzf $BACK_FILE *
# Backup failed
if [ $? != 0 ]; then
cd - > /dev/null
rm -fR $TMP_DIR > /dev/null
echo "[`date "+%Y-%m-%d"`] Backup failed."
exit -1
fi
# Backup created
cd - > /dev/null
rm -fR $TMP_DIR > /dev/null
echo "[`date "+%Y-%m-%d"`] Backup done!"
exit 0