Acabei de ler a documentação do Maildir no Dovecot e alguns outros documentos sobre o Maildir e o Maildir ++. Espero não ter perdido nada importante.
O Maildir é projetado para funcionar sem bloqueios. A maioria das operações requeridas é atômica em sistemas de arquivos modernos. Isso significa que você não precisa se importar muito com as condições de corrida, como leitura inconsistente. Mas ainda há alguns problemas se você quiser fazer o backup de um Maildir enquanto o servidor de e-mail estiver em execução.
Problemas
-
Fazer backup e restaurar
tmp/
é inútil. Cada Maildir contém os diretóriosnew/
,cur/
etmp/
. O diretóriotmp/
contém e-mails que estão sendo gravados no disco no momento. Eles são movidos paranew/
quando são gravados com sucesso. Isso significa que os arquivos emtmp/
podem não estar completos ainda. Mesmo que o arquivo esteja completo, o processo que estava gravando o arquivo não está mais sendo executado após a restauração do backup. Isso significa que, se esse arquivo for restaurado, ele nunca será adicionado à caixa de correio e nunca poderá ser removido. -
Pode ser sensato excluir
dovecot-uidlist.lock
do backup. O Dovecot usa uma extensão do Maildir chamada Maildir ++. Esta extensão precisa de bloqueio. A aquisição do bloqueio para leitura não é exigida pela extensão, mas pode ser sensato excluir o arquivo de bloqueio do backup. -
Adquira
dovecot-uidlist.lock
ou use o instantâneo do sistema de arquivos. Basicamente, você pode simplesmente copiar o diretório, mas é possível perder alguns e-mails por condições de corrida. A razão é que listar e copiar o conteúdo de um diretório (recursivamente) não é atômico. Isso significa que é possível perder um e-mail ao criar o backup quando um usuário está alterando uma tag (por exemplo, visto / não visto) ou movendo a mensagem. Para lidar com tais situações, o Dovecot adquire o arquivo de bloqueio (o mesmo que acima) para cada ação. Se você estiver usando o Dovecot, poderá resolver o problema adquirindo o bloqueio antes de criar o backup. Isso pode ser feito com/usr/lib/dovecot/maildirlock
. Outra possibilidade é usar instantâneos do seu sistema de arquivos. Como a criação de um instantâneo é atômica, o problema não ocorre em instantâneos.
Como um resumo rápido: Se você quiser fazer um backup enquanto o Dovecot estiver em execução, você deve primeiro adquirir o arquivo de bloqueio dovecot-uidlist.lock
ou criar um instantâneo do seu sistema de arquivos. Então, você pode copiar o Maildir. Pode ser sensato excluir tmp/
e dovecot-uidlist.lock
do seu backup.