1. Introducción
Si al operar un buzón con Dovecot se obtienen errores al acceder a cierto fichero como el siguiente:
dovecot: imap(direccion@domain.com): Error: Maildir filename has wrong S value, renamed the file from
También se manifiesta con los siguientes errores:
Jul 10 17:47:35 mailserver dovecot: imap(info@domain.com): Error: Corrupted index cache file /var/spool/dovecot/mail/domain.com/info/dovecot.index.cache: Broken physical size for mail UID 1262969
Jul 10 17:47:35 mailserver dovecot: imap(info@domain.com): Error: read(/var/spool/dovecot/mail/domain.com/info/cur/1752158226.M1876P17821.mailserver,S=71461:2,) failed: Input/output error (uid=1262969)
Jul 10 17:47:35 mailserver dovecot: imap(info@domain.com): Disconnected: Internal error occurred. Refer to server log for more information. [2025-07-10 17:47:35] in=257 out=8016
Jul 10 17:48:08 mailserver dovecot: imap(info@domain.com): Error: Cached message size smaller than expected (71461 < 74032)
Jul 10 17:48:08 mailserver dovecot: imap(info@domain.com): Error: Maildir filename has wrong S value, renamed the file from /var/spool/dovecot/mail/domain.com/info/cur/1752158226.M1876P17821.mailserver,S=71461:2, to /var/spool/dovecot/mail/domain.com/info/cur/1752158226.M1876P17821.mailserver,S=71461:2,
Entonces, usar el siguiente comando para corregir.
2. Resolución con Core-Admin
-
Con un core-admin actualizado a la última:
>> crad-update.pyc -u
>> crad-update.pyc -g -f -d -
A continuación, ejecutar el siguiente comando sobre el buzón afectado:
>> crad-compress-maildir-folder.pyc fix_file_size /var/spool/dovecot/mail/dominio.com/local.part/
-
Esto buscará ficheros con declaración S= incorrecta, lo renombrará y al terminar, si es necesario, limpiará los ficheros de índice. Tener paciencia ya que el comando puede tardar bastante en función del tamaño del buzón.
3. Explicación
-
Este error se produce cuando se migran buzones generados por dovecots antiguos con un fallo
en el cálculo del S=. También se puede producir con buzones donde se hayan quedado sin cuota o que tengan la compresión activa y no se haya hecho la compresión/reconversión correctamente. -
Adicionalmente, el error se amplifica si se usa la opción maildir_broken_filename_sizes = yes en entornos con compresión activa.
-
Al migrar este buzón a un servidor con un dovecot nuevo, que sí que verifica dicho fallo, comienza fallar diciendo que ha detectado una discrepancia de size S=, lo corrige, y a continuación aborta.
-
Si hay pocos ficheros, y el usuario no accede a estos ficheros con fallos, no se nota mucho. Si hay muchos ficheros mal declarados, dará problemas constantes (tantos como ficheros mal declarados).
-
La solución es ejecutar el comando y dejarlo todo limpio.
-
Confirmar que este error no tiene nada que ver con la compresión (que esté activada o no) directamente pero sí con una combinación donde se haya activado recientemente, o por cuota, no se haya podido terminar la conversión.
4. Importante
-
El comando informa de las correcciones encontradas con una salida similar a:
INFO: Expected to find S=6463 at /var/spool/dovecot/mail/domain.com/local.part/cur/1627661885.M937133P19263.tokyo,S=2137:2,S (wrong: S=2137)
| Should be: /var/spool/dovecot/mail/domain.com/local.part/cur/1627661885.M937133P19263.tokyo,S=6463:2,S
| Renamed OK -
Si existe el fallo y al ejecutar el comando no encuentra nada (ver punto anterior), entonces, volver a ejecutar. Debido a cómo funciona, es posible que el fix no encuentre el fichero en tránsito debido a que el dovecot está también renombrando (pero mal).
-
Resumiendo: insistir con el comando hasta encontrar y corregir todos los fallos.
5. No usar
-
Ni la opción maildir_broken_filename_sizes = yes. En condiciones con el plúgin de compresión, generará más inconsistencias, rompiendo más ficherso.
-
Ni el comando doveadm fetch -u usuario.apellido@dominio.com text all > /dev/null. No funciona.