Если вы восстанавливали почту после сбоя диска, переноса или бэкапа — возможно, столкнулись с ситуацией, когда письма есть на диске, но клиенты (Roundcube, Thunderbird) их не видят. Ошибки вроде UID SORT failed
или Permission denied
— частые гости. Ниже — пошаговое руководство, как всё починить.
Dovecot хранит индексы в файлах с префиксом dovecot.
. Они кэшируют структуру писем, UID, размеры и флаги. При переносе или повреждении диска эти файлы становятся нерелевантными или битыми.
Удалите их:
rm /путь/к/почте/пользователя/dovecot.*
Пример для пользователя user@domain.ru
:
rm /var/mail/vhosts/domain.ru/user/dovecot.*
Если восстанавливаете много пользователей — массовое удаление:
find /var/mail/vhosts/ -name "dovecot.*" -delete
Dovecot работает от пользователя (например, vmail
). Убедитесь, что все папки принадлежат ему.
Проверьте, от кого работает Dovecot:
grep mail_uid /etc/dovecot/conf.d/10-mail.conf
Часто это vmail
(UID 1024, GID 1024).
Измените владельца:
chown -R vmail:vmail /var/mail/vhosts/
chmod -R 770 /var/mail/vhosts/
Если почта лежит в другом месте — замените путь.
Если папки принадлежат группе (например, mazzick
), а vmail
в ней не состоит — будет ошибка:
missing +w perm: ... we're not in group 1002(mazzick)
Решение:
usermod -a -G mazzick vmail
После этого перезапустите Dovecot:
systemctl restart dovecot
Dovecot перестроит индексы при первом доступе, но лучше сделать это принудительно.
Для одного пользователя:
doveadm index -u user@domain.ru INBOX
doveadm index -u user@domain.ru "*"
Для всех пользователей:
doveadm index -A INBOX
Если после индексации ошибка вида:
Cached message size larger than expected (1176968 > 1584)
— значит, файл письма обрезан, но в имени указан большой размер (S=1176968
).
Найдите такие письма:
find /var/mail/vhosts/ -path "*/cur/*S=*" | while read f; do
declared=$(echo "$f" | grep -o 'S=[0-9]*' | cut -d= -f2)
actual=$(stat -c%s "$f" 2>/dev/null || echo 0)
if [ $declared -gt 100000 ] && [ $actual -lt 1000 ]; then
echo "⚠️ Потенциально битое письмо: $f (S=$declared, actual=$actual)"
fi
done
Удалите найденные файлы вручную или скриптом:
rm "/путь/к/битому/письму:2,S"
Посмотрите список папок:
doveadm mailbox list -u user@domain.ru
Посмотрите количество писем в INBOX:
doveadm mailbox status messages INBOX -u user@domain.ru
Если видит письма — заходите через веб-интерфейс (Roundcube и т.п.).
Если Dovecot работает, а вы решили «улучшить» конфиг — остановитесь.
Особенно это касается параметров:
mail_location
user_query
mail_uid
, mail_gid
Пример из реальной жизни:
Было (работало):
#mail_location = maildir:/var/mail/%d/%u/
Админ, следуя совету «нейросети», поменял на:
mail_location = maildir:/mnt/newmail/%d/%u/
и убрал путь к папке из user_query
, оставив только UID/GID:
user_query = SELECT 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u' AND active = '1'
Результат — каша: Dovecot не знает, где лежит почта, письма не видны, индексы не создаются.
Верните user_query
к нормальному виду. Пример:
user_query = SELECT 'maildir:/mnt/newmail/%d/%u' AS mail, 1024 AS uid, 1024 AS gid FROM mailbox WHERE username = '%u' AND active = '1'
Или, если используете mail_location
в основном конфиге — убедитесь, что он корректен:
mail_location = maildir:/mnt/newmail/%d/%u/
и тогда user_query
может не указывать путь.
Если работает — не трогай. Особенно если не понимаешь, как связаны mail_location, userdb и пути к папкам.
Пересоздание индексов в Dovecot — это просто:
dovecot.*
doveadm index
Но если не работает — ищите дальше: группа, владелец, обрезанные файлы, и главное — не лезьте в конфиг без понимания.
Внимание: Cтатьи здесь сгенерированы нейросетью, пока не правил ошибки, только запустил его да и не до этого. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я реально делал минимум один раз. Серьёзно.
Сервера стоят, клиенты довольны, дата-центры не горят.
Это не просто копипаста — это опыт, выстраданный в бою, просто пересказанный через ИИ.
Если у вас есть вопросы, или Нашли неточность? пишите в коментах —
вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!