Syncronizator.sh

Pierdo un tiempo bendito en una cosa tan absurda como reinventar la rueda. Sé que hay muchos programas de realización de copias de seguridad, algunos, incluso, de sincronización de carpetas que pueden interesarme para calmar mi obsesión de realizar copias y copias para asegurarme de que, en cualquier momento, pase lo que pase, mis archivos estarán a salvo y podré trabajar desde cualquier lugar, cualquier ordenador, sin tener que perder un minuto restaurando sistemas…

Lo borro todo, lo restauro todo de una copia de seguridad, en disco externo. en otro PC, en la nube sería ideal, pero hay problemas de espacio que no tengo resueltos… el servidor con el que llevamos a cabo el hosting es un poco reacio a dejarnos subir cosas (Esto de subir siempre me suena gracioso y me imagino, en la nube blanca, mis archivos colgados como ropa en tendedero). Es normal, en realidad, el servidor que alberga la web de Clave 53, Giusseppe.net (incluyendo este texto que estoy escribiendo en el diario), carmendelarosa.com, lilianflores.com, espacioelmanantial.com y algún otro dominio con menos cosas… no está contratado para ser un servidor de backup, que los hay, ni una carpeta en la nube… o sea, en Internet.

Pero siempre estoy pensando (y por siempre es, verdaderamente, siempre) en qué ocurrirá si mi portátil deja de funcionar. Es algo que sé que pasará, ha pasado alguna vez e inevitablemente volverá a suceder. Así que debo estar seguro (y esto sé que es imposible) de que todo lo que haga lo tendré en otro PC, en algún disco externo… vamos, que he de tener réplicas infinitas pues solo así acabaría por estar convencido de que no hay nada que pueda ocurrir que impidiese restaurar alguna.

Y además, ahora tengo una paranoia nueva…

Según terminé de programar mi querido Shell Script que sincroniza las carpetas que quiero que sincronice… me ha dado por pensar que tengo un origen único para todas estas cosas, con lo cual, si alguna vez tengo un problema en ese origen también lo sincronizaré, como buen sincronizador que soy, en todas las demás ubicaciones donde quiero clonarlo. Así que el siguiente paso (que ya hago, pero no tengo bien automatizado) es realizar copias de las copias a carpetas que no toque, que no modifique en adelante o a soportes extraíbles sin permiso de escritura, algunos de los cuales he de retirar de esta casa y llevar lejos, para evitar cualquier posible pérdida de datos en el caso de un ataque nuclear o de un terremoto o un incendio en este edificio. Son cosas que pasan. Sé que esas cosas pasan.

Así que tengo que pensarlo… ¿o no?

Bueno, de momento, hoy quiero compartir (con la pérdida de privacidad consecuente) el archivo que utilizo para realizar mis copias de seguridad desde hoy mismo.

Es divertido darme cuenta de que lo comento tanto que cualquier otra persona podría continuar su desarrollo o su mantenimiento en caso de que fuese necesario, como si fuese pensando en un posible backup o reemplazo, incluso, para mí mismo. Sin pensar si lo que guardo será lo que interese guardar en un futuro o a algún otro que no sea yo.

¡A veces creo que estoy un poco loco!

~/bin/sincronizator.sh


#!/bin/sh

# DEFINICION de VARIABLES
username="$(whoami)"
servidor="192.168.1.2"

# Vamos a elegir qué cosas sincronizar en estas variables lógicas
# Por defecto, sincronizamos todo, local y remoto
SYNC_JMDOMIN=1
SYNC_GIUSSEPPE=1
SYNC_LOCAL=1
SYNC_REMOTE=1

if [ $# -gt 0 ]
then
if [ $1 -eq 1 ]
then
SYNC_LOCAL=1
SYNC_REMOTE=0
elif [ $1 -eq 2 ]
then
SYNC_LOCAL=0
SYNC_REMOTE=1
else
echo "Uso $0 [1=local|2=remote] (por defecto es TOTAL)"
exit
fi
fi

# DEFINICION DE FUNCIONES
cabecera () {
echo "
___________________________________________________________________
___________________________________________________________________"
}
sincroniza () {
cabecera
echo "Sincronizando carpeta: $3"
echo "Directorio de Origen: $1"
echo "Directorio de Destino: $2"
dirorigen=$1
dirdestino=$2
carpeta=$3
origen="$dirorigen/$carpeta/"
destino="$dirdestino/$carpeta/"
rsync -rtvu --delete $origen $destino
}

# Sincronizamos carpetas utilizando la función sincroniza
cabecera
echo "COMIENZO DE LA SINCRONIZACIÓN CORRESPONDIENTE A LA FECHA:"
date

# Sincronizando JMDOMIN
if [ $SYNC_JMDOMIN -eq 1 ]
then
diskorigen="/media/GSPDISK"
dirbase="jmdomin"
dirorigen="$diskorigen/$dirbase"
subcarpetas="FOTOS Archivo Obra Talleres TEXTOS trabajo web-sites"
cabecera
echo "COMIENZO DE LA SINCRONIZACIÓN DE LAS CARPETAS DE JMDOMIN"

# Con destino al disco de DATOS
if [ $SYNC_LOCAL -eq 1 ]
then
diskdestino="/media/Datos"
dirdestino="$diskdestino/$dirbase"
cabecera
echo "ORIGEN= $dirorigen"
echo "DESTINO= $dirdestino"

for subcarpeta in $subcarpetas
do
sincroniza $dirorigen $dirdestino $subcarpeta
done
fi

if [ $SYNC_REMOTE -eq 1 ]
then
# Con destino al disco de RED de $servidor (TOWI)
smbclient //$servidor/$dirbase -N -c pwd
if [ $? -eq 0 ]
then
# Servidor y recurso accesible
# Primero, montamos y verificamos que el destino esté accesible
echo "Montando /mnt/$dirbase"
mount /mnt/$dirbase
estamontado=`mount|grep $servidor|grep $dirbase|wc -l`
if [ $estamontado -eq 1 ]
then
diskdestino="/mnt"
dirdestino="$diskdestino/$dirbase"
subcarpetas="Archivo Obra Talleres TEXTOS trabajo web-sites"

# Verificar si se puede escribir
touch $dirdestino/kkkkk
if [ $? -eq 0 ]
then
rm $dirdestino/kkkkk # Borrando restos
cabecera
echo "ORIGEN= $dirorigen"
echo "DESTINO= $dirdestino"

for subcarpeta in $subcarpetas
do
sincroniza $dirorigen $dirdestino $subcarpeta
done
else
echo "No es posible escribir en $dirdestino"
fi
else
echo "La carpeta $dirbase del servidor $servidor no está montada"
fi
echo "DES-Montando /mnt/$dirbase"
umount /mnt/$dirbase
else
# Servidor o recurso NO accesible
echo "Error de conexión con el servidor $servidor o el recurso $dirbase"
fi
fi # fin de SYNC_REMOTE
else
echo "Evitada la sincronización de JMDOMIN"
fi

# Sincronizando GIUSSEPPE
if [ $SYNC_GIUSSEPPE -eq 1 ]
then
diskorigen="/home"
dirbase="giusseppe"
dirorigen="$diskorigen/$dirbase"
subcarpetas="bin cloud Documentos Escritorio EudoraNEW"
cabecera
echo "COMIENZO DE LA SINCRONIZACIÓN DE LAS CARPETAS DE GIUSSEPPE"

# Sincronización LOCAL de GIUSSEPPE
if [ $SYNC_LOCAL -eq 1 ]
then
# Con destino al disco de DATOS
diskdestino="/media/Datos"
dirdestino="$diskdestino/$dirbase"
cabecera
echo "ORIGEN= $dirorigen"
echo "DESTINO= $dirdestino"

for subcarpeta in $subcarpetas
do
sincroniza $dirorigen $dirdestino $subcarpeta
done

# Con destino al disco de GSPDISK
diskdestino="/media/GSPDISK"
dirdestino="$diskdestino/$dirbase"
cabecera
echo "ORIGEN= $dirorigen"
echo "DESTINO= $dirdestino"

for subcarpeta in $subcarpetas
do
sincroniza $dirorigen $dirdestino $subcarpeta
done
fi
else
echo "Evitada la sincronización de GIUSSEPPE"
fi

cabecera
echo "FIN DE LA SINCRONIZACIÓN CORRESPONDIENTE A LA FECHA:"
date

Esto no es una broma