圧縮Maildir [奇妙なPostfix Maildirファイルです]

圧縮Maildir [奇妙なPostfix Maildirファイルです]

期限切れの古いサーバーから電子メールバックアップを回復する状況を解決するように求められました。

Maildirファイルといくつかのヘッダーデータを使用すると、postfix + courierと呼ばれる組み合わせとは異なり、サーバーがpostfix + dovecotを実行するためにどの組み合わせを使用しているかを探索操作で簡単に確認できます。

そのため、Postfix 3.1.6とdovecot-imapd 2.2.27を使用してDebian 9サーバーを設定しました。

いくつかの調整の後、フォルダは表示されましたが、電子メールは歪んだように見えました。

現在のディレクトリと新しいディレクトリを確認すると、電子メールファイルは通常のMaildir形式のように見えますが、ファイルを開くと歪んだようです。

コマンドを実行しfile、メッセージがすべてgzip圧縮形式であることを確認します。

どうしたの?管理者がバックアップする前に圧縮したすべての電子メールボックスメッセージファイルをバックアップしますか?

ベストアンサー1

話題をさらに深く探求しながら、何か正しくないことが明らかになりました。

一部のメッセージを解凍すると、dovecotがメッセージを表示したときに名前が実際に新しいより大きなサイズを反映するように更新されたため、私の疑いもさらに高まりました。

それで、さらなる調査の終わりに鳩の家が圧縮された面積を持つことができるという事実が明らかになりました。

~からDovecotリポジトリで圧縮を有効にする

私はDovecotメールストアに圧縮を適用できることを発見しました。

圧縮は「新しい」Eメールでのみ機能します。

~からDebian で圧縮された Dovecot Maildir

/etc/dovecot/conf.d/10*に追加します。

# Enable zlib plugin globally for reading/writing:
mail_plugins = $mail_plugins zlib

# Enable these only if you want compression while saving:
plugin {
    zlib_save_level = 6 # 1..9; default is 6
    zlib_save = gz # or bz2, xz or lz4
}

/etc/dovecot/conf.d/20*に追加します。

protocol imap {
   mail_plugins = zlib
}
protocol pop3 {
   mail_plugins = zlib
}

サービスを再起動してくださいdovecot

service dovecot restart

これにより、構成変更後に生成されたすべてのメッセージに圧縮設定が適用されます。

ガイドラインDovecot WiKi(Zlibプラグイン)これにより、保存した電子メールを圧縮するのに役立ちます。

~からDovecot WiKi(Zlibプラグイン)

Zlibプラグインを使用して、圧縮されたmbox、maildir、またはdboxファイルを読み取ることができます。 (IMAP、LDA、および/またはLMTPを介して)圧縮メッセージをdboxまたはMaildirメールボックスに書き込むためにも使用できます。 Zlib プラグインは、zlib/gzip、bzlib/bzip2、liblzma/xz(v2.2.9+)、および liblz4/lz4(v2.2.11+) を使用した圧縮をサポートします。

...

メールディレクトリ

このプラグインがロードされると、DovecotはMaildirから圧縮ファイルと圧縮されていないファイルを読み取ることができます。 gzip と bzip2 のサポートを有効にすると、Maildir で圧縮ファイルのいずれかを使用できます。圧縮は、ファイルの最初の数バイトを読み取り、有効なgzipまたはbzip2ヘッダーであることを確認することによって検出されます。ファイル名は重要ではありません。

または、パフォーマンス上の理由で圧縮されたメールボックスを処理したくない場合は、まとめて解凍する1つの方法はbashスクリプトを作成することです。

現在のスクリプトにはいくつかの欠点がありますが、一般的なガイドラインは次のとおりです。

#!/bin/bash

TMPDIR="/tmp"

service dovecot stop

find  /home/*/Maildir -type f |

while read file
do
    file "$file" | grep gzip > /dev/null
    if [ $? -eq 0 ]
    then
        echo "$file"" gzipped...decompacting"
        mv "$file" $TMPDIR/$$.gz
        gunzip -c $TMPDIR/$$.gz > "$file"
        rm -f $TMPDIR/$$.gz 
    fi
done

find /home -name "dovecot.index.cache*" -delete

service dovecot start

おすすめ記事