Por que o espaço em disco não é reduzido após excluir e-mails através do IMAP com o Dovecot?

1

Estou executando um servidor de e-mail com o OpenSMTPD e o Dovecot no Linux e acessando e-mails usando o IMAP com um cliente do Thunderbird. Quando eu excluo um email no Thunderbird, por que o uso do espaço em disco não diminui?

Como exemplo, os arquivos mbox de um usuário são armazenados em / var / vmail / $ {domain} / $ [user} /:

$ ls
Archives  Drafts  inbox  Sent  Spam  TrainSpam  Trash

Não tenho certeza se os arquivos mbox são arquivos esparsos, então em vez de du (que também mostra o problema), espero que ls tenha os tamanhos de arquivo "eficazes" mais precisos, então somei todos tamanhos de todos os arquivos neste diretório:

$ ls -al | grep vmail | awk '{print $5}' | paste -sd+ | bc
1119217444

Em seguida, vou para o Thunderbird e excluo um email grande com anexo que mostre um tamanho de 1 MB. O Thunderbird envia para a pasta Deleted, depois eu vou para a pasta Deleted, apago-a lá, confirmo a caixa de diálogo de exclusão permanente e reconcoi os tamanhos dos arquivos:

$ ls -al | grep vmail | awk '{print $5}' | paste -sd+ | bc
1119217443

Então caiu 1 byte. Talvez seja apenas marcá-lo excluído? Como eu realmente recuperar o espaço em disco? Eu entendo que isso pode não ser trivial, já que um arquivo mbox é apenas um arquivo grande e simples.

    
por Kevin 10.11.2018 / 06:57

2 respostas

1

Encontrado o comando dovecot:

$ doveadm expunge -u $user@$host mailbox Trash all
    
por 10.11.2018 / 06:59
3

No formato MBOX, as mensagens são armazenadas em um único arquivo enorme, um abaixo do outro, com uma estrutura muito simples:

From [email protected]  Sat Nov 10 06:00:00 2018
From: Author <[email protected]>
To: Recipient <[email protected]>
Subject: Sample message 1

Message body.
>From is escaped. Otherwise it would break the MBOX file.

From [email protected]  Sat Nov 10 06:30:00 2018
From: Author <[email protected]>
To: Recipient <[email protected]>
Subject: Sample message 2

Another message body.

Portanto, excluir uma mensagem do meio do arquivo causará a regravação do restante do arquivo, o que pode ser ruim para o desempenho e a integridade dos dados, pois o arquivo pode ficar corrompido se a gravação for interrompida.

Uma solução é sinalizar a mensagem como excluída, em vez de excluí-la, já que ela exige apenas a modificação de uma linha, mantendo o restante do arquivo intacto. Isso permite combinar várias exclusões em uma única operação, posteriormente.

O artigo da MozillaZine sobre Pastas de compactação explica isso da perspectiva do Thunderbird:

When you delete messages in an email client such as Thunderbird they aren't physically deleted. Even emptying the Trash does not get rid of them. Instead they are marked for deletion and hidden from view. They are not physically removed until you "compact" the folder. This is a tradeoff done to improve performance in large folders.

O artigo de Dovecot sobre Formato de Caixa de Correio da Mbox explica como o Dovecot lida com os problemas com o formato MBOX. A exclusão é armazenada no cabeçalho X-Status: D adicionado aos cabeçalhos das mensagens.

Dovecot uses C-Client (ie. UW-IMAP, Pine) compatible headers in mbox messages to store metadata. These headers are:

  • X-IMAPbase: Contains UIDVALIDITY, last used UID and list of used keywords
  • X-IMAP: Same as X-IMAPbase but also specifies that the message is a "pseudo message"
  • X-UID: Message's allocated UID
  • Status: R (\Seen) and O (non-\Recent) flags
  • X-Status: A (\Answered), F (\Flagged), T (\Draft) and D (\Deleted) flags
  • X-Keywords: Message's keywords
  • Content-Length: Length of the message body in bytes

Whenever any of these headers exist, Dovecot treats them as its own private metadata. It does sanity checks for them, so the headers may also be modified or removed completely. None of these headers are sent to IMAP/POP3 clients when they read the mail.

    
por 10.11.2018 / 08:18

Tags