Configure la copia de seguridad y recuperación completas y separadas de Zimbra OSE sin usar Zextras

imagen

1. Por dónde empezar


¿Dónde comienza la copia de seguridad? Planificación Al hacer una copia de seguridad de cualquier sistema, debe hacer un plan de copia de seguridad: ¿qué es exactamente, con qué frecuencia, durante cuánto tiempo se almacenará, habrá suficiente espacio libre? De las respuestas a estas preguntas, sigue la respuesta a la pregunta principal: ¿cómo hacer una copia de seguridad?

Si hay mucho espacio libre, puede almacenar toda la máquina virtual. Realice copias de seguridad con el mismo Veeam en un horario, y no piense en las dificultades. Pero en cuanto a mí, es un desperdicio, estoy acostumbrado a hacer todo de la manera más concisa y económica posible. Por supuesto, he implementado Veeam, pero solo hago copias de seguridad de esos sistemas que son imposibles o problemáticos de implementar desde copias de seguridad durante mucho tiempo.

Acerca de los scripts de las herramientas de administración del entorno virtual, simplemente guardaré silencio de manera significativa.

Zimbra tiene una herramienta zmmailbox. Y, al examinar más de cerca su funcionalidad, me di cuenta de que sería más que suficiente para mí. Puede hacer copias de seguridad y restaurar buzones incluso en un sistema en vivo. Y me gustó la capacidad de hacer una copia de seguridad de los buzones críticos por separado de la copia de seguridad de todo el sistema. Por lo tanto, el espacio ocupado por las copias de seguridad estará limitado por el tamaño de los buzones archivados multiplicado por el número de días de "profundidad de copia de seguridad", y no por el volumen de todo el sistema multiplicado por el mismo número de días. Además, es extremadamente difícil recuperarse de una copia de seguridad de todo el sistema, en el caso de Zimbra. Es mucho más fácil copiar una máquina virtual usando Veeam o herramientas de administración del entorno virtual (Hyper-V, ESXI, ingrese lo que necesita) justo después de configurar el sistema, y ​​ponerlo "en el estante" para que en un momento crítico pueda implementar rápidamente una máquina virtual casi sin peso y cargar en ella copias de seguridad de cajas. En mi opinión, este es el escenario menos costoso en todos los aspectos.

2. Los datos de origen:


SO del servidor : CentOS 7

Sobre el sistema operativo
De hecho, la diferencia entre CentOS7 y cualquier otro sistema radicará únicamente en los comandos al servidor para instalar paquetes y, posiblemente, en la ubicación de algunos archivos. El trabajo se lleva a cabo principalmente con cmdlets Zimbra, por lo que las diferencias de configuración serán mínimas.

Dominio Zimbra : zimbramail.home.local
Nombre de usuario y contraseña para acceder a la carpeta compartida : ZimbraBackUp / 123123
La ruta a la carpeta compartida : \\ BackUpServer1 \ ZM \
El camino para montar las bolas en el host Zimbra : / mnt / ZM /

3. Configuración


¡Entonces comencemos!

Escribiremos copias de seguridad en un servidor que ejecute Windows en una carpeta compartida. Si lo desea, puede combinar las copias de seguridad en cualquier lugar, pero todo está configurado para que la mayoría de las copias de seguridad se escriban en BackUpServer1.home.local. Entonces eso:

1) Creamos en el dominio del usuario para acceder a la carpeta compartida en este servidor para que pueda montarse en el servidor Zimbramail.home.local. Nombre de usuario ZimbraBackUp, contraseña, condicionalmente, 123123.

2) En el servidor BackUpServer1, cree el directorio \ ZM \ en el repositorio y compártalo, otorgando derechos de cambio para el usuario ZimbraBackUp. El camino hacia la pelota será: \\ BackUpServer1 \ ZM \

3) Monte la pelota en el servidor Zimbramail.home.local. Para que la carpeta se monte automáticamente, debe corregir el archivo / etc / fstab agregando la línea:

//BackUpServer/ZM /mnt/ZM cifs user,uid=500,rw,suid,username=ZimbraBackUp,password=123123 0 0 

Pero primero debe verificar si el montaje funciona:

 $ mount -t cifs //BackUpServer/ZM /mnt/ZM -o user=ZimbraBackUp,password=123123 

A menudo aparece un error como este:

 mount: wrong fs type, bad option, bad superblock on //BackUpServer1/ZM/, missing codepage or helper program, or other error (for several filesystems (eg nfs, cifs) you might need a /sbin/mount.<type> helper program) In some cases useful info is found in syslog - try dmesg | tail or so. 

Puede solucionarlo instalando cifs-utils:

 $ yum install cifs-utils 

Después de configurar, recomiendo reiniciar el servidor.

4) Crear 3 archivos de script: FullBackUp.sh HandBackUp.sh Restore.sh

El primer archivo se usará para crear automáticamente copias de seguridad programadas, el segundo para la capacidad de hacer copias de seguridad de buzones individuales, o simplemente iniciar manualmente "qué pasaría si". Y el tercer guión es la restauración de uno o todos los cuadros a la vez. Intenté lo más posible comentar sobre el trabajo de los scripts y el registro prescrito.

El contenido del archivo FullBackUp.sh:
 #!/bin/bash #   Path="/mnt/ZM/BackUps" #    ArchPath="/mnt/ZM/Archive" #    MPath="/mnt/ZM/Mounthly" #  Zimbra ZDomain="zimbramail.home.local" #  MBoxes="/mnt/ZM/MBoxesList" #  CDate=$(date +%d-%m-%Y) #   MDay=$(date +%d) #   log="/mnt/ZM/BackUpLog.txt" echo -en "BackUp ALL MailBoxes started in $(date +%T)\n" >> $log #       if [ ! -d $Path ]; then #     echo "    ..." mkdir -p $Path if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "BackUp dirctory was created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "BackUp dirctory was NOT created in $(date +%T)\n" >> $log fi else echo "    ,      ..." fi #       if [ ! -d $Path/$CDate ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo #        echo "       ..." mkdir -p $Path/$CDate if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "BackUp CDate dirctory was created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "BackUp CDate dirctory was NOT created in $(date +%T)\n" >> $log fi else echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo "    ,     ..." fi #     /opt/zimbra/bin/zmprov -l gaa $ZDomain > $MBoxes #    if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Mail Boxes list created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]" echo echo -en "Mail Box list is NOT created! in $(date +%T)\n" >> $log exit fi #       for MailBox in $( cat $MBoxes); do echo "    $MailBox..." /opt/zimbra/bin/zmmailbox -z -m $MailBox getRestUrl "//?fmt=tgz" > $Path/$CDate/$MailBox if [ $? -eq 0 ]; then #        echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Mail Box $MailBox BackUp created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]" echo echo -en "Mail Box $MailBox BackUp is NOT created! in $(date +%T)\n" >> $log fi done #     echo "    ..." echo -n > $MBoxes if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "File $MBoxes clear\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "File $MBoxes can NOT be cleared\n" >> $log fi #      #      if [ ! -d $ArchPath ]; then #    echo "   ..." mkdir -p $ArchPath if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Archive dirctory was created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Archive dirctory was NOT created in $(date +%T)\n" >> $log fi else echo "   , ..." fi tar -czf $ArchPath/$CDate.tar $Path/$CDate if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Archive created in $(date +%T)\n" >> $log #         if [ "$MDay" = 1 ]; then #      if [ ! -d $MPath ]; then #     echo "    ..." mkdir -p $MPath if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Long saving dirctory was created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Long saving dirctory was NOT created in $(date +%T)\n" >> $log fi else #  echo "    ,     ..." fi cp $ArchPath/$CDate.tgz $MPath/$CDate if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Archive is copied in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Archive is NOT copied in $(date +%T)\n" >> $log fi echo "    ( 1 )..." # ,   ,   find $Path -atime +7 | xargs rm -d if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Old BackUps files was deleted\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Old BackUps files is NOT deleted in $(date +%T)\n" >> $log fi #    ( 2 ) echo "     ( 2 )..." find $ArchPath -atime +61 | xargs rm -f if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Old BackUps archives was deleted\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Old BackUps archives is NOT deleted in $(date +%T)\n" >> $log fi fi else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Archive is NOT created in $(date +%T)\n" >> $log fi echo "BackUp job finished in $(date +%T)" #  -     echo -en "BackUp job finished in $(date +%T) $(date +%T)\n" >> $log echo -en "_____________________________________________\n" >> $log 

Contenido del archivo HandBackUp.sh:
 #!/bin/bash #   Path="/mnt/ZM/BackUps" #    ArchPath="/mnt/ZM/Archive" #  Zimbra ZDomain="zimbramail.home.local" #  MBoxes="/mnt/ZM/MBoxesList" #  CDate=$(date +%d-%m-%Y) #   log="/mnt/ZM/BackUpLog.txt" read -p "    (  ),  ALL      : " A if [[ "$A" = "ALL" || "$A" = "all" ]]; then echo -en "BackUp started in $(date +%T)\n" >> $log #     echo "    ..." /opt/zimbra/bin/zmprov -l gaa $ZDomain > $MBoxes if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Mail Boxes list created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]" echo echo -en "Mail Box list is NOT created! in $(date +%T)\n" >> $log exit fi if ! [ -d $Path/$Date ]; then #    mkdir -p $Path/$CDate/ echo -en "BackUp directory created in $(date +%T)\n" >> $log fi #       echo "      " for MailBox in $( cat $MBoxes); do echo "    $MailBox..." /opt/zimbra/bin/zmmailbox -z -m $MailBox getRestUrl "//?fmt=tgz" > $Path/$CDate/$MailBox if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Mail Box $MailBox BackUp created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]" echo echo -en "Mail Box $MailBox BackUp is NOT created! in $(date +%T)\n" >> $log fi done else MailBox="$A@$ZDomain" #    echo "   ..." Result=$(/opt/zimbra/bin/zmprov getMailboxInfo $MailBox) if [ $? -eq 0 ]; then #   echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo "  $MailBox ,  ..." echo -en "Required Mail Box $MailBox exist $(date +%T)\n" >> $log #      if ! [ -d $Path/$Date ]; then #    mkdir -p $Path/$CDate/ echo -en "BackUp directory created in $(date +%T)\n" >> $log fi #    $MailBox /opt/zimbra/bin/zmmailbox -z -m $MailBox getRestUrl "//?fmt=tgz" > $Path/$CDate/$MailBox if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Mail Box $MailBox BackUp created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]" echo echo -en "Mail Box $MailBox BackUp is NOT created! in $(date +%T)\n" >> $log fi else #    -  echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]" echo echo "  $MailBox  .   " echo -en "Required Mail Box $MailBox is not exist\n" >> $log exit fi fi read -p "      $MailBox? [N]: " F if [[ "$F" = "Y" || "$F" = "y" ]]; then #      if [ ! -d $ArchPath ]; then #     echo "   ..." mkdir -p $ArchPath if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Archive dirctory was created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Archive dirctory was NOT created in $(date +%T)\n" >> $log fi else echo "   , ..." fi #    echo "  ..." if [[ "$A" = "ALL" || "$A" = "all" ]]; then tar -czf $ArchPath/$CDate.tar $Path/$CDate if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Archive created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Archive is NOT created in $(date +%T)\n" >> $log fi else tar -czf $ArchPath/$MailBox.tar $Path/$CDate/$MailBox if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en "Archive created in $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Archive is NOT created in $(date +%T)\n" >> $log fi fi else echo "   " echo -en "User decline archive creating\n" >> $log fi #     echo "    ..." echo -n > $MBoxes if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo fi echo "BackUp job finished in $(date +%T) $(date +%T)" #  -     echo -en "BackUp job finished in $(date +%T) $(date +%T)\n" >> $log echo -en "_____________________________________________\n" >> $log 

El contenido del archivo Restore.sh:
 #!/bin/bash #   Path="/mnt/ZM/BackUps" #  Zimbra ZDomain="zimbramail.home.local" #  MBoxes="/mnt/ZM/MBoxesList" #   log="/mnt/ZM/RestoreLog.txt" read -p "  ,      02-09-2001: " Date if ! [ -d $Path/$Date ]; then echo "     ." echo -en "No BackUp file at $Date $(date +%T)\n" > $log exit fi read -p "    (  ),  ALL        : " A if [[ "$A" = "ALL" || "$A" = "all" ]]; then echo -en "Restore started in $(date +%T)\n" >> $log #     ls "$Path/$Date" > $MBoxes for MailBox in $( cat $MBoxes); do #   echo "   $MailBox" Result=$(/opt/zimbra/bin/zmprov getMailboxInfo $MailBox) if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6) [OK]" echo echo -en "Start restore job for $MailBox $(date +%T)\n" >> $log echo " $MailBox . ..." else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Mail Box $MailBox does not exist, creating Mail Box $MailBox $(date +%T)\n" >> $log echo " $MailBox  .   $MailBox..." #   Result=$(/opt/zimbra/bin/zmprov ca $MailBox 12345678 displayName "$MailBox") if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6) [OK]" echo echo -en "Mail Box $MailBox is created, starting restore $(date +%T)\n" >> $log echo " $MailBox  . ..." else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Can NOT create Mail Box $MailBox ! $(date +%T)\n" >> $log echo " $MailBox   ." fi fi #  Result=$(/opt/zimbra/bin/zmmailbox -z -m $MailBox postRestURL "//?fmt=tgz&resolve=replace" $Path/$Date/$MailBox) if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en " $MailBox   $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]" echo echo -en " $MailBox  ! $(date +%T)\n" >> $log fi done else #     MailBox="$A@$ZDomain" if [ -a $Path/$Date/$MailBox ]; then #   echo "   $MailBox..." Result=$(/opt/zimbra/bin/zmprov getMailboxInfo $MailBox) if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6) [OK]" echo echo -en "Start restore job for $MailBox $(date +%T)\n" >> $log echo " $MailBox . ..." else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Mail Box $MailBox does not exist $(date +%T)\n" >> $log echo " $MailBox  ." read -p "            ? [N]: " B if [[ "$B" = "Y" || "$B" = "y" ]]; then echo "   $MailBox..." Result=$(/opt/zimbra/bin/zmprov ca $MailBox 12345678 displayName "$MailBox") #   if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6) [OK]" echo echo -en "Mail Box $MailBox is created, starting restore $(date +%T)\n" >> $log echo " $MailBox  . ..." else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo echo -en "Can NOT create Mail Box $MailBox ! $(date +%T)\n" >> $log echo " $MailBox   .   ..." exit fi else #   ,  .  echo "   .   " exit fi fi #  Result=$(/opt/zimbra/bin/zmmailbox -z -m $MailBox postRestURL "//?fmt=tgz&resolve=replace" $Path/$Date/$MailBox) if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo echo -en " $MailBox   $(date +%T)\n" >> $log else echo -n "$(tput hpa $(tput cols))$(tput cub 6)[FAIL]" echo echo -en " $MailBox  ! $(date +%T)\n" >> $log fi else #     echo "    .   " echo -en "Required BackUp file is not exist\n" >> $log exit fi fi #     echo "    ..." echo -n > $MBoxes if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo else echo -n "$(tput hpa $(tput cols))$(tput cub 6) [FAIL]" echo fi echo "BackUp job finished in $(date +%T) $(date +%T)" #  -     echo -en "Restore job complete in $(date +%T)\n" >> $log echo -en "____________________________________\n" >> $log 

Hay una sutileza. Si crea y edita archivos de script para bash en Windows, cuando intente ejecutar el script, aparecerá un error: / bin / sh ^ M: mal intérprete: No existe tal archivo o directorio , que es el que los editores que se ejecutan en Windows agregan a El final de la línea es el carácter de retorno de carro "CR \ LF", que los editores en Linux no muestran. Pero este símbolo está ahí y no ha desaparecido. Para deshacernos del error y eliminar los caracteres adicionales, hacemos lo siguiente:

 $ cat your-script.sh | tr -d '\r' > corrected-your-script.sh 

Bueno, o puede usar la utilidad dos2unix, pero aún necesita instalarla:

 $ yum install dos2unix $ dos2unix your-script.sh 

5) Hacemos que los scripts sean ejecutables:

 $ chmod 0740 /opt/zimbra/BkUpRestScripts/FullBackUp.sh $ chmod 0740 /opt/zimbra/BkUpRestScripts/HandBackUp.sh $ chmod 0740 /opt/zimbra/BkUpRestScripts/Restore.sh 

6) Le recomiendo que ejecute scripts con sus manos y verifique si funcionan y cómo funcionan.

7) Cree una tarea en CRON para la copia de seguridad diaria de los buzones:

 10 0 * * * root /opt/zimbra/ BkUpRestScripts/FullBackUp.sh 

8) Disfruta

4. Scripting


En caso de que los comentarios en los propios guiones no sirvieran de nada.

1) Script FullBaclUp.sh:
Al principio, se determinan las variables, cuál es responsable de qué, todo se comenta.

La siguiente es una comprobación de la ausencia de un directorio para la copia de seguridad; si no existe, se crea. Se llega a la conclusión del archivo de registro y de la pantalla (si se inicia manualmente) sobre el éxito o el fracaso de la creación de un directorio.

Verifique si falta el catálogo con la fecha de hoy. Si no está allí, se crea, también se genera la salida a la pantalla y el registro del resultado de la creación del directorio.

Escribir en un archivo todos los buzones existentes de Zimbra. Es necesario para la reserva secuencial de cada caja. Muestra el resultado del comando.

Crear una copia de seguridad para cada buzón de la lista recibida. Con la salida de la ejecución a la pantalla y al archivo de registro.

Borrar un archivo con una lista de cuadros. Dado que los 3 scripts funcionan con este archivo, es recomendable limpiarlo después de cada ejecución para que no haya sorpresas. Puede limpiarlo antes del inicio del guión, pero de alguna manera me resulta más familiar no almacenar datos innecesarios después de que se realiza el trabajo, pero hacer lo mismo antes y después de que el guión funcione es un leve grado de esquizofrenia.

El siguiente es un bloque para crear un archivo comprimido.

Comprobar la ausencia del directorio de almacenamiento de archivos, crearlo en ausencia y mostrar el resultado de la creación en la pantalla y en el registro.

Archivado

Marque "¿no es el primer día de hoy?" Prefiero almacenar copias de seguridad para el primer día de todos los meses durante mucho tiempo, esto es suficiente para que yo trabaje. Se puede almacenar durante semanas, pero a menudo esto es redundante. Pero la condición para almacenar copias de seguridad durante todo el período de funcionamiento del servidor de correo se establece en la parte superior, por lo que estarán allí para siempre. Si el número es el primero, el archivo resultante se copia en un directorio separado "Mounthly". Y para copiarlo allí, debe verificar si existe dicho directorio y, de no ser así, crearlo, lo que se debe informar a la pantalla y al archivo de registro.

A continuación, se limpia el almacenamiento: se eliminan todas las copias de seguridad de más de 2 semanas, así como los archivos de más de 61 días. El resultado de la eliminación se muestra en la pantalla y en el archivo de registro.

Después de lo cual el script escribe el tiempo de finalización en el archivo de registro y en la pantalla, y finaliza su trabajo.

2) Script HandBackUp.sh:
Al principio, las variables también se definen, también se comentan por qué son necesarias.

A continuación, se le solicita al usuario que ingrese el nombre del buzón a respaldar, sin especificar el dominio Zimbra. (está escrito en la invitación para ingresar), o seleccione una copia de seguridad de todos los buzones escribiendo TODOS o todos.

Si elige hacer una copia de seguridad de todos los buzones, el script funciona casi de la misma manera que el primero mencionado anteriormente, excepto que después de crear copias de seguridad de cada buzón, preguntará: ¿necesito archivarlos?

Si se escribió un buzón específico, entonces se verifica su existencia en Zimbra. Si existe un cuadro con el nombre especificado, se inicia el proceso de copia de seguridad de este cuadro, con la información correspondiente que se muestra en la pantalla y en el archivo de registro. Si el cuadro especificado no existe, se informará al usuario sobre esto y el script completará su trabajo.

Una vez completada la copia de seguridad del cuadro, se le solicitará que archive la copia. Si el usuario está de acuerdo, se verifica la ausencia de un directorio para almacenar el archivo y más abajo en la lista, como en el primer script.

Después de completar el archivado, se borra el archivo con la lista de buzones. Por si acaso.

Al final, la información sobre el tiempo de finalización del script se muestra en la pantalla y en el archivo de registro.

3) Script Restore.sh:
Como en los archivos anteriores, primero: la definición de variables con comentarios.

Se le solicita al usuario que seleccione la fecha de la copia de seguridad que se va a restaurar. Si la fecha especificada no está en las copias de seguridad, la secuencia de comandos finaliza al informar esto.

Si existen copias de seguridad para la fecha especificada, solicite al usuario que ingrese el nombre del cuadro que debe restaurarse. Para restaurar todos los cuadros, necesita escribir TODOS o todos.

Si se selecciona la opción TODO, el script crea una lista de archivos en la carpeta de respaldo en el archivo, notifica sobre el resultado de la creación.

Lo siguiente es una recuperación paso a paso de cada cuadro. Primero, verifique la existencia de una casilla en el sistema; si no, se crea y luego se restaura. La información sobre cada operación se muestra en el archivo de registro y en la pantalla.

Si se selecciona un cuadro específico, es casi lo mismo. Verifique la existencia de un archivo con el nombre solicitado. Salida a la pantalla y el archivo de registro de resultados.

Comprobando la existencia de una casilla en el sistema. Salida a la pantalla y el archivo de registro de resultados.
La invitación al usuario a aceptar la creación de la caja en ausencia de tal en el sistema. Salida a la pantalla y el archivo de registro de resultados.

Cree un cuadro si está de acuerdo. Salida a la pantalla y el archivo de registro de resultados.
Recuperación de buzones. Salida a la pantalla y el archivo de registro de resultados.

Borrar un archivo con una lista de cuadros de recuperación.

Al final, la información sobre el tiempo de finalización del script se muestra en la pantalla y en el archivo de registro.

5. En cuanto a la recuperación


Si modifica levemente estos scripts, entonces son bastante adecuados para mover el correo de un servidor a otro, simplemente creando buzones con todo el contenido en un lugar nuevo. También puede restaurar el sistema desde cero, cuando por alguna razón es más fácil volver a subir el servidor Zimbra que intentar revivir el antiguo. Como se describió anteriormente, puede guardar la imagen de la máquina virtual configurada expandiéndola si es necesario y llenándola con todos los datos. El mismo algoritmo para pasar de un servidor Zimbra a otro. Y no se necesitan utilidades pagas como Zextras.

6. Conclusión


En general, no hay nada complicado en los guiones que escribí. Sí, hay muchas condiciones en ellos, porque traté de predecir tantos problemas y errores como sea posible en su trabajo, pero también traté de comentar el guión lo más claramente posible. Lo más probable es que no funcionen para todos. Quizás alguien no tenga este método de respaldo en absoluto. Pero espero que muchos lo encuentren útil.

7. PD:


Este es el segundo artículo de la serie "Cómo implementé Zimbra". El primero trata sobre la implementación, la autorización LDAP y la creación automática de buzones para usuarios de AD, aquí mismo .
El tercer artículo sobre la generación y actualización automáticas de listas de correo basadas en AD en Zimbra OSE está aquí .

Y también quiero señalar que esta es mi primera experiencia de secuencias de comandos en una fiesta, debido a esto, las secuencias de comandos resultaron ser muy voluminosas y "especialmente inteligentes", como dicen.

Source: https://habr.com/ru/post/439728/


All Articles