This documentation is for Dovecot v2.x, see wiki1 for v1.x documentation.

This page is use UTF-8 encoding. If you cann't see the page contents, Please change the Character Encoding to UTF-8 .

Dovecot 所提出的 mailbox index 的概念

你有否想過電子郵件是一封一封的(如果在 mbox 形式的電郵儲存方式,那電郵是以一個檔案形式把所有郵件存放在一起的,而如果是以 Maildir/ å½¢å¼ä¾†å­˜æ”¾éƒµä»¶çš„ï¼Œé‚£éƒµä»¶å°±æœƒä»¥ä¸€å€‹æª”æ¡ˆä¸€å°é›»éƒµï¼Œè€ŒåŒæ™‚å­˜åœ¨åœ¨å¹¾å€‹ä¸åŒçš„æª”æ¡ˆç›®éŒ„å §ã€‚ï¼‰è€Œä½ åœ¨ Thunderbird ä¸‹å»å¾ˆå®¹æ˜“åœ°çœ‹åˆ°é€™æœ‰ä¸åŒçš„æ¨™é ­å’Œå¯„ä»¶è€ ï¼Œé‚„æœ‰æ”¶ä»¶æ—¥æœŸâ€¦â€¦ 方便你選取信件來閱讀。

這一種顯示方法,我們就把它稱作 Mailbox Index ã€‚å ¶å¯¦å¦‚æžœä½ æŒ‡ç´°åœ°æƒ³ä¸€æƒ³å¦‚æžœé›»éƒµä¼ºæœå™¨èƒ½åœ¨ä½ ä¸€é–‹å§‹é–±è®€éƒµä»¶çš„æ™‚å€™å°±èƒ½ä»¥ä¸€ç¨®å¿«é€Ÿçš„æ–¹æ³•ä¾†æŠŠé€™äº› index 提供給你的話,你會一定會十分開心的。

只以這方面的發展, Dovecot 已可以在電郵接收伺服器的發展歷史上記上一個大功。也許未來 mailbox index 會是接收伺服器的標準功能也說不定。

沒有 mailbox index 的痛苦

ä¸çŸ¥ä½ æœ‰æ²’æœ‰è©¦éŽåœ¨ç¶²çµ¡é€£ç·šååˆ†æ ¢çš„æƒ æ³ä¸‹é–‹å•Ÿä½ çš„é›»éƒµä¿¡ç®±ï¼Œè€Œå §ä¸­åˆæœ‰éŽåƒå°é›»éƒµçš„ç¶“é©—ã€‚å¦‚æžœä½ æœ‰éŽé€™æ¨£çš„ç¶“é©—çš„è©±ï¼Œä½ ä¸€å®šæœƒåŒæ„æˆ‘æ‰€èªªï¼Œé‚£ç¶“é©—å°±åƒæ˜¯åœ¨æ±ºå®šä»Šå¤©è¦ä¸è¦é€²è¡Œé€™ç„¡æ­¢å¢ƒçš„ç­‰ã€‚

æ—©æœŸæˆ‘å‰›åˆ°é›»è ¦å ¬å¸ä¸Šç­ï¼Œå°±ä¸é«˜èˆˆå°±æ˜¯é€™ä¸€ç¨®ç­‰ã€‚å¦‚æžœæ˜ŸæœŸä¸€ï¼Œé‚£ç­‰æ›´æ˜¯ç²¾ç¥žä¸Šçš„ä¸€å¤§æ­·ç·´ã€‚ï¼ˆåŠ ä¸Šå¦‚æžœä½ çŸ¥é“ç•¶ä¸­æœ‰ä¸‰åˆ†äºŒæ˜¯ç„¡ç”¨çš„åžƒåœ¾é›»éƒµçš„è©±ã€‚ï¼‰

mailbox index 的理念

mailbox index 的理念。 mailbox index 我想應是 dovecot 所提倡的。(起碼它是做得最好的。)這就是在不同的 mail folder 下建下一些特別的檔案。如下︰

...
./.INBOX
./.INBOX/.imap.index
./.INBOX/.imap.index.data
./.INBOX/.imap.index.tree
./.INBOX/.imap.index.log
...

é€™äº›æª”æ¡ˆçš„ç›®çš„å°±æ˜¯è¨˜éŒ„è‘—é›»éƒµä¿¡ç®±å §ä¸åŒçš„é›»éƒµæ‰€å«æœ‰çš„ä¸åŒæ¨™é ­è³‡æ–™ï¼ŒæŠŠå®ƒåŠ ä»¥æ”¾å¥½åœ¨ä¸€äº›æª”æ¡ˆå §ã€‚å°±ç®—ä½ çš„é›»éƒµä¿¡ç®±æœ‰éŽåƒå°ä¿¡ä»¶ï¼Œå®ƒå€‘å §ä¸­çš„è³‡æ–™ä¹Ÿæ˜¯åˆ†åˆ¥æ”¾å¥½åœ¨é€™äº›æª”æ¡ˆä¸‹ã€‚å› æ­¤ç•¶ä½ çš„é›»éƒµå®¢æˆ¶ç«¯é€£æŽ¥é›»éƒµä¼ºæœå™¨ï¼Œè€Œè¦æ±‚ç›®éŒ„ ( index ) æœå‹™çš„æ™‚å€™ï¼Œå®ƒå°±æ˜¯å¯ä»¥ç«‹å³åœ°å¾žé€™äº›æª”æ¡ˆä¸­æŠŠä¿¡ä»¶çš„è³‡æ–™å ±å‘Šçµ¦å®¢æˆ¶ç«¯ã€‚è€Œä¸éœ€è¦æ¯æ¬¡éƒ½åˆ°é›»éƒµä¿¡ç®±å §å°‹æ‰¾æ¯ä¸€å°ä¿¡ä»¶å†æŠŠ index 匯報出來,這當然會加快電郵接收伺服器匯報的時間。

一次 nfs 下的測試

å ¶å¯¦ç‚ºä»€éº¼æœƒæŠŠé€™å€‹ mailbox index 特別拿來一談。主要原因是一次在 nfs ä¸‹çš„æ¸¬è©¦ï¼è¦äº†è§£ç‚ºä»€éº¼è¦åšé€™æ¨£çš„æ¸¬è©¦ï¼Œé¦–å ˆè¦äº†è§£ samba.hk 現在的網絡結構。在今天年初因為要準備 www.godclick.net 和 www.openworkshop.org çš„éœ€è¦ï¼Œæ‰€ä»¥æŠŠå”æœƒçš„å ©å°ä¼ºæœå™¨ç”±å ©å°å¢žåˆ°å››å°ã€‚ï¼ˆå ¶å¯¦ä¹Ÿåœ¨æº–å‚™ç¬¬äº”å°ä¼ºæœå™¨ã€‚ï¼‰è€Œä¸”é–‹å§‹æŠŠä¸åŒçš„æœå‹™åˆ†é åˆ°ä¸åŒçš„ä¼ºæœå™¨ä¸‹ä¾†å·¥ä½œï¼Œä½œæ›´ä»”ç´°çš„å”ä½œå’Œåˆ†å·¥ã€‚å¸Œæœ›èƒ½åŠ å¿«å”æœƒä¼ºæœå™¨çš„å›žæ‡‰æ™‚é–“ï¼ä½†æ˜¯å››å°ä¼ºæœå™¨æˆ–äº”å°ä¼ºæœå™¨çš„å‚™ä»½å·¥ä½œä¸€å®šæ¯”ä¸€å°ä¼ºæœå™¨ä¾†å¾—è¤‡é›œã€‚åœ¨æœ‰é™çš„äººæ‰‹è³‡æºè¦ä½œå‡ºé€™æ¨£çš„ç®¡ç†çµ•éžæ˜“äº‹ã€‚å› æ­¤åœ¨å»ºç«‹ç¶²çµ¡çš„åˆæœŸå°±æº–å‚™äº†ä¸€å° nfs 伺服器,以作網絡硬碟之用。這樣的設計也可以簡化了備份的工作。

但是一個平價的網絡硬碟機最大的問題是不是所有的伺服服務都是 nfs 友善的。 另一方面就是網絡硬碟的 I/O 速度!這是最大的考驗。

在 courier-imap 和 dovecot åœ¨é€™æƒ æ³ä¸‹çš„æ¯”è¼ƒï¼Œæ˜Žé¡¯åœ° dovecot 勝出了。最主要勝出的原因就是 mailbox index 上。因為 dovecot 的 mailbox index ,容許把它和 mail storage åˆ†é–‹ä¸åŒçš„åœ°æ–¹æ”¾ç½®ã€‚å› æ­¤ç¶²çµ¡çš„ç®¡ç†è€ å¯ä»¥æŠŠ dovecot 的 mailbox index 放置在 I/O è¼ƒå¿«çš„æœ¬åœ°é›»è ¦ä¸Šï¼Œè€Œå¦å¤–æŠŠé‡è¦çš„é›»éƒµä¿¡ä»¶æ”¾åˆ° I/O é€Ÿåº¦è¼ƒæ ¢çš„ç¶²çµ¡ç£ç¢Ÿæ©Ÿä¸Šã€‚

é€™ä¹Ÿè®“ä½¿ç”¨è€ åœ¨é–±è®€æœ‰ç”¨çš„ä¿¡ä»¶æ™‚æ‰ä½¿ç”¨ç¶²çµ¡ç£ç¢Ÿæ©Ÿï¼Œä¹Ÿå¯ä»¥ä½¿åˆ°ç¶²çµ¡ç£ç¢Ÿæ©Ÿè™•ä¹Žä¸€å€‹æ›´å„ªåŒ–çš„ç‹€æ ‹ã€‚ï¼ˆå ¶å¯¦å¾ˆå¤šåœ¨ä¿¡ç®±ä¹Ÿæ˜¯ plain-text ,另外也許有三分一是不會看的信件。所以有效地使用 mailbox index ,確可以令接收伺服器處於一個更好的狀況。)

samba.hk 接收伺服器上的設定

mail_location = maildir:./:INDEX=/var/indexes/%u

é€™è£¡æœƒæŠŠä½¿ç”¨è€ çš„ indexes 存放在 file:///var/indexes çš„æª”æ¡ˆç›®éŒ„å §ã€‚å¦‚ frankie@godclick.net 的電郵地址,它所存放的地方就在 file:///var/indexes/frankie@godclick.net çš„æª”æ¡ˆç›®éŒ„å §ã€‚

還記如何使用 dovecot 來管理 virtual mailbox 吧!如果忘記了,請你查看這一份文件Email/DovecotVirtualMailBox 吧。它講解了如何使用一個 glabel uid 和 gid 來管理電郵信箱(這裡使用了 65533 的 uid 和 65533 的 gid 來管理它。),當然那 INDEX 也會使用相同的 uid 和 gid ä¾†å»ºç«‹çš„ï¼Œæ‰€ä»¥ä¹Ÿæ˜¯ç›¸åŒçš„ä½¿ç”¨è€ å’Œä½¿ç”¨è€ ç¾¤çµ„ã€‚

你可以用以下的指令來建立這一個檔案目錄。

# mkdir /var/indexes
# chown 65533:65533 /var/indexes
#


ChineseSupport

None: ChineseSupport/DovecotMailBoxIndex (last edited 2009-06-20 22:19:40 by PascalVolk)