Seguramente tendrás información sensible en la computadora. Quizá desarrolles, o escribas, o tengas fotos, gráficos, datos...
Provablemente, ésta información quieras conservarla... Y provablemente tengas un disco duro externo para backups. No queremos perder ésta información, ¿no?
El backup es el método más fiable de recuperación de desastres. El script que creé, está basado en el comando tar, es desatendido (se configura una vez y listo!),
y permite la creación de copias incrementales y completas según el día de la semana que hayamos configurado.
Sólo tendrás que lanzarlo cuando quieras y él se encargará del resto.
Obviamente, si no quieres lanzar tu mismo el comando, tendrás que crear el cronjob correspondiente y tener el soporte que utilices conectado contínuamente.
De forma predeterminada, se asume que el script funciona en en un disco duro externo. Se podría adaptar a cinta magnética o similares.
Asegúrate de tener siempre espacio suficiente en disco, de otra forma, podría fallar tu copia. Sin más preámbulo, ahí va el script...
#!bin/bash
getbin()
{
echo "`whereis $1|tr ' ' '\\n'|grep bin`"
}
# Editar esto
#-----------------------------------------------------------------
TMPFOLDER=/home
LOGFOLDER=bkplog
BKPFOLDER=TarBackups
# Incremental backup LMXJVS "1-Lunes, 2-Martes, 3-Miercoles, 4-Jueves, 5-Viernes, 6-Sábado"
INCREMENTAL="123456"
# Full backup "7-Domingo"
FULL="7"
# No editar a partir de aquí
#-----------------------------------------------------------------
TAR=`getbin tar`
GZIP=`getbin gzip`
GUNZIP=`getbin gunzip`
TODAY=`date +"%u"`
OPTIONS=""
print_banner()
{
echo ""
echo "----------------------------------------"
echo "| Automated tar-based Backup System |"
echo "----------------------------------------"
echo ""
}
#
# La función tarmirror admite 2 parámetros :
#
# @parámetro1 : El directorio o carpeta, desde el que haremos backup de otras carpetas
# incluídas en ésta(e)
# @parámetro2 : Los subdirectorios que bajan del anterior parámetro,
# separados por comas y sin espacios
# (para ello es conveniente poner éste parámetro entre comillas)
#
tarmirror()
{
for f in `echo $2|tr ',' '\\n'`
do
#
# Generate Backup Options
#
LOGFILE="$BKPFOLDER/$f.inc"
#
# Create logfiles subfolders
#
PTMP=`echo $LOGFILE|sed -e 's/\\/[^\\/]*$//'`
if [ -n "$PTMP" -a ! -d "$PTMP" -a ! -f "$PTMP" ] ; then
mkdir -p $PTMP
fi
#
# Elegimos tipo de copia de seguridad según el día
#
if [ -n "`echo $INCREMENTAL|grep $TODAY`" ] ; then
BACKUP="Incremental"
#
# Si no existe una copia completa, se crea sola
#
if [ ! -f $LOGFILE ] ; then
BACKUP="Full"
echo "No existe $f full backup, creando..."
fi
else
BACKUP="Full"
fi
#
# Generación de Opciones de tar
#
if [ "$BACKUP" == "Incremental" ] ; then
#
# Incremental Backup
#
BFOLDER="$BKPFOLDER/Incremental/$f"
# Si no existe la carpeta destino, se crea
if [ ! -d "$BFOLDER" ] ; then
mkdir -p $BFOLDER
fi
# Cual es el número de la siguiente copia?
if [ -d "$BFOLDER" -a -n "`echo $BFOLDER|grep -q \\.`" ] ; then
NEXT=`find $BFOLDER/ -print|sort -n|tail -1|sed -e 's/\\/\\([^\\/]*\\)$/\\1/'|cut -f2 -d'.'`
NEXT=`echo "${NEXT}+1"|bc`
if [ -z "$NEXT" ] ; then
NEXT="1"
fi
else
NEXT="1"
fi
#
# Ajustamos las opciones, en listed-incremental va el índice de copias de seguridad
# que se consultará para cada incremental
#
OPTIONS=" --create --preserve-permissions --gzip --listed-incremental=$LOGFILE --file=$BFOLDER/`echo $f|sed -e 's/\\/\\([^\\/]*\\)$/\\1/'`.$NEXT.tar.gz "
else
#
# Full Backup
#
BFOLDER="$BKPFOLDER/FullCopy/$f"
# Si no existe la carpeta destino, se crea
if [ ! -d "$BFOLDER" ] ; then
mkdir -p $BFOLDER
fi
# Cual es el número de la siguiente copia?
if [ -d "$BFOLDER" -a -n "`echo $BFOLDER|grep -q \\.`" ] ; then
NEXT=`find $BFOLDER/ -print|sort -n|tail -1|sed -e 's/\\/\\([^\\/]*\\)$/\\1/'|cut -f2 -d'.'`
NEXT=`echo "${NEXT}+1"|bc`
if [ -z "$NEXT" ] ; then
NEXT="1"
fi
else
NEXT="1"
fi
#
# Ajustamos las opciones, en listed-incremental va el índice de copias de seguridad
# que se consultará para cada incremental
#
OPTIONS=" --create --preserve-permissions --gzip --level=0 --listed-incremental=$LOGFILE --file=$BFOLDER/`echo $f|sed -e 's/\\/\\([^\\/]*\\)$/\\1/'`.$NEXT.tar.gz "
fi
echo ">> $BACKUP $1"
# Crea nuestro archivo tar correspondiente
if [ -f $f.tar.gz ]
then
echo "Error: $f.tar.gz exists, skipping..."
else
echo "Creando $f.tar.gz..."
$TAR $OPTIONS $1/$f
fi
done
}
print_banner
# Editar esto
#-----------------------------------------------------------------
#
# La función tarmirror admite 2 parámetros :
#
# @parámetro1 : El directorio o carpeta, desde el que haremos backup de otras carpetas
# incluídas en ésta(e)
# @parámetro2 : Los subdirectorios que bajan del anterior parámetro,
# separados por comas y sin espacios
# (para ello es conveniente poner éste parámetro entre comillas)
#
# |----Esta es la llamada a la función, añadir las llamadas que procedan
# V
tarmirror /opt "lampp,Programas"
#
# Está permitido también poner otro(s) directorio(s) antes del directorio final,
#
tarmirror /home/javitux "Documentos/Ofimatica,Documentos/trabajos,Imágenes"
#-----------------------------------------------------------------
echo "all done!"
exit 0
Muestra de la ejecución del script
root@stoned:/media/CD3E-3326# ./gobkp.sh
----------------------------------------
| Automated tar-based Backup System |
----------------------------------------
No existe lampp full backup, creando
>> Full /opt
Creando lampp.tar.gz...
No existe Programas full backup, creando
>> Full /opt
Creando Programas.tar.gz...
/bin/tar: Eliminando la `/' inicial de los nombres
No existe Documentos/Ofimatica full backup, creando
>> Full /home/javitux
Creando Documentos/Ofimatica.tar.gz...
/bin/tar: Eliminando la `/' inicial de los nombres
No existe Documentos/trabajos full backup, creando
>> Full /home/javitux
Creando Documentos/trabajos.tar.gz...
/bin/tar: Eliminando la `/' inicial de los nombres
No existe Imágenes full backup, creando ...
>> Full /home/javitux
Creando Imágenes.tar.gz...
/bin/tar: Eliminando la `/' inicial de los nombres
all done!
El sistema de archivos del soporte de almacenamiento queda así tras 2 ejecuciones:
TarBackups/
TarBackups/FullCopy
TarBackups/FullCopy/lampp
TarBackups/FullCopy/lampp/lampp.1.tar.gz
TarBackups/FullCopy/Programas
TarBackups/FullCopy/Programas/Programas.1.tar.gz
TarBackups/FullCopy/Documentos
TarBackups/FullCopy/Documentos/Ofimatica
TarBackups/FullCopy/Documentos/Ofimatica/DocumentosOfimatica.1.tar.gz
TarBackups/FullCopy/Documentos/trabajos
TarBackups/FullCopy/Documentos/trabajos/Documentostrabajos.1.tar.gz
TarBackups/FullCopy/Imágenes
TarBackups/FullCopy/Imágenes/Imágenes.1.tar.gz
TarBackups/lampp.inc
TarBackups/Programas.inc
TarBackups/Documentos
TarBackups/Documentos/Ofimatica.inc
TarBackups/Documentos/trabajos.inc
TarBackups/Imágenes.inc
TarBackups/Incremental
TarBackups/Incremental/lampp
TarBackups/Incremental/lampp/lampp.1.tar.gz
TarBackups/Incremental/Programas
TarBackups/Incremental/Programas/Programas.1.tar.gz
TarBackups/Incremental/Documentos
TarBackups/Incremental/Documentos/Ofimatica
TarBackups/Incremental/Documentos/Ofimatica/DocumentosOfimatica.1.tar.gz
TarBackups/Incremental/Documentos/trabajos
TarBackups/Incremental/Documentos/trabajos/Documentostrabajos.1.tar.gz
TarBackups/Incremental/Imágenes
TarBackups/Incremental/Imágenes/Imágenes.1.tar.gz
-> Para su utilización, debereis situar el script en el mismo disco de backups y ejecutarlo desde ahí, después de editarlo con las opciones que necesiteis configurar.
-- Principalmente, es conveniente situarlo ahí por seguridad; para que no nos modifiquen el script.
-> Son Configurables : Días de la semana que se realizará backup incremental o completo, qué directorios y subdirectorios se añadirán, nombre del directorio de backup, básicamente.
Podeis modificarlo y adaptarlo a vuestro gusto y según vuestras necesidades de uso.
El comando tar se puede utilizar sin problemas para restaurar archivos, pero en el futuro crearé otro script para restaurar copias.
Mientras tanto, os dejo un enlace con ayuda sobre el comando tar, por si teneis que restaurar copias http://www.gnu.org/s/automake/manual/tar/tar_toc.html
Las opciones que interesan, son las que aparecen en la variable $OPTIONS
Cualquier duda, consulta, bug... no dudeis en postear un comentario.
Os contestaré en cuanto lo vea.
Gracias por la visita y que disfruteis del script.
NOTA.:Remarcar, que éste script, lo creé para uso personal y se ajusta a mis necesidades, lo pongo aquí por si a alguien más le pudiera servir pero no es una solución profesional, más bien "quick n' dirty code". (al menos creo que libre de errores, si encontrais alguno, hacedmelo saber)
-- Javitux (c) 2011
blog comments powered by