Buenas, por si a alguien le sirve he hecho este sistema de copias de
seguridad (probado en SuSe 8.1 y SuSe 9.0 respaldando un servidor de
BD progress 9.1b)
El sistema se basa en tres discos en red WD MyBook World Edition de
500 Gb de capacidad .
*PREPARACION DEL DISCO*
- Debemos de asegurarnos de que la red en la que vamos a trabajar
tiene habilitado el DCHP para que nos asigne una ip de forma
automática.
Después de desempaquetarlo y conectarlo a la red lo enchufamos y nos
fijamos en la luz azul circular, cuando esta luz esté fija el disco
estará preparado y con su ip, descargamos un port-scaner de cualquier
parte de internet para ver que ip le ha asignado, para saber la ip el
port-scaner nos deberá de dar un dispositivo que se llamará
MYBOOKWORLD o algo similar, anotamos la ip.
Desde un navegador de internet (no hace falta tener conexión a
internet) ponemos la ip sin ningún tipo de barras ni nada y nos pedirá
un usuario y contraseña:
Usuario: admin
Contraseña: 123456
Nos sale un aviso el cual "nos leemos…" y aceptamos los acuerdos de
licencia y pasamos a configurar el disco dandole una IP fija, el grupo
de trabajo y creando un usuario que se llame "admsis" con la
contraseña "******" , despues le daremos un nombre que será "discoX"
donde X tiende al número de disco que ocupará en el sistema de
seguridad (si hay 3 discos pues disco1, disco2 …. , luego ponemos una
clave nueva para el "admin"
IMPORTANTE: aunque este disco no corra windows hay que reiniciarlo y
dejarlo que la luz se quede fija otra vez (en azul).
*PREPARACION DEL SISTEMA DE COPIA*
creamos una carpeta en /mnt (como ROOT) llamada discoX (donde x tiende
al numero de disco) y procedemos a montar el disco de esta forma:
mount -t smbfs -o username=admsis,password=admsis //xxx.xxx.xxx.xxx/PUBLIC
donde lógicamente xxx.xxx.xxx.xxx es la dirección ip de nuestro disco
y comprobamos que esté bien montado
~# cd /mnt/disco1
~# mkdir prueba
nos vamos al pc y escribimos en un navegador
\\xxx.xxx.xxx.xxx
nos saldrá una carpeta que se llama PUBLIC, le damos 2 clicks y
apareceré una carpeta que se llama prueba, la borramos (al borrarla
sabemos que tenemos permisos de lectura y escritura) y creamos 3
carpetas que son
bd
reg
textos
(OJO, he usado estas tres carpetas por que es un caso específico)
(lo podemos hacer también desde consola depende de lo friki que
seamos) que sería
mkdir /mnt/disco1/bd
mkdir /mnt/disco1/reg
mkdir /mnt/disco1/textos
en este paso ya tenemos el destino de la copia.
*PREPARACION DE SERVIDOR*
entramos de forma local / remota como root y nos vamos a /root/bin )
para crear el script llamado "copiaext"
¡OJO! Como los sitemas de archivos basados en EXT2 y EXT3 que son los
que usan nuestros servidores no podemos crear archivos de mas de 2GB
si no no se hace la copia por lo cual cuando creo el tar lo spliteo en
trozos de 1 GB
(los asteriscos son para ocultar información, sustituirlos por la carpeta)
#!/bin/sh
# Shell de copia de seguridad
# Definimos las variables
DAT1=/home/bd
DAT2=/home/****/r
DAT3=/home/****/
DST=/mnt/disco1
EDST=(aqui la dirección de correo que recibirá las alertas de la copia)
# Paramos la base de datos
/root/bin/servpara 2>&1 > /dev/null (<- script para parar el progress)
# Copiamos, empaquetamos y comprimimos los datos desde el directorio raiz
cd /
#bd
rm -f $DST/bd/bd-dat.tar*
tar -cvf - $DAT1 | split -b 1000m - $DST/bd/bd-dat.tar
#reg
rm -f $DST/reg/reg-dat.tgz
tar -cvf - $DAT2 | split -b 1000m - $DST/reg/reg-dat.tar
#textos
rm -f $DST/textos/tex-dat.tgz
tar -cvf - $DAT3 | split -b 1000m - $DST/textos/tex-dat.tar
# Arrancamos de nuevo la base de datos
/root/bin/servarra 2>&1 > /dev/null
# Generamos el texto a enviar
/tmp/copiaext.txt
echo "Se han generado los
ficheros de copia de seguridad para realizar
copia externa">> /tmp/copiaext.txt
echo "Se han ubicado en $DST los siguientes ficheros:">
/tmp/copiaext.txt
echo "">
/tmp/copiaext.txt
echo "">
/tmp/copiaext.txt
# Notificamos que los ficheros estan listos para copiar
mail -s "Copia hecha contra disco en red MAESTRO" $EDST</tmp/copiaext.txt
bueno, solo nos quedan dos cosas "automontar" los discos en el
arranque y automatizar la copia.
*AUTOMONTAJE DE DISCOS*
se puede hacer via fstab pero como se nace cansado para vivir
descansando yo lo que hago es añadir en el script "servarra" (dentro
de /bat) la siguiente línea al final de todo (servarra es un script
que arranca con el servidor)
# Montar el disco 1
mount -t smbfs -o username=admsis,password=******
//xxx.xxx.xxx.xxx/PUBLIC /mnt/disco1
donde xxx.xxx.xxxx.xxx es la ip del disco famoso…..
*AUTOMATIZACIÓN DE COPIA*
pues vía cron para no perder las buenas costumbres:
ejemplo:
~# crontab –e <- para abrir el "automatizador"
############# COPIA A DISCO EXTERNO (500GB)
59 23 * * 1-6 /root/bin/copiaext
que a las 23 y 59 de lunes a sábados haga esta copia
Ejemplo de contenido de "servarra" en un caso de un disco
# Montar el disco 1
mount -t smbfs -o username=admsis,password=*****
//10.20.228.169/PUBLIC /mnt/disco1
Ejemplo de contenido de "servarra" en caso de 3 discos:
# Montar el disco 2
mount -t smbfs -o username=admsis,password=******
//10.20.228.170/PUBLIC /mnt/disco2
# Montar el disco 3
mount -t smbfs -o username=admsis,password=*****
//10.20.228.169/PUBLIC /mnt/disco1
SI LA COPIA SE HACE EN MAS DE UN DISCO!!!.....
Pues es muy sencillo, hacemos la copia con el script "copiaext" que ya
tenemos en el CRON en el primero de los discos, pero si esperamos las
3 horas aproximadamente de copia nos ponemos en 9 horas y vamos muy
justos (no os olvideis de que cuando se hace la copia la BD está
parada) por lo cual una vez que haga la priemera copia el scrip vuelve
a lanzar la BD.
En ese momento se lanza otro script que lo que hace es un simple "cp
–r /mnt/disco1/* /mnt/disco2/ por lo cual se podría trabajar sin
problema en el programa (por que la bd está lanzada)
El script de copia a los 2 discos es así
#!/bin/sh
# script que clona el contenido del disco 1 al disco 2 y 3, rtoucedo(a)elitere.ges
# Defino variables
DIS1=/mnt/disco1
DIS2=/mnt/disco2
DIS3=/mnt/disco3
EDST=rtoucedo(a)gmail.com
#vacio el destino del disco 2 (bd)
rm -r $DIS2/bd/*
#copio el contenido del 1 en el 2 (bd)
cp -r $DIS1/bd/* $DIS2/bd/
#vacio el destino del disco 2 (reg)
rm -r $DIS2/reg/*
#copio el contenido del 1 en el 2 (reg)
cp -r $DIS1/reg/* $DIS2/reg/
#vacio el destino del disco 2 (textos)
rm -r $DIS2/textos/*
#copio el contenido del 1 en el 2 (textos)
cp -r $DIS1/textos/* /$DIS2/textos/
#ahora vamos con el 3 dejando descansar al 1 ...
#vacio el destino del disco 3 (bd)
rm -r $DIS3/bd/*
#copio el contenido del 2 en el 3 (bd)
cp -r $DIS2/bd/* $DIS3/bd/
#vacio el destino del disco 3 (reg)
rm -r $DIS3/reg/*
#copio el contenido del 2 en el 3 (reg)
cp -r $DIS2/reg/* $DIS3/reg/
#vacio el destino del disco 3 (textos)
rm -r $DIS3/textos/*
#copio el contenido del 2 en el 3 (textos)
cp -r $DIS2/textos/* $DIS3/textos/
#genero el texto a enviar
/tmp/clone.txt
echo "Se han copiado
correctamente los datos del disco uno al 2 y el
3">> /tmp/clone.txt
echo "Copia en los 3 discos finalizada.">> /tmp/clone.txt
echo "">> /tmp/clone.txt
#vamos a enviar el correo
mail -s "Copia en los 3 discos finalizada" $EDST </tmp/clone.txt
*COPIA EN CINTA*
hay otro script que es "backup" que está en /root/bin que contiene:
#!/bin/bash
DIR=/home/******
mt -f /dev/st0 rewind
tar cvf /dev/st0 "$DIR/bd" "$DIR/progress91b" "$DIR/reg"
"$DIR/telematica" "$DIR/textos"
mt -f /dev/0 rewoffl
~# crontab –e
############## BACKUP ################
############ copia a cinta a las 9 de la noche de lunes a sabado
00 21 * * 1-6 /root/bin/backup
*PROCESO DE RESTAURACION DE COPIA DE SEGURIDAD*
Cuando el sistema de copia manda un correo al responsable de la misma
le dice que si desea recuperar algun archivo que llame al 902 de ER,
esto lo he hecho para que nadie meta la pata.
CINTA:
cpio -ivmud -I /dev/nst0 (lo que queramos recuperar) (donde lo
queremos recuperar) -C 10240
*DISCO EXTERNO:*
Para recuperar datos nos vamos a la consola y entramos en el disco
En primer lugar juntamos "los trozos" donde nos de la gana, en este
ejemplo los junto en /tmp/prueba y al archivo resultante le doy el
nombre de bd.tar
cat /mnt/disco1/bd/bd-dat.tara* >> /tmp/prueba/bd.tar
OJO!: si os fijais la extensión es .tara* , para saber que poner ahí
hay que ver lo que hay dentro del disco
~# ls
~# /tmp/prueba # cd /mnt/disco1/bd/
~# /mnt/disco1/bd # ls
. .. bd-dat.taraa bd-dat.tarab bd-dat.tarac
~# /mnt/disco1/bd #
vemos que lo único que varía de los "trozos" es la última letra así
que usamos el comodín
tara* (esto comprende taraa, tarab, tarac… etc etc) y con >>
/tmp/prueba/bd.tar redirigimos todo a ese archivo.
una vez creado bd.tar...
tar -xf /tmp/prueba/bd.tar -C /tmp/prueba/ <- nos mantiene la
estructura y los permisos
con esto ya hemos recuperado el contenido de la copia de la base de datos…
es un poco engorroso pero dada la diversidad de versiones del s.o. (a
la hora de escribir estas letras hago las pruebas sobre una SuSe 8.1
Proferssional) es la mejor forma.
REFLEXION: con este sistema borramos sobre copia en el destino , para
que no sature el disco externo aunque con 500 gigas …. Después
conseguimos hacer caso omiso a la limitación de 2 gb por archivo
trozeando la copia en "trozos" de 1 gb, para luego juntarlos
¿qué pasa si la base ocupa mas de 2 gigas ? deberíamos de usar un
sistema con filejournaling o un mísero Windows para descomprimirla,
PD: en la prueba de la BD el .tar ocupa 2.40 gb y no ha habido ningún problema!.
Eeepa!
ACTUALIZACION DOCUMENTO:
SCRIPTS USADOS: (permisos 700 para que solo ejecute root) con el
script clone1 NO hace falta parar la base que si no nos ponemos en 12
horas (3 x copia )+ 3 de cinta = 12 horitas…
EN CASO DE DESASTRE:
En el hipotético caso de que falle el disco principal que es el de
origen, el correo nos avisa, nos conectamos montamos el disco 2 en el
sitio del 1 (en remoto) y mandamos otro disco para sustituirlo por el
dos… quedaría la copia haciéndose en 2 discos + cinta hasta llegar el
disco nuevo.
copiaext
clone1
crontab final:
############ copia a cinta a las 9 y 45 de la noche de lunes a sabado
45 21 * * 1-6 /root/bin/backup
############ copia a disco en red maestro (disco1) /mnt/disco1
## a la 1.40 del martes.
40 01 * * 2-6 /root/bin/copiaext
############ exparcimiento de la copia a los otros dos discos
# a las 5.30 am
30 05 * * 2-6 /root/bin/clone1
agradecimientos: a ;-).
----------------------------------
bueno, es un poco cristo pero me funciona a las mil maravillas, espero
que a alguien le sirva de ayuda.
salu2!