Skip to content

Instantly share code, notes, and snippets.

@evaristorivi
Created December 13, 2018 00:50
Show Gist options
  • Save evaristorivi/8541e35a254aba5d99303ce2ae8bbb5f to your computer and use it in GitHub Desktop.
Save evaristorivi/8541e35a254aba5d99303ce2ae8bbb5f to your computer and use it in GitHub Desktop.
DVD Backup Script
#!/bin/bash
#Autor: Evaristo R. Rivieccio Vega
#Configuración General
##############################
###############################
#Directorio de backup
directorioback="/root/backups"
###############################
#Nombre archivo .tar
nombretar="$directorioback/$(date +%d-%m-%y).tar.gz"
###############################
#Nombre de directorio a copiar
directorioacopiar="/home"
#Ubicación del fichero de log
flog="/var/log/backup.log"
#Configuración para rsyslog
varlocal="local0.*"
###############################
###############################
###############################
#---------------------------------------------------------------------
#Comprobación root
if [ ! $(whoami) = "root" ];then
echo
echo "Ejecute este script como root"
echo
exit 1
fi
#Comprobación: Sistema de log
reiniciar=null
if [ ! -f $flog ];then
touch $flog
chmod 600 $flog
chown syslog:adm $flog
echo "Fichero de log creado correctamente en $flog"
reiniciar=ok
fi
grep $flog /etc/rsyslog.d/50-default.conf > /dev/null 2>/dev/null
if [ ! $? -eq 0 ];then
echo "$varlocal $flog " >> /etc/rsyslog.d/50-default.conf
reiniciar=ok
fi
#Comprobación: Utilidad de grabado en DVD
if [ $reiniciar = "ok" ];then
systemctl restart rsyslog
mensaje="systemctl ha sido reiniciado - Comienza el registro de logs para este script"
logger -p local0.notice -t NOTICIA: $mensaje
echo $mensaje
fi
growisofs > /dev/null 2>/dev/null
if [ $? -eq 127 ];then
echo
mensaje="growisoft no detectado, instalando..."
logger -p local0.alert -t ALERTA: $mensaje
echo $mensaje
apt install growisofs > /dev/null 2>/dev/null
mensaje="growisofs instalado"
logger -p local0.notice -t NOTICIA: $mensaje
echo $mensaje
fi
#Comprobación: Directorio para los backups
if [ ! -d "$directorioback" ];then
echo
mensaje="No existe directorio para el backup"
logger -p local0.alert -t ALERTA: $mensaje
echo $mensaje
mkdir "$directorioback"
if [ $? -eq 0 ];then
mensaje="Directorio para backups creado en "$directorioback""
logger -p local0.notice -t NOTICIA: $mensaje
echo $mensaje
else
mensaje="No se puede crear el directorio "$directorioback""
logger -p local0.error -t ERROR: $mensaje
echo $mensaje
exit 1
fi
fi
#Comprobación: Usuarios del sistema
echo
for usuarios in $(cat /etc/passwd | cut -d ":" -f 1)
do
if [ -d /home/$usuarios ];then
mensaje="Preparando copia de seguridad para el usuario $usuarios"
logger -p local0.info -t INFO: $mensaje
echo $mensaje
fi
done
echo
#Backup
tar -czf "$nombretar" "$directorioacopiar" > /dev/null 2>/dev/null
if [ $? -eq 0 ];then
mensaje="Backup realizado correctamente"
logger -p local0.notice -t NOTICIA: $mensaje
echo $mensaje
#Comprobación: md5 del fichero .tar.gz en directorio backup local
md5LOCAL=$(md5sum "$nombretar" | cut -d " " -f 1)
mensaje="md5 del fichero local $nombretar verificado: $md5LOCAL"
logger -p local0.info -t INFO: $mensaje
echo $mensaje
echo
mensaje="Procediendo al copiado de $nombretar en DVD..."
logger -p local0.info -t INFO: $mensaje
echo $mensaje
growisofs -Z /dev/dvdrw "$nombretar" > /dev/null 2>/dev/null
if [ $? -eq 0 ];then
mensaje="Operación de copiado a DVD completada. Esperando la verificación md5..."
logger -p local0.notice -t NOTICIA: "$mensaje"
echo $mensaje
#La bandeja DVD se expulsará y volverá a introducirse. Esperamos un tiempo prodencial.
sleep 15
#Comprobación: md5 del fichero .tar.gz en DVD
md5DVD=$(md5sum "$(mount | grep sr0 | cut -d " " -f 3)/$nombretar" | cut -d " " -f 1)
else
mensaje="Error en el copiado al DVD, se conservará el archivo $nombretar"
logger -p local0.error -t ERROR: $mensaje
echo $mensaje
exit 1
fi
else
mensaje="Error en el generado del backup"
logger -p local0.error -t ERROR: $mensaje
echo $mensaje
exit 1
fi
if [ $md5DVD = $md5LOCAL ];then
mensaje="md5 veririfado: $md5DVD -El archivo $nombretar se ha copiado satisfactoriamente en el DVD"
logger -p local0.notice -t NOTICIA: "$mensaje"
echo $mensaje
mensaje="Eliminando copias locales..."
logger -p local0.info -t INFO: "$mensaje"
echo $mensaje
rm $nombretar
if [ $? -eq 0 ];then
mensaje="El arcihvo $nombretar ha sido eliminado satisfactóriamente"
logger -p local0.notice -t : "$mensaje"
echo $mensaje
else
mensaje="Ha ocurrido un error al intentar eliminar $nombretar"
logger -p local0.error -t ERROR: "$mensaje"
echo $mensaje
fi
fi
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment