Bienvenido(a) a Alcance Libre 29/11/2022, 19:15

Alcance Libre Foros

 Índice del foro > Todo acerca de Linux > Programas y Aplicaciones New Topic Post Reply
 Script de backup mejorarlo
Tópico anterior Tópico siguiente
   
javsolis3
 09/10/12 09:49AM (Leído 11,969 veces)  

Nuevo

Estado: desconectado
Forum User

Identificado: 08/30/12
Mensajes: 7
bueno antes que todo quiro darle las gracias a tdos los miembros de este foro soy un usuario linux más y en mi agradecimiento me gustaria aportar este script para hacer backup de una forma sencilla ahora para que el script tenga mejor forma me gustaria hacerle algunas mejoras les explico:

BASH Formatted Code
#!/bin/bash
echo "Empesar el Backup"

            BUS='/home/javier/javier/javier/Cursos/*'
            COL='/tmp/Backups/'
            FECH=xxx_$(date +%d%b%y).tgz
            tar -czvf $COL$FECH $BUS
echo "Terminado el Backup con exito"
 


este script lo guarde en el /bin para llamarlo desde cualquier parte ahora amigos hay algo y me gustaria mejorarlo cuando en guarda o hace el backup guardar todas las carpetas por ejemplo '/home/javier/javier/javier/Cursos/*' y yo solamente quiero que guarde la ultima ejemplo cursos. Por otro lado corro el script y me envia el siguiente mensaje tar: Eliminando la `/' inicial de los nombres bueno pero hace el backup me gustaria ver la forma de quitarlo por mi parte sigo googleando.
 
Profile Email
 Quote
Will Lpz Jimnz
 12/29/12 01:47AM  

Admin

Estado: desconectado
Site Admin

Identificado: 02/19/07
Mensajes: 181
Localización:Mexico
Quote by: javsolis3


este script lo guarde en el /bin para llamarlo desde cualquier parte ahora amigos hay algo y me gustaria mejorarlo cuando en guarda o hace el backup guardar todas las carpetas por ejemplo '/home/javier/javier/javier/Cursos/*' y yo solamente quiero que guarde la ultima ejemplo cursos.



Prueba con ...

BASH Formatted Code
#!/bin/bash
echo "Empesar el Backup"

            BUS='/home/javier/javier/javier'
            COL='/tmp/Backups'
            FECH=xxx_$(date +%d%b%y).tgz
            cd $BUS
            tar -czvf $COL/$FECH Cursos
echo "Terminado el Backup con exito"
 


Saludos !! .. Mr. Green

.:: Cuando el Alumno esta listo, el maestro aparece ::. [[http://koalasoft.wordpress.com ::BLog::]]
 
Profile Email Website
 Quote
John J. Toro A.
 01/02/13 12:37AM  

Moderador

Estado: desconectado
Forum User

Identificado: 02/19/07
Mensajes: 119
Localización:Medellín - Colombia
Cordial saludo,

Aunque el requerimiento del post puede ser simple, quiero dar un ejemplo que puede ser practico para una red local.

Tener un backup dentro de la misma maquina es un riesgo alto, igualmente el contar con solo una única opción de recuperación.

Qué pasa si falla el disco?
Que pasa si necesito recuperar un archivo dañado que ya fue respaldado ?
Que pasa si hay un incendio/terremoto/robo/etc. que afecte los equipos de tu red ?

Con esto se aclara que existen múltiples posibilidades de contingencias antes las cuales deberíamos estar preparados y contar con una forma de recuperación.

Por esto se debe establecer una política de copias de seguridad que nos de la posibilidad de recuperar copias de diferentes periodos de tiempo, que sean externas a la maquina y contar con lo menos con una copia almacenada en una ubicación diferente... por decir lo menos.

Aclarando que existen herramientas que facilitan esta tarea, así como hardware especializado para esto, puedo decir que también podemos valernos de los recursos disponibles para lograrlo.

Actualmente las estaciones de la red cuentan con buenas capacidades de disco, que nos pueden servir para almacenar múltiples copias de seguridad. Discos externos USB son un buena opción para tener copias externas.

En este ejemplo se seleccionaron 6 estaciones de la red para hacer un respaldo diario (lunes a Sábado) y una maquina remota accesible desde Internet, a las cuales se tiene acceso desde el servidor mediante ssh (ademas de otras copias). El respaldo se realza automáticamente mediante un script ejecutado mediante cron.

/etc/crontab:
PHP Formatted Code
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
# !!!! Lineas Adicionadas por NewRoute
# M H D M DS
# Todos los Dias cada seis horas a los 30 minutos
30 */6 * * * root /root/cron/backup-mail.sh > /var/www/intranet/sistemas/log/back_sm.html 2>&1
# De Lunes a Viernes de 8 AM a 5 PM cada hora
0 8-17 * * 1-5 root /root/cron/backup.sh > /var/www/intranet/sistemas/log/back_sd.html 2>&1
# Sabados de 8 AM a 12 M cada hora
0 8-12 * * 6 root /root/cron/backup.sh > /var/www/intranet/sistemas/log/back_sd.html 2>&1
# Todos los Lunes a las 6 PM
0 18 * * 1 root /root/cron/dbackup.sh 1 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los Martes a las 6 PM
0 18 * * 2 root /root/cron/dbackup.sh 2 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los Miercoles a las 6 PM
0 18 * * 3 root /root/cron/dbackup.sh 3 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los Jueves a las 6 PM
0 18 * * 4 root /root/cron/dbackup.sh 4 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los Viernes a las 6 PM
0 18 * * 5 root /root/cron/dbackup.sh 5 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los Sabado a las 12 M
0 12 * * 6 root /root/cron/dbackup.sh 6 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los dias (Lunes-Sabado) a las 9:45 AM
45 9 * * 1-6 root /root/cron/dbackup.sh E > /var/www/intranet/sistemas/log/back_e.html 2>&1
# Todos los 1 de cada Mes a las 8:15 AM
15 8 1 * * root /root/cron/dbackup.sh M > /var/www/intranet/sistemas/log/back_m.html 2>&1
# !!!! Fin Lineas Adicionadas por NewRoute

La salida de los scripts son almacenados en archivos HTML, que son accesibles desde una intanet.

/root/cron/dbackup.sh
PHP Formatted Code
#!/bin/sh
SPRM=\-e" "
SKEY='ssh -i /root/cron/servidor-rsync-key'
BUSR="root@"
BPTH="/share/backup"
BSPC=' '
BEXC=' '
case $1 in
1)
BDSC="Lunes";
BCMP="estacion-1:"
;;
2)
BDSC="Martes";
BCMP="estacion-2:";
# BEXC="--exclude .recycle "
;;
3)
BDSC="Miercoles";
BCMP="estacion-3:"
;;
4)
BDSC="Jueves";
BCMP="estacion-4:"
BEXC="--exclude .recycle "
;;
5)
BDSC="Viernes"
BCMP="estacion-5:"
;;
6)
BDSC="Sabado";
BCMP="estacion-6:"
;;
E)
BDSC="Externo";
BCMP="estacion-7:"
BEXC="--exclude .recycle "
;;
M)
BDSC="Mensual";
BCMP="estacion-8:"
;;
O)
SPRM='';
SKEY='';
BUSR='';
BPTH='/backup';
BDSC='Removible';
BCMP='/media/O'
BEXC="--exclude .recycle "
;;
P)
SPRM=''
SKEY=''
BUSR=''
BPTH="/backup"
BDSC="Removible";
BCMP="/media/P";
BEXC="--exclude .recycle "
;;
*)
exit
;;
esac
echo \<table\>
echo \<caption\>Backup: $BDSC - En: $BCMP\</caption\>
echo \<tr\>\<th\>Inicio:\</th\>\<td\>`date`\</td\>\</tr\>
echo \<tr\>\<th\>Mensajes:\</th\>\<td\>\<pre\>
echo \<b\>Informacion Corporativa\</b\>
echo - Empresa
rsync -az --delete --force --exclude '.~lock.*' $BEXC $SPRM"$SKEY"$BSPC/share/empresa $BUSR$BCMP$BPTH/
echo - Otra
rsync -az --delete --force --exclude '.~lock.*' $BEXC $SPRM"$SKEY"$BSPC/share/otro $BCMP$BPTH/
echo \<b\>"Base de Datos (MySQL)"\</b\>
echo - Local
rsync -az --delete $SPRM"$SKEY"$BSPC/var/lib/mysql $BCMP$BPTH/
echo \<b\>Sitios Web\</b\>
# rsync -az $SPRM"$SKEY"$BSPC/etc/php.ini $BCMP/etc/
rsync -az --delete $SPRM"$SKEY"$BSPC/var/www $BCMP$BPTH/
echo \<b\>Unidad de red\</b\>
rsync -az --delete $SPRM"$SKEY"$BSPC/share/g $BCMP$BPTH/
echo \</pre\>\</td\>\</tr\>
echo \<tr\>\<th\>Termino:\</th\>\<td\>`date`\</td\>\</tr\>
echo \</table\>
echo \<br /\>

Este script también puede ser ejecutado manualmente para las copias en unidades removibles (parametros O,P)

La copia es exacta (Se copian solo los archivos que hayan cambiado y se borran los eliminados)... la información es comprimida para la transmisión en la red, pero no es almacenda comprimida (man rsync)

La configuración de la conexión mediante ssh, SAMBA, SAMBA con papelera de reciclaje, ACL's, etc. pueden ser consultadas en los manuales locales.

Espero que sea de utilidad.

JohnToro
 
Profile Email
 Quote
Anónimo: : ajdm
 09/17/13 11:00AM  
Quote by: John J. Toro A.

Cordial saludo,

Aunque el requerimiento del post puede ser simple, quiero dar un ejemplo que puede ser practico para una red local.

Tener un backup dentro de la misma maquina es un riesgo alto, igualmente el contar con solo una única opción de recuperación.

Qué pasa si falla el disco?
Que pasa si necesito recuperar un archivo dañado que ya fue respaldado ?
Que pasa si hay un incendio/terremoto/robo/etc. que afecte los equipos de tu red ?

Con esto se aclara que existen múltiples posibilidades de contingencias antes las cuales deberíamos estar preparados y contar con una forma de recuperación.

Por esto se debe establecer una política de copias de seguridad que nos de la posibilidad de recuperar copias de diferentes periodos de tiempo, que sean externas a la maquina y contar con lo menos con una copia almacenada en una ubicación diferente... por decir lo menos.

Aclarando que existen herramientas que facilitan esta tarea, así como hardware especializado para esto, puedo decir que también podemos valernos de los recursos disponibles para lograrlo.

Actualmente las estaciones de la red cuentan con buenas capacidades de disco, que nos pueden servir para almacenar múltiples copias de seguridad. Discos externos USB son un buena opción para tener copias externas.

En este ejemplo se seleccionaron 6 estaciones de la red para hacer un respaldo diario (lunes a Sábado) y una maquina remota accesible desde Internet, a las cuales se tiene acceso desde el servidor mediante ssh (ademas de otras copias). El respaldo se realza automáticamente mediante un script ejecutado mediante cron.

/etc/crontab:

PHP Formatted Code
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
# !!!! Lineas Adicionadas por NewRoute
# M H D M DS
# Todos los Dias cada seis horas a los 30 minutos
30 */6 * * * root /root/cron/backup-mail.sh > /var/www/intranet/sistemas/log/back_sm.html 2>&1
# De Lunes a Viernes de 8 AM a 5 PM cada hora
0 8-17 * * 1-5 root /root/cron/backup.sh > /var/www/intranet/sistemas/log/back_sd.html 2>&1
# Sabados de 8 AM a 12 M cada hora
0 8-12 * * 6 root /root/cron/backup.sh > /var/www/intranet/sistemas/log/back_sd.html 2>&1
# Todos los Lunes a las 6 PM
0 18 * * 1 root /root/cron/dbackup.sh 1 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los Martes a las 6 PM
0 18 * * 2 root /root/cron/dbackup.sh 2 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los Miercoles a las 6 PM
0 18 * * 3 root /root/cron/dbackup.sh 3 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los Jueves a las 6 PM
0 18 * * 4 root /root/cron/dbackup.sh 4 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los Viernes a las 6 PM
0 18 * * 5 root /root/cron/dbackup.sh 5 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los Sabado a las 12 M
0 12 * * 6 root /root/cron/dbackup.sh 6 >> /var/www/intranet/sistemas/log/back_d.html 2>&1
# Todos los dias (Lunes-Sabado) a las 9:45 AM
45 9 * * 1-6 root /root/cron/dbackup.sh E > /var/www/intranet/sistemas/log/back_e.html 2>&1
# Todos los 1 de cada Mes a las 8:15 AM
15 8 1 * * root /root/cron/dbackup.sh M > /var/www/intranet/sistemas/log/back_m.html 2>&1
# !!!! Fin Lineas Adicionadas por NewRoute

La salida de los scripts son almacenados en archivos HTML, que son accesibles desde una intanet.

/root/cron/dbackup.sh
PHP Formatted Code
#!/bin/sh
SPRM=-e" "
SKEY='ssh -i /root/cron/servidor-rsync-key'
BUSR="root@"
BPTH="/share/backup"
BSPC=' '
BEXC=' '
case $1 in
1)
BDSC="Lunes";
BCMP="estacion-1:"
;;
2)
BDSC="Martes";
BCMP="estacion-2:";
# BEXC="--exclude .recycle "
;;
3)
BDSC="Miercoles";
BCMP="estacion-3:"
;;
4)
BDSC="Jueves";
BCMP="estacion-4:"
BEXC="--exclude .recycle "
;;
5)
BDSC="Viernes"
BCMP="estacion-5:"
;;
6)
BDSC="Sabado";
BCMP="estacion-6:"
;;
E)
BDSC="Externo";
BCMP="estacion-7:"
BEXC="--exclude .recycle "
;;
M)
BDSC="Mensual";
BCMP="estacion-8:"
;;
O)
SPRM='';
SKEY='';
BUSR='';
BPTH='/backup';
BDSC='Removible';
BCMP='/media/O'
BEXC="--exclude .recycle "
;;
P)
SPRM=''
SKEY=''
BUSR=''
BPTH="/backup"
BDSC="Removible";
BCMP="/media/P";
BEXC="--exclude .recycle "
;;
*)
exit
;;
esac
echo <table>
echo <caption>Backup: $BDSC - En: $BCMP</caption>
echo <tr><th>Inicio:</th><td>`date`</td></tr>
echo <tr><th>Mensajes:</th><td><pre>
echo <b>Informacion Corporativa</b>
echo - Empresa
rsync -az --delete --force --exclude '.~lock.*' $BEXC $SPRM"$SKEY"$BSPC/share/empresa $BUSR$BCMP$BPTH/
echo - Otra
rsync -az --delete --force --exclude '.~lock.*' $BEXC $SPRM"$SKEY"$BSPC/share/otro $BCMP$BPTH/
echo <b>"Base de Datos (MySQL)"</b>
echo - Local
rsync -az --delete $SPRM"$SKEY"$BSPC/var/lib/mysql $BCMP$BPTH/
echo <b>Sitios Web</b>
# rsync -az $SPRM"$SKEY"$BSPC/etc/php.ini $BCMP/etc/
rsync -az --delete $SPRM"$SKEY"$BSPC/var/www $BCMP$BPTH/
echo <b>Unidad de red</b>
rsync -az --delete $SPRM"$SKEY"$BSPC/share/g $BCMP$BPTH/
echo </pre></td></tr>
echo <tr><th>Termino:</th><td>`date`</td></tr>
echo </table>
echo <br />

Este script también puede ser ejecutado manualmente para las copias en unidades removibles (parametros O,P)

La copia es exacta (Se copian solo los archivos que hayan cambiado y se borran los eliminados)... la información es comprimida para la transmisión en la red, pero no es almacenda comprimida (man rsync)

La configuración de la conexión mediante ssh, SAMBA, SAMBA con papelera de reciclaje, ACL's, etc. pueden ser consultadas en los manuales locales.

Espero que sea de utilidad.



Te felicito amigo, muy practica e interesante tu exposición.

Quisiera saber si es posible hacer algo parecido pero en vez de utilizar rsync, usar tar.

A ver te explico, yo soy administrador de infraestructura y en este momento hago respaldos diariamente tanto del portal como de la base de datos.

Entonces para una hora especifica hago base de datos pero para el portal hago respaldo una vez a la semana.

Ahora bien me gustaría saber (si es posible) si puedes ayudarme a contruir un SH que ejecute el respaldo y luego haga un sftp hacia el servidor remoto donde debo colocar los archivos TAR que se generen.

Puedo contar contigo?

Desde ya mil gracias...
 
 Quote
Contenido generado en: 0.22 segundos New Topic Post Reply
 Todas las horas son CST. Hora actual 07:15 PM.
Tópico normal Tópico normal
Tópico Pegado Tópico Pegado
Tópico bloqueado Tópico bloqueado
Mensaje Nuevo Mensaje Nuevo
Tópico pegado con nuevo mensaje Tópico pegado con nuevo mensaje
Tópico bloqueado con nuevo mensaje Tópico bloqueado con nuevo mensaje
Ver mensajes anónimos 
Los usuarios anónimos pueden enviar 
Se permite HTML Filtrado 
Contenido censurado