Faça uma cópia consistente do maildir

5

Assumindo que estou usando o Dovecot e o formato maildir para salvar e acessar e-mails em um servidor. Como evito condições de corrida ao copiar um maildir?

Eu li alguns tutoriais sobre backups e usando o maildir, mas não vi ninguém escrevendo sobre isso. Eles apenas usam cp ou rsync para copiar o diretório para outro local. É impossível que o maildir se torne um estado inconsistente ao copiar ou eu preciso de algum tipo de bloqueio?

EDITAR: Eu quero fazer backups regulares, mas eu não acho que isso seja muito útil para a pergunta. Eu sei que eu poderia parar o servidor de e-mail (Dovecot e Postfix), mas acho que deveria ser possível sem fazer isso. Tanto quanto eu sei, o acesso simultâneo ao suporte maildir por diferentes aplicativos.

    
por JojOatXGME 19.02.2016 / 17:54

1 resposta

5

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órios new/ , cur/ e tmp/ . O diretório tmp/ contém e-mails que estão sendo gravados no disco no momento. Eles são movidos para new/ quando são gravados com sucesso. Isso significa que os arquivos em tmp/ 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.

    
por 20.02.2016 / 04:44