Sun Java System Messaging Server 6 2005Q4 管理指南

由於相同郵件的重複儲存而縮減郵件儲存大小

如果將一封郵件傳送至多位收件者,該郵件會置於每位收件者的電子信箱中。某些郵件傳送系統將相同郵件的單獨副本儲存在每位收件者的電子信箱中。相反,Sun Java System Messaging Server 會儘量保留單一郵件副本,而不管郵件常駐電子信箱的數目。透過在包含此郵件的電子信箱中建立指向此郵件的強制連結來實現此操作。

其他郵件傳送系統遷移至 Sun Java Messaging Server 時,這些多重郵件副本可能在遷移過程中進行複製。使用大型郵件儲存時,這意味著不必要地複製了大量郵件。此外,在正常伺服器作業中也可能累積相同郵件的多個副本,例如,IMAP 附加作業或其他來源。

Messaging Server 提供名為 relinker 的新指令,可移除過量的郵件副本,並使用至單一副本的強制連結取代它們。

重新連結程式作業原理

重新連結功能可以在指令模式或即時模式中執行。當執行 relinker 指令時,它將掃描郵件儲存分割區、建立或更新 MD5 郵件摘要儲存庫 (作為強制連結)、刪除過量郵件檔案,並建立必要的強制連結。

摘要儲存庫由郵件儲存中指向郵件的強制連結組成。儲存在目錄階層結構 partition_path/=md5 中。此目錄與使用者電子信箱階層結構 partition_path /=user 平行 (請參閱圖 18–1)。摘要儲存庫中的郵件由它們的 MD5 摘要唯一識別。例如,如果 fredb/00/1.msg 的摘要為 4F92E5673E091B43415FFFA05D2E47,則 partition/=user/hashdir/hashdir /=fredb/00/1.msg 連結至 partition/=md5/ hashdir/hashdir/4F92E5673E091B43415FFFA05D2E47EA.msg。如果其他電子信箱具有相同郵件,例如 partition_path /=user/hashdir/hashdir/gregk/00/17.msg,該郵件也將強制連結至 partition_path/=md5/4F/92/4F92E5673E091B43415FFFA05D2E47EA.msg。該範例在 圖 18–5 中顯示。

圖 18–5 郵件儲存摘要儲存庫

此圖說明郵件儲存儲存庫。

對於此郵件,連結記數為三。如果同時從 fredb 與 gregk 電子信箱中刪除郵件,則連結計數為一,且郵件會被清除。

重新連結程式可以在類似功能的即時模式中執行。請參閱在即時模式中使用重新連結程式以取得詳細資訊。

在指令行模式中使用重新連結程式

重新連結程式可掃描全部郵件儲存分割區,建立或更新 MD5 郵件儲存庫 (做為強制連結) 並刪除過量郵件檔案。在重新連結程式掃描儲存分割區後,將輸出重新連結前後有關唯一郵件數目以及分割區大小的統計資料。為了在已經雜湊的儲存上更加快速執行,重新連結程式僅計算尚未在 =md5 中顯示的郵件摘要。它還有一個選項可以清除整個摘要儲存庫 (這不會影響使用者的電子信箱)。

指令語法如下:

relinker [-p partitionname] [-d]

其中,partitionname 指定要處理的分割區 (預設:所有分割區),而 -d 指定將要刪除的摘要儲存庫。輸出範例如下所示︰


# relinker

Processing partition: primary
Scanning digest repository...
Processing user directories..............................
---------------------------------------------------------
Partition statistics           Before            After 
---------------------------------------------------------
Total messages                 4531898         4531898
Unique messages                4327531         3847029
Message digests in repository        0         3847029
Space used                       99210Mb         90481Mb
Space savings from single-copy    3911Mb         12640Mb
---------------------------------------------------------


# relinker -d 
Processing partition: primary
Purging digest repository...
---------------------------------------------------------
Partition statistics                 Before         After
---------------------------------------------------------
Message digests in repository       3847029             0
---------------------------------------------------------

重新連結程式會耗費相當長的時間來執行,尤其是儲存庫中沒有郵件時首次執行該程式的情況。這是因為它必須計算每個郵件的摘要 (如果 relinker 條件配置為包含所有郵件—請參閱配置重新連結程式以取得有關配置重新連結程式條件的資訊)。例如,處理 100 GB 的郵件儲存會花費六小時。但是,如果啟用執行階段重新連結 (請參閱在即時模式中使用重新連結程式

如果單獨使用 relinker 指令行模式,且未啟用執行階段選項,則必須清除摘要儲存庫 (=md5),否則儲存 (=user) 中清除的郵件所佔空間將無法成為可用的磁碟空間,因為它們在摘要儲存庫中依然具有連結 (成為孤立連結)。如果您正要執行儲存的一次性最佳化 (例如遷移之後),您可以先執行一次 relinker,然後使用 relinker -d 刪除整個儲存庫。若要重複清除 (在遷移期間),僅重複執行 relinker 指令即可,因為該指令每次執行時,也會清除儲存庫中過期的或孤立的郵件。

可以以平行方式安全地執行重新連結程式的多個實例,同時每個實例處理不同的分割區 (使用 -p 選項)。郵件僅在相同的分割區中重新連結。

在即時模式中使用重新連結程式

透過將 configutil 參數 local.store.relinker.enabled 設定為 yes,在即時模式中啟用重新連結程式功能。在即時模式中使用重新連結程式將計算符合配置的重新連結程式條件 (配置重新連結程式) 的所有已傳送郵件 (或已復原的郵件、已附加 IMAP 的郵件等) 之摘要,然後查看儲存庫以確認該摘要是否已存在。如果摘要存在,則將會在目標電子信箱中建立與該摘要的連結,而非建立郵件的新副本。如果沒有摘要,則將建立郵件,並且之後在儲存庫中新增與該摘要的連結。

stored 會掃描每個分割區的摘要儲存庫,並清除連結記數為 1 的或不符合重新連結程式條件的郵件。掃描在可配置時間段內一次執行一個目錄。這樣就可以平均分散 I/O 負載,並且不會明顯地影響其他伺服器作業。依預設,清除週期為 24 小時,這意味著郵件在從儲存中刪除或超出配置的最長存在時間之後,仍可在磁碟上最多存在 24 小時。當重新連結程式即時模式啟用時,將啟用此作業。

配置重新連結程式

表 18–13 顯示設定重新連結程式條件所使用的參數。

表 18–13 relinker configutil 參數

參數 

說明 

local.store.relinker.enabled

在附加碼中啟用郵件的即時重新連結並啟用 stored 清除。即使此選項已關閉,仍可能會執行 relinker 指令行工具,然而,由於 stored 不會清除儲存庫,所以必須使用 relinker -d 來執行此作業。開啟此選項將會影響郵件遞送效能,作為對節省磁碟空間的代價。

預設:no

local.store.relinker.maxage

郵件保留在儲存庫中的最長存在時間,或 relinker 指令行考量的最長存在時間 (以小時為單位)。-1 表示沒有時間限制,即僅從儲存庫中清除孤立的郵件。對於 relinker,它表示將處理現有郵件,不論存在時間為何。較短值可使儲存庫變得較小,因此可以讓 relinkerstored 清除更快地執行,並更快地收回磁碟空間,而較長值允許在較長時期內進行重複的郵件重新連結,例如,在間隔的幾天之內複製相同郵件至儲存,或在幾天或幾週之內執行遷移。

預設:24 

local.store.relinker.minsize

執行階段或指令行 relinker 考量的郵件最小大小 (以千位元組為單位)。設定非零值將放棄重新連結程式對較小郵件的有利之處,以獲得較小的儲存庫。

預設:0 

local.store.relinker.purgecycle

整個 stored 清除週期的大概持續期間 (以小時為單位)。實際持續期間視在儲存庫中掃描每個目錄所花費的時間而定。值越小,所使用的 I/O 就越多,較大的值不會很快地回收磁碟空間。0 表示不斷地執行清除而不會在目錄之間出現暫停。-1 表示不會在 stored 中執行清除 (必須使用 relinker -d 指令執行清除)。

預設:24