DOVECOT-WRONG-FILE-SIZE-001 -- Procedimiento para corregir errores Maildir filename has wrong S value, renamed the file from


#1

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

  1. Con un core-admin actualizado a la última:

    >> crad-update.pyc -u
    >> crad-update.pyc -g -f -d

  2. 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/

  3. 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

  1. 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.

  2. Adicionalmente, el error se amplifica si se usa la opción maildir_broken_filename_sizes = yes en entornos con compresión activa.

  3. 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.

  4. 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).

  5. La solución es ejecutar el comando y dejarlo todo limpio.

  6. 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

  1. 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

  2. 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).

  3. Resumiendo: insistir con el comando hasta encontrar y corregir todos los fallos.

5. No usar

  1. 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.

  2. Ni el comando doveadm fetch -u usuario.apellido@dominio.com text all > /dev/null. No funciona.

6. Referencias

https://dovecot.org/pipermail/dovecot/2012-May/083486.html