Solución a problemas en Zimbra

No envía correos

Si el servidor no envía correo y al mirar el fichero /opt/zimbra/log/zmmailboxd.out aparece un mensaje de error 2018-07-04 12:58:16.566:WARN:oejs.HttpChannel:qtp509886383-24433: Could not send response error 500: java.io.IOException: Connection reset by peer

Solución

Se supone que deberíamos aumentar la memoria heap pasamos de mailboxd_java_heap_size = 1920 a 4096

zmlocalconfig -e mailboxd_java_heap_size=4096

Error unexpected blob

Cada elemento de zimbra se compone de dos partes: la “información”, que es el contenido real, y el “metadato” formado por un conjunto de informaciones adicionales inherentes al propio elemento. Un BLOB es un archivo que contiene la “información” de un elemento, almacenado en el volumen de mensajes.

Si al hacer un chequeo de los blob

/opt/zimbra/bin/zmblobchk start
nos aparecen mensajes del tipo
Mailbox 150, volume 1, /opt/zimbra/store/0/150/msg/0/361-1901.msg: unexpected blob.  File size is 13425.

Muchos de los problemas se solucionaran ejecutando como root el siguiente comando para fijar problemas con los permisos de los ficheros.

/opt/zimbra/libexec/zmfixperms --verbose --extended

Si aún después de ejecutar zmfixperms, persisten los errores con los blob,podemos ejecutar :

zmblobchk --missing-blob-delete-item --export-dir /temp/blob start 
para exportar y eliminar los blob perdidos.

En el caso de que aún tengamos errores del tipo unexpected blob, podemos ejecutar el siguiente script para mover los mensaje con problemas a una carpeta para poder revisarlos. (https://forums.zimbra.org/viewtopic.php?t=13512)

#!/bin/bash

#Fichero con un listado de los buzones con problemas
blobfile="/opt/tmp/unexp-blobs.lst"

#path donde recreamos la estructura de los ficheros que vamos a mover
savedir="/opt/tmp/unexpected-blobs"

#path donde tenemos los buzones
storepath="/opt/zimbra/store/0/"

#Si no existe creamos el directorio donde vamos a recrear la estructura
if [ ! -d "$savedir" ]; then
    mkdir -p $savedir
    fi
    
    #Si ya existe un fichero de listado blobfile lo eliminamos 
       if [ -f $blobfile ]; then
        rm -f $blobfile
        fi
          zmblobchk --unexpected-blob-list $blobfile  start;
          for i in $(cat $blobfile); do
             tmpvar1="";mbxdir="";filename="";
              tmpvar1="$(dirname $i)"
              mbxdir=${tmpvar1#$storepath}

               #filename=$(basename $i)
                echo $savedir/$mbxdir/$filename
                
                #Creamos la estructura si no existe
                    if [ ! -d "$savedir/$mbxdir" ]; then
                        mkdir -p $savedir/$mbxdir
                             fi
                             
                             #Movemos los mensajes con problemas 
                              mv -v $i $savedir/$mbxdir/;
                             done

Seguidamente revisamos la integridad de la base de datos

/opt/zimbra/libexec/zmdbintegrityreport -v

Servidor lento

Error mta no arranca

Por si es un problema de permisos ejecutar como root

/opt/zimbra/libexec/zmfixperms
Si queremos que además revise los directorios /opt/zimbra/store y /opt/zimbra/index le tenemos que añadir la opción -extended
/opt/zimbra/libexec/zmfixperms -extended

ojo que dependiento de nuestra configuración puede llegar a tardar bastante

También podemos hacer:

chown -R zimbra:zimbra /opt/zimbra

Si el error se mantiene revisar si hay algún proceso que está usando el puerto 25

netstat -tulpn 

Una vez que sabemos el PID del proceso lo matamos con

kill -p <PID>
y ejecutamos
zmcontrol start 

Problemas con la Base de Datos

Si al ejecutar

/opt/zimbra/libexec/zmdbintegrityreport -v
vemos que tenemos problemas con los indices de algunos buzones la solución sería ejecutar zmdbintegrityreport con la opción de reparación
/opt/zimbra/libexec/zmdbintegrityreport -r
.

Si no se soluciona tendremos que realizar la solución a mano. Para ello tomamos nota de los buzones con problemas que nos indica el comando zmdbintegrityreport y realizamos los siguientes pasos desde la consola:

  1. Una vez validados pasamos al usuario zimbra
    su - zimbra 
  2. Nos conectamos con la BDD
    mysql -u zimbra
  3. Accedemos al buzón con problemas . En mi caso
    use mboxgroup47;
  4. Comprobamos la tabla mail_item
    check table mail_item;
  5. Comprobamos los indexes
    show indexes;
  6. Si es sólo un indice el que da error . Lo mejor es borrar el indice y volver a crearlo → https://wiki.zimbra.com/wiki/How_to_recreate_corrupted_index_(mysql)
  7. Si son varios como era mi caso ejecuto
    optimize table mail_item;
  8. El comando anterior borra los indices corruptos y el siguiente paso sería volver a reindexar el buzon para que los vuelva a crear
    zmprov rim usuario@dominiocorreo start

Referencias