Replicacion diferencial de directorios y archivos

Bajo ciertas circunstancias, aparte de las medidas de respaldo hacia dispositivos externos (cintas) o las estrategias de espejo o arreglo en disco, es necesario constar con un sistema actualizado y funcional, que -en caso de desastre- permita continuar la operación o al menos reducir al mínimo el downtime. Por supuesto, podríamos restaurar desde cinta, ¿pero qué tal si esto no es posible?Al existir un equipo de contingencia, usualmente las bases de datos pueden replicarse en línea, sin embargo, que hay sobre los programas y archivos de configuración?
El siguiente shell script copia los archivos del directorio /home/user en el serverA hacia su homologo en el serverB, denominado /home/replic, excluyendo un par de archivos que no nos interesan o bien, contienen información que "dañaría" el destino.



#!/usr/bin/ksh
x=`date`
echo "Directory replication /nProcess begun at: $x"
HOMEDIR=/home/user

cd $HOMEDIR
find . -newer tstamp > list
cat list grep -v "/conf/config.xml" > list1
cat list1 grep -v "/conf/web.xml" > list2
sed "s/user/replic/g" list2 > list3
x=`wc -l list3 awk {'print $1'}`
y=0
y=$(($x - 1))
tail -$y list3 > lista
cat lista
for file in `cat lista`
do
tar -cvf - $file ssh root@serverb "cd /home; tar -xpvf -"
echo $file
done
touch tstamp
x=`date`
echo "Process finished at: $x"

exit 0



Aunque el script podría ser más reducido y elegante, se buscó ser lo más claro posible, mostrando los diferentes filtros aplicables; El find crea la primera lista con los archivos modificados posteriores a la fecha del último respaldo (tstamp), luego deseamos que los archivos config.xml y web.xml sean excluídos (si se necesitan más, un archivo aparte podría contenerlos), esto se logra por medio de un grep exclusivo.

El tail elimina la primera línea de la última lista filtrada, removiendo la referencia al directorio raíz original (/home/user), de no existir este paso la copia se realizaría íntegra, completa, inutilizando la diferencialidad requerida, ya que el comando tar copia subdirectorios por omisión.

El otro punto importante lo constituye el reemplazo de la ruta original /home/user por la del destino /home/replic, utilizando el comando sed. Es decir que el destino raíz no tiene que ser igual que el origen, pero sí lo que hay debajo de él.

Luego de la copia, el archivo tstamp es actualizado por el comando touch, de tal manera que la proxima iteración solo contemple archivos nuevos y aquellos que han sido modificados.

Finalmente, el script depende de que la ejecución de comandos remotos a través de ssh se haya configurado previamente, procedimiento que veremos en otra entrada del blog.

0 comentarios: