Sun Java System Messaging Server 6.3 管理指南

20.11 執行郵件儲存的維護程序

本節提供有關您維護和回復郵件儲存所使用的公用程式的資訊。您應經常閱讀 Postmaster 傳送的郵件,以便及時掌握伺服器傳送的警告和警示。您還應該監視記錄檔,以取得有關伺服器如何執行的資訊。如需有關記錄檔的更多資訊,請參閱第 25 章, 管理記錄

本節包含以下內容:

20.11.1 向郵件儲存中增加更多實體磁碟

Messaging Server 郵件儲存包含特定 Messaging Server 實例的使用者電子信箱。郵件儲存的大小將根據電子信箱、資料夾及記錄檔數目的增加而增加。

隨著系統使用者數目的增加,您的磁碟儲存需求也隨之增加。根據您伺服器支援的使用者數目,郵件儲存可能需要一個實體磁碟或多個實體磁碟。Messaging Server 可讓您根據需要增加更多儲存。增加更多儲存的方法之一就是使用儲存設備。如需如何使用 Messaging Server 配置 Network Appliance 儲存設備的資訊,請參閱「Using NetApp Filers with Sun Java System Messaging Server Message Store」

20.11.2 管理電子信箱

本節說明以下管理和監視電子信箱的公用程式:mboxutilhashdirreadership

20.11.2.1 mboxutil 公用程式

使用 mboxutil 指令可執行一般的電子信箱維護作業。mboxutil 作業包含以下各項:


備註 –

請注意,您不應在執行過程中終止 mboxutil 程序。如果此程序被 SIGKILL (kill -9) 終止,則可能需要重新啟動每台伺服器,並執行回復作業。


如需詳細語法與使用需求,請參閱「Sun Java System Messaging Server 6.3 Administration Reference」中的「mboxutil」

範例

列出所有使用者的所有電子信箱:

mboxutil -l

列出所有電子信箱並包含路徑和 ACL 資訊:

mboxutil -l -x

若要為使用者 daphne 建立名為 INBOX 的預設電子信箱:

mboxutil -c user/daphne/INBOX

若要為使用者 delilah 刪除名為 projx 的郵件資料夾:

mboxutil -d user/delilah/projx

若要為使用者 druscilla 刪除名為 INBOX 的預設電子信箱及所有郵件資料夾

mboxutil -d user/druscilla/INBOX

若要將使用者 desdemona 的郵件資料夾 memos 重新命名為 memos-april

mboxutil -r user/desdemona/memos user/desdemona/memos-april

若要將使用者 dimitria 的郵件帳號移至新分割區:

mboxutil -r user/dimitria/INBOX user/dimitria/INBOX partition

其中 partition 指定新分割區的名稱。

若要將使用者 dimitria 的名為的 personal 郵件資料夾移至新分割區:

mboxutil -r user/dimitria/personal user/dimitria/personal partition

20.11.2.2 移除孤立帳號

若要搜尋孤立帳號 (孤立帳號是指在 LDAP 中沒有對應項目的電子信箱),請使用下列指令:


mboxutil -o

指令輸出如下所示:

  mboxutil: Start checking for orphaned mailboxes
  user/annie/INBOX
  user/oliver/INBOX
  mboxutil: Found 2 orphaned mailbox(es)
  mboxutil: Done checking for orphaned mailboxes

若要建立列出孤立電子信箱並可轉變成刪除孤立電子信箱的程序檔檔案 (範例檔案名稱為 orphans.cmd),請使用以下指令:


mboxutil -o -w orphans.cmd

指令輸出如下所示:

  mboxutil: Start checking for orphaned mailboxes
  mboxutil: Found 2 orphaned mailbox(es)
  mboxutil: Done checking for orphaned mailboxes

使用以下指令刪除孤立的檔案︰


mboxutil -d -f orphans.cmd

20.11.2.3 hashdir 公用程式

郵件儲存中的電子信箱以雜湊結構儲存以便快速搜尋。因此,若要尋找含特定使用者電子信箱的目錄,請使用 hashdir 公用程式。

此公用程式可識別包含特定帳號的郵件儲存的目錄。此公用程式還可報告郵件儲存的相對路徑,如 d1/a7/。該路徑相對於使用者 ID 目錄之前的目錄層級。該公用程式會將路徑資訊傳送至標準輸出。

例如,若要尋找使用者 crowe 電子信箱的相對路徑:

hashdir crowe

20.11.2.4 readership 公用程式

readership 公用程式可報告有多少使用者 (電子信箱所有者除外) 閱讀過共用 IMAP 資料夾中的郵件。

IMAP 資料夾的所有者可以授予其他人閱讀資料夾中郵件的權限。允許其他人存取的資料夾稱為共用資料夾。管理員可以使用 readership 公用程式來查看有多少使用者 (所有者除外) 在存取共用資料夾。

此公用程式會掃描所有的電子信箱並為每個共用資料夾產生一行輸出資料,用於報告讀者數目 (後跟空格和電子信箱的名稱)。

每個讀者都是獨立的認證個體,他們都在過去的指定天數內選取過共用資料夾。但是讀取個人電子信箱的使用者不會算作讀者之一。此公用程式不會報告個人電子信箱的閱讀狀況,除非至少有一個資料夾所有者以外的人在閱讀。

例如,以下指令會將過去 15 天中選取過共用 IMAP 資料夾的任何人都算作讀者:

readership -d 15

20.11.3 信箱大小上限

信箱的大小上限約為一百萬則郵件。若超過此數目,郵件即可能無法遞送給使用者,或產生郵件儲存效能問題。如需詳細資訊,請參閱20.14.4.7 使用者郵件因電子信箱溢位而未遞送

20.11.4 監視配額限制

監視配額使用率和限制, 使用imquotacheck,可產生報告而列出定義的配額和限制,並提供有關配額使用率的資訊。配額和使用率圖表以千位元組為單位報告。該公用程式還可以將電子信箱大小與使用者的指定配額進行比較。您可以選擇將電子郵件通知傳送給超出指定配額設定百分比的使用者。


備註 –

imquotacheck 中,某些功能已經變更。(在 Messaging Server 6.x 中,imquotacheck 公用程式已取代 quotacheck 公用程式。)在 Messaging Server 5.x 中,當您使用 quotacheck 公用程式擷取使用者清單時,quotacheck 會搜尋本機 mboxlist 資料庫。此功能複製了 mboxutil 公用程式中的搜尋功能。

在 Messaging Server 6.x 中,已從 imquotacheck 公用程式中移除此複製功能。如果您使用 imquotacheck 執行使用者搜尋,搜尋將對 LDAP 目錄執行,而非本機 mboxlist 資料庫。若要從本機 mboxlist 資料庫中擷取使用者清單,請使用 mboxutil 公用程式。


列示規則檔案中配額超出最小臨界值的所有使用者的使用情況:

imquotacheck

若要列出網域 siroe.com 的配額資訊:

imquotacheck -d siroe.com

根據預設規則檔案向所有使用者傳送通知:

imquotacheck -n

若要根據指定的 rulefilemyrulefile 與指定的郵件樣本檔案 mytemplate.file 傳送通知給所有使用者 (如需更多資訊,請參閱「Sun Java System Messaging Server 6.3 Administration Reference」中的「imquotacheck」):

imquotacheck -n -r myrulefile -t mytemplate.file

列示所有使用者的使用情況 (將忽略規則檔案):

imquotacheck -i

為使用者 user1 列示每個資料夾的使用情況 (將忽略規則檔案):

imquotacheck -u user1 -e

20.11.5 監視磁碟空間

您可以指定系統監視磁碟空間和分割區使用的頻率,以及在何種情況下傳送警告。如需詳細資訊,請參閱27.3.2 監視磁碟空間

20.11.6 stored 常駐程式

stored 常駐程式可執行下列維護作業,以進行郵件儲存:

如果有任何伺服器常駐程式當機,您必須停止所有常駐程式,然後再重新啟動它們,包含 stored

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

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

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

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

20.11.7.1 重新連結程式作業原理

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

摘要儲存庫由郵件儲存中指向郵件的強制連結組成。它儲存在目錄階層 partition_path/=md5 中。此目錄平行於使用者電子信箱階層 partition_path/=user (請參閱圖 20–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。如圖 20–4 所示。

圖 20–4 郵件儲存摘要儲存庫

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

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

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

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

重新連結程式可掃描所有郵件儲存分割區,建立或更新 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 條件配置為包含所有郵件—請參閱20.11.7.4 配置重新連結程式以取得有關配置重新連結程式條件的資訊)。例如,處理 100 GB 的郵件儲存會花費六小時。但是,如果啟用執行階段重新連結 (請參閱20.11.7.3 在即時模式中使用重新連結程式

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

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

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

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

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

20.11.7.4 配置重新連結程式

表 20–11 顯示可用以設定重新連結程式條件的參數。

表 20–11 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