Sun ONE Messaging Server 6.0 管理員指南 |
第 15 章
管理郵件儲存本章描述郵件儲存及其管理介面。本章包含以下各節:
簡介郵件儲存包含特定 Messaging Server 實例的使用者電子信箱。郵件儲存的大小將根據電子信箱、資料夾及日誌檔數目的增加而增加。透過指定電子信箱的大小限制 (磁碟配額) 和所允許接收的郵件總量限制,以及為儲存中的郵件設定時效策略等方法,您可以控制儲存的大小。
隨著系統使用者數目的增加,您的磁碟儲存需求也隨之增加。根據您伺服器支援的使用者數目而定,郵件儲存可能需要一個實體磁碟或多個實體磁碟。有兩種方法可以為系統添加額外的磁碟空間。最簡單的方法就是新增額外的郵件儲存分割區 (請參閱配置郵件儲存分割區)。
同樣地,如果您要支援多個託管網域,則可能需要將一個伺服器實例專用於單一的大型網域。使用此配置,您可以為特定網域指定一個儲存管理員。您還可以透過新增更多的分割區來擴充郵件儲存。
若要管理郵件儲存,除 Sun ONE 主控台介面之外,Messaging Server 還可提供一組指令行公用程式。表格 15-1 中有描述這些指令行公用程式。如需有關使用這些公用程式的資訊,請參閱執行郵件儲存的維護程序和「Messaging Server Reference Manual」。
郵件儲存目錄佈局圖 15-1 中顯示了伺服器實例的郵件儲存目錄佈局。郵件儲存旨在提供電子信箱內容的快速存取。儲存目錄的描述位於表格 15-2 中。
圖 15-1 郵件儲存目錄佈局
郵件儲存由多個電子信箱資料庫和使用者電子信箱組成。電子信箱資料庫包含有關使用者、電子信箱、分割區、配額以及其他郵件儲存相關資料的資訊。使用者電子信箱包含使用者的郵件和資料夾。電子信箱儲存在郵件儲存分割區中,郵件儲存分割區是磁碟分割區中專用於儲存郵件儲存的一個區域。請參閱配置郵件儲存分割區,以取得詳細資訊。郵件儲存分割區與磁碟分割區不同,但為便於維護,我們建議您為每個郵件儲存分割區配置一個磁碟分割區。
如 INBOX 之類的電子信箱將位於 store_root 中。例如,以下為目錄路徑的範例:
store_root/partition/primary/=user/53/53/=mack1
下表描述郵件儲存目錄。
表格 15-2 郵件儲存目錄描述
位置
內容/描述
msg_svr_base
預設位置:/opt/SUNWmsgsr
包含伺服器程式、配置、維護和資訊檔案的 Messaging Server 機器上的目錄。
store_root
msg_svr_base/data/store
郵件儲存的頂層目錄。其中包含 mboxlist、user 和 partition 子目錄。
./store.expirerule
包含自動移除郵件規則 (過期規則)。此選擇性檔案可以放在其他位置。請參閱設定自動移除郵件 (過期和清除) 功能。
store_root/dbdata/snapshots
郵件儲存資料庫的備份快照。
store_root/mboxlist/
包含電子信箱資料庫,該資料庫是儲存電子信箱資訊和配額資訊的資料庫 (Berkeley DB)。
folder.db 包含有關電子信箱 (包括儲存電子信箱的分割區名稱)、ACL 以及 store.idx 中部分資訊副本的資訊。每個電子信箱的 folder.db 中均有一個項目。
quota.db 包含有關配額及其使用率的資訊。每個使用者的 quota.db 中均有一個項目。
lright.db - 是根據 ACL 查找權排序的資料夾索引。
peruser.db 包含有關每個使用者旗標的資訊。該旗標可表示特定使用者是否已讀取或刪除某封郵件。
subscr.db 包含有關使用者訂閱的資訊。
store_root/session/
包含作用中的郵件儲存程序資訊。
store_root/user/
未使用。
store_root/partition/
包含郵件儲存分割區。系統已建立預設的 primary 分割區。請將您定義的其他分割區放在此目錄中。
store_root/partition/primary/
=user/此分割區的子目錄中包含所有的使用者電子信箱。電子信箱以雜湊結構儲存,以便快速搜尋。若要搜尋包含特定使用者電子信箱的目錄,請使用 hashdir 公用程式。
.../=user/hashdir/hashdir/
userid/其 ID 為 userid 的頂層郵件資料夾。這是使用者的 INBOX。對於預設網域,userid 是 uid。對於託管網域,userid 是 uid@domain。進來的郵件會遞送到此郵件資料夾中。
.../userid/folder
使用者在郵件傳送伺服器上定義的資料夾。
.../userid/store.idx
這是一個索引,它提供儲存在 /userid/ 目錄下的郵件之以下資訊:郵件數目、此電子信箱使用的磁碟配額、電子信箱上次新收到郵件的時間、郵件旗標、每封郵件 (包括標頭和 MIME 結構) 的長度資訊,以及每封郵件的大小。該索引還包含每個使用者的 mboxlist 資訊和配額資訊的備份副本。
.../userid/store.usr
包含存取過該資料夾的使用者清單。包括每個列出的使用者上次存取資料夾的時間,以及該使用者已讀取及已刪除的郵件清單。
.../userid/store.sub
包含有關使用者訂閱的資訊。
.../userid/store.exp
包含已刪除但尚未從磁碟中移除的郵件檔案清單。僅當存在已刪除的郵件時,該檔案才會顯示。
.../userid/nn/
或
.../userid/folder/nn/nn 是一個雜湊目錄,其中包含 message_id.msg 格式的郵件;nn 可以是 00 至 99 之間的任一數字。message_id 也是一個數字。範例:郵件 1 至 99 都儲存在 .../00 目錄下。第一個郵件為 1.msg,第二個為 2.msg,第三個為 3.msg,依此類推。郵件 100 至 199 儲存在 01 目錄下;郵件 9990 至 9999 儲存在 99 目錄下;而郵件 10000 至 10099 又循環回到 00 目錄,再依此類推。
郵件儲存如何移除郵件將郵件從郵件儲存中移除需要三個階段:
- 刪除。用戶端首先將郵件旗標設定為 delete。此時,郵件被標記為移除,但用戶仍可透過移除刪除旗標來回復郵件。如果有第二個用戶在觀看,則他可能無法立即看到旗標已刪除。您可以藉由設定 configutil 參數 local.imap.immediateflagupdate 來啟用旗標的立即更新功能。
- 永久刪除。郵件會從電子信箱中被移除。從技術上來看,只是將它們從郵件儲存的索引檔案 store.idx 中移除而已。郵件本身仍在磁碟上,但是一旦被永久刪除,用戶便無法再回復郵件。
過期是永久刪除的特殊情況。系統會永久刪除符合一組管理員定義的移除條件 (如郵件的大小和存在時間等) 的郵件。請參閱設定自動移除郵件 (過期和清除) 功能
- 清除。依預設,stored 公用程式會在每天晚上 11 點鐘將所有已永久刪除的郵件從磁碟上清除。您可以使用 local.schedule.purge (控制郵件清除排程) 和 store.cleanup (控制清除寬限期 [郵件被清除之前的緩衝時間]) 來配置此功能。
指定對儲存的管理員存取權郵件儲存管理員可以檢視並監視使用者電子信箱,並為郵件儲存指定存取控制。儲存管理員有權代理任何服務 (POP、IMAP、HTTP 或 SMTP) 進行身份認證,也就是說,他們可以使用任何使用者的權限替任何服務進行身份認證。這些權限可讓儲存管理員執行某些公用程式,以便管理儲存。例如,使用 MoveUser,儲存管理員可在系統之間移動使用者帳號和電子信箱。
本節說明如何在安裝的 Messaging Server 下向郵件儲存授予儲存權限。
您可以執行以下小節中描述的管理員作業:
新增管理員
configutil -o store.admins -v "adminlist"
其中,adminlist 是以空格分隔的管理員 ID 清單。如果您指定一個以上的管理員,則必須以引號包圍該清單。此外,管理員還必須是服務管理員群組的成員 (在 LDAP 使用者項目:memberof:cn=Service Administrators,ou=Groups,o=usergroup 中)。
修改管理員項目
主控台 若要使用主控台修改郵件儲存 [管理員 UID] 清單中的現有項目:
指令行 若要使用指令行修改郵件儲存 [管理員 UID] 清單中的現有項目:
configutil -o store.admins -v "管理員清單"
刪除管理員項目
主控台 若要使用主控台從郵件儲存 [管理員 UID] 清單中刪除項目:
指令行 若要使用指令行刪除儲存管理員,您可以編輯管理員清單,方法如下:
configutil -o store.admins -v "管理員清單"
關於共用資料夾共用資料夾是可以由一組使用者存取並讀取的資料夾。換言之,共用資料夾的存取權可以授予多位使用者。例如,使用者可以建立一個名為 golf 的資料夾,並允許其他使用者檢視該資料夾的內容。
依預設,Messaging Server 會在所有電子郵件帳號中建立一個名為 Shared Folders/Users 的資料夾。使用者可以在此資料夾中建立並存取共用資料夾。圖 15-2 顯示共用資料夾將如何顯示在用戶端的範例。該範例將在設定分散式共用資料夾中進一步描述。
圖 15-2 Ed 的用戶端共用郵件資料夾清單範例
使用者可以建立私人共用資料夾,並為其電子郵件用戶端 (如果該用戶端支援共用資料夾) 提供對這些資料夾的存取權。這些共用資料夾將顯示在具有給定存取權的其他使用者的 Shared Folders 中。
如果要發起對特定主題的討論,並將持續進行的討論內容分享出來,再一一歸檔,共用資料夾十分有用。例如,一組軟體開發人員可以建立一個共用資料夾,用於討論特定專案的開發。當郵件傳送至共用資料夾後,訂閱該共用資料夾的所有人 (可以使用個人位址或群組位址新增訂閱者) 即可開啟此電子信箱並閱讀郵件。
共用資料夾有兩種類型:
通常,共用資料夾僅適用於特定郵件儲存中的使用者。但是,Messaging Server 允許您建立可以跨多個郵件儲存進行存取的特殊共用資料夾。這些共用資料夾稱為分散式共用資料夾。請參閱設定分散式共用資料夾,以取得詳細資訊。
共用資料夾存取權
存取權會在儲存在 folder.db 中的存取控制清單 (ACL) 中維護。授予存取權的方法是,使用 IMAP 的 SETACL 指令、-s 選項以及 readership 指令行公用程式 (請參閱變更公用資料夾的存取控制權),或使用 Messenger Express 介面來設定 ACL。
ACL 識別碼
每個 ACL 項目都具有一個識別碼,用於指定項目套用的使用者或使用者群組。以破折號 (「-」) 開頭的識別碼代表負面權限 (即不能由使用者或群組使用的權限)。
anyone 是一個特殊的識別碼。anyone 的存取權可套用至所有使用者。同樣,anyone@domain 的存取權可套用至同一網域中的所有使用者。
群組識別碼以 group= 開頭。
ACL 權限字元
每個 ACL 項目均包含一組由字元字串表示的權限。字元字串由 RFC 2086 定義。伺服器將授予該使用者的所有權限及其所屬群組的所有權限加總,再減去不允許該使用者及其所屬群組使用的所有權限,可以計算出使用者的該組權限。
下表列出 Messaging Server 能夠識別的字元,並給出每個字元的名稱及概述,同時還顯示擁有該權限的使用者所允許使用的 IMAP 指令。
群組 ACL
ACL 項目的識別碼可以指定群組名稱。該項目的存取權可套用至該群組的所有成員。伺服器會根據 inetMailUser 物件類別的 aclGroupAddr 屬性來決定群組成員關係。群組可由動態郵件收件人清單表示,並在 aclGroupAddr 屬性上加入一個過濾器即可。以下範例顯示一個定義群組的 LDIF 記錄,包括 aclGroupAddr 屬性:
您無需為群組電子郵件位址建立一個群組,即可在資料夾的 ACL 中使用該位址。實際上,也可以先建立一個動態群組,然後在為該群組新增成員時,再設定使用者項目上的 aclGroupAddr 屬性。一但建立此類群組,就可以使用 mgrpRfc822MailMember 屬性中的電子郵件位址,將靜態外部成員新增至群組。您應避免使用 uniqueMember 屬性,也不要透過建立 memberURL 屬性的附加值來新增成員。這樣做會導致 MTA 的郵件收件人清單成員和 IMAP 伺服器的群組成員之間的連線中斷。
當使用者登入 IMAP 伺服器或以擁有 HTTP 存取權的服務用戶端 (如 Messenger Express) 登入時,伺服器會取回 aclGroupAddr 屬性 (以及其他與郵件儲存相關的屬性),並在記憶體中快取群組名稱。每當用戶端發出需要驗證存取權的指令 (如 LIST 或 SELECT) 時,伺服器將使用該資訊決定使用者的存取權。
共用資料夾作業本節描述共用資料夾管理作業:
建立公用資料夾
由於公用資料夾需要對 LDAP 資料庫的存取權,以及 readership 指令,因此必須由系統管理員建立。
- 新增一個將用作所有公用資料夾容器的 LDAP 使用者項目,例如,一個名為 public 的項目:
dn:cn=public,ou=people,o=sesta.com,o=ISP
objectClass:person
objectClass:organizationalPerson
objectClass:inetOrgPerson
objectClass:inetUser
objectClass:ipUser
objectClass:inetMailUser
objectClass:inetLocalMailRecipient
objectClass:nsManagedPerson
objectClass:userPresenceProfile
cn:public
mail:public@sesta.com
mailDeliveryOption:mailbox
mailHost:manatee.siroe.com
uid:public
inetUserStatus:active
mailUserStatus:active
mailQuota: -1
mailMsgQuota: 100
- 使用 mboxutil 指令行公用程式在公用帳號下建立資料夾。例如:
mboxutil -c user/public/golftournament
- 使用 readership 指令行公用程式為該資料夾設定相應的 ACL。
若要使該資料夾成為公用資料夾,必須為其指定一個可以存取它的使用者群組。您可以透過使用 readership 指令設定 ACL 來完成此作業。如需有關如何設定 ACL 的說明,請參閱後面的變更公用資料夾的存取控制權。
變更公用資料夾的存取控制權
您可能需要經常變更公用資料夾的存取控制權,或需要為新建的公用資料夾設定存取控制權。
若要執行此作業,請使用 readership 指令行公用程式。該指令的格式如下:
readership -s foldername identifier rights_chars
其中,foldername 是您要為其設定權限的公用資料夾名稱,userid 是您要將權限指定給其的使用者或群組,rights_chars 是您要指定的權限 (這些是符合 RFC 2086 的存取權字元)。如需每個字元所代表的意義,請參閱 ACL 權限字元。您也可以使用 Messenger Express 介面來變更公用資料夾的存取控制權。
範例目錄
例如,如果您希望 sesta 網域中的所有人均擁有 golftournament 公用資料夾的查找、讀取以及電子郵件標記 (而不是寄送) 權限,請使用以下指令:
readership -s User/public/golftournament anyone@sesta lwr
如要為群組指定查找、讀取、電子郵件標記和寄送權限,請使用以下指令:
readership -s User/public/golftournament group=golfinterest lwrp
如果您要將該資料夾的管理和寄送權限指定給 jdoe 這個人,請使用以下指令:
readership -s User/public/golftournament jdoe lwrpa
若不允許某個人或某個群組存取公用資料夾,請在 userid 前面加上破折號。例如,若要拒絕授予 jsmith 查找、讀取以及寫入權限,請使用以下指令:
readership -s User/public/golftournament -jsmith lwr
啟用或停用共用資料夾的列示
伺服器會根據配置選項 local.store.sharedfolders 中的設定,決定是否在回應 LIST 指令時傳回共用資料夾。將選項設定為 off 將停用此功能。依預設,該設定處於啟用狀態 (設定為 on)。
SELECT 和 LSUB 指令不受該選項的影響。LSUB 指令會傳回所有已訂閱的資料夾,包括共用資料夾。使用者可以使用 SELECT 指令來選取他們自己的共用資料夾或已訂閱的資料夾。
設定分散式共用資料夾
通常,共用資料夾僅適用於特定郵件儲存中的使用者。但是,Messaging Server 允許您建立可以跨多個郵件儲存進行存取的分散式共用資料夾。也就是說,分散式共用資料夾的存取權可以授予郵件儲存群組中的任何使用者。但請注意,Web 郵件用戶端 (諸如 Messenger Express 之類的 HTTP 存取用戶端) 不支援遠端共用資料夾存取。使用者可以列出和訂閱資料夾,但無法檢視或改變其中的內容。
分散式共用資料夾要求如下:
必須透過設定表格 15-4 中列出的配置變數來將遠端郵件儲存 (是不儲存共用資料夾的郵件儲存) 配置為代理伺服器。
表格 15-4 用於配置分散式共用資料夾的變數
名稱
值
資料格式
local.service.proxy.serverlist
郵件儲存伺服器清單
以空格分隔的字串
local.service.proxy.admin
預設的儲存管理員登入名稱
字串
local.service.proxy.adminpass
預設的儲存管理員密碼
字串
local.service.proxy.admin.hostname
特定主機的儲存管理員登入名稱
字串
local.service.proxy.adminpass.hostname
特定主機的儲存管理員密碼
字串
設定分散式共用資料夾 範例
圖 15-3 顯示三台郵件儲存伺服器的分散式資料夾範例,三台伺服器分別稱為 StoreServer1、StoreServer2 和 StoreServer3。
圖 15-3 分散式共用資料夾 範例
可透過設定表格 15-4 中顯示的變數,將這些伺服器作為同層代理郵件儲存彼此相連。每台伺服器都有一個私人共用資料夾 golf (由 Han 擁有)、tennis (由 Kat 擁有) 和 hurling (由 Luke 擁有)。此外,有兩個分別稱為 press_releases 和 Announcements 的公用共用資料夾。這三個伺服器上的使用者都可以存取這三個共用資料夾。圖 15-2 顯示 Ed 的共用資料夾清單。以下是該配置中每台伺服器的 ACL 範例。
$ StoreServer2 :> readership -l
Jan:user/Kat/tennis
Ann:user/Kat/tennis
anyone:user/public+Announcements user/public+press_releases
$ StoreServer3 :> readership -l
Tuck:user/Ian/hurling
Ed:user/Ian/hurling
Jac:user/Ian/hurling
anyone:user/public/Announcements
監視與維護共用資料夾資料
readership 指令行公用程式可讓您監視與維護 folder.db、peruser.db 和 lright.db 檔案中保留的共用資料夾資料。folder.db 中包含保留有 ACL 副本的每個資料夾的記錄。peruser.db 中包含每個使用者和電子信箱的項目,其中列出各種旗標設定以及使用者存取任何資料夾的最後日期。lright.db 中包含所有使用者及他們有權查找的共用資料夾的清單。
readership 指令行公用程式具有以下選項:
表格 15-5 readership 選項
選項
描述
-d days
為每個共用資料夾傳回一個報告,其中包含在指定天數內選取該資料夾的使用者數目。
-p months
從 peruser.db 中移除在指定月份數中未曾選用共用資料夾的使用者的資料。
-l
列出 lright.db 中的資料。
-s folder_identifier_rights
為指定資料夾設定存取權。它會同時更新 lright.db 和 folder.db。
使用各種選項,您可以執行以下功能:
監視共用資料夾的使用
如果想知道有多少使用者正在存取共用資料夾,請使用以下指令:
readership -d days
其中,days 是要檢查的天數。請注意,此選項會傳回作用中使用者的數目,而不是作用中使用者的清單。
範例:若要找出最近 30 天內選用過共用資料夾的使用者數目,請使用以下指令:
readership -d 30
列出使用者及其共用資料夾
若要列出使用者及其有存取權的共用資料夾,請使用以下指令:
readership -l
輸出範例:
$ readership -l
group=lee-staff@siroe.com:user/user2/lee-staff
richb:user/golf user/user10/Drafts user/user2/lee-staff user/user10/Trash
han1:user/public+hurling@siroe.com user/golf
gregk:user/public+hurling@siroe.com user/heaving user/tennis移除非作用中的使用者
如果您要移除非作用中的使用者 (在指定的一段時間內沒有存取共用資料夾的使用者),請使用以下指令:
readership -p months
其中,months 是要檢查的月份數。
範例:移除在過去六個月中沒有存取共用資料夾的使用者:
readership -p 6
設定存取權
您可以為新的公用資料夾指定存取權,也可以變更目前公用資料夾的存取權。
如需如何使用此指令設定存取權的範例,請參閱變更公用資料夾的存取控制權。
關於郵件儲存配額本節包含以下資訊:
使用者配額
您可以透過指定使用者電子信箱的大小限制,來限制郵件儲存的大小。您可以指定以下類型的配額:
配額資訊將作為 LDAP 屬性和配置變數儲存起來。如果已啟用配額實施功能,則將郵件插入郵件儲存之前,Messaging Server 會檢查配額快取記憶體和配置檔案,以確定配額未發生超額狀況。如果已啟用配額通知,則當使用者的配額已滿時,會收到錯誤訊息。您也可以設定伺服器,讓它在配額即將滿載前向使用者傳送警告郵件。
您可以為所有使用者設定預設配額,也可以為個別使用者設定配額。若要確定使用者的配額是否已經滿載,Messaging Server 會首先檢查是否為個別使用者設定了配額。如果未設定配額,Messaging Server 會再檢查為所有使用者設定的預設配額。
如果使用者的郵件量超出配額,進來的郵件便只能停留在 MTA 佇列中,直至發生以下情況之一:
(1) 使用者郵件的大小或數目降到配額容許的範圍內,此時 MTA 會將郵件遞送給使用者。(2) 未遞送的郵件在 MTA 佇列中停留的時間超出了指定的寬限期。請參閱設定寬限期。
當使用者刪除並永久刪除郵件時,或伺服器根據您建立的時效策略刪除郵件時,磁碟空間會再度釋放出來。
網域配額
您也可以使用 imquotacheck -f 指令為特定網域設定配額。當網域的配額滿載時,maildomainstatus 屬性會設定為 overquotam,這將阻止任何郵件被遞送至該網域。如果網域不是 overquota,則該值會設定為 active。
電話應用程式伺服器的例外
為了使郵件傳送需求一致,Messaging Server 提供一種特殊功能,可以置換郵件儲存施加的配額限制。這可確保遞送某些代理程式 (即電話應用程式伺服器 [TAS]) 接受的郵件。由 TAS 接受的郵件可路由通過特殊的 MTA 通道,以確保郵件被遞送至儲存中,而不受配額的限制。如需有關配置 TAS 通道的更多資訊,請參閱第 10 章「配置通道定義」。
配置郵件儲存配額可以使用 Sun ONE 主控台或 configutil 指令來為所有使用者設定預設配額。您還可以為個別使用者、家族群組以及託管網域設定配額。
本節描述以下作業:
如果您要使用主控台:
指定預設使用者配額
預設配額會套用至尚未設定個別配額的使用者。為個別使用者設定的配額將置換預設配額。
configutil -o store.defaultmailboxquota -v [ -1 | number ]
其中,-1 表示無配額;number 表示位元組的數目。
若要為郵件總數指定預設使用者配額:
configutil -o store.defaultmessagequota -v [ -1 | number ]
其中,-1 表示無配額;number 表示郵件的數目。
啟用配額限制和通知
您可以啟用或停用配額實施和配額通知。伺服器採取的動作視這些配置變數的設定而定,如表格 15-6 中所示。
表格 15-6 配額實施和通知
實施開啟
實施關閉
通知 開啟郵件會依指定的寬限期擱置一段時間;如果寬限期已過,將拒絕該郵件。郵件無法附加至電子信箱。
IMAP SELECT、IMAP APPEND、SMTP 傳送郵件機制和遞送指令將顯示錯誤訊息。
郵件被遞送至儲存。郵件可附加至電子信箱。
IMAP SELECT、IMAP APPEND、SMTP 傳送郵件機制和遞送指令不會顯示錯誤訊息。
通知關閉
郵件會依指定的寬限期擱置一段時間;如果寬限期已過,將拒絕該郵件。郵件無法附加至電子信箱。
IMAP SELECT 指令、遞送指令和 SMTP 傳送郵件機制不會顯示錯誤訊息。
IMAP APPEND 指令將顯示錯誤訊息。
郵件被遞送至儲存。郵件可附加至電子信箱。
IMAP SELECT、IMAP APPEND、SMTP 傳送郵件機制和遞送指令不會顯示錯誤訊息。
啟用配額實施
configutil -o store.quotaenforcement -v [ on | off]
若要拒絕會讓郵件儲存超出配額的郵件:
configutil -o local.store.quotaoverdraft -v off
若要在超出配額後才啟動配額實施 (即先允許導致郵件儲存超出配額的郵件進入,然後再啟動配額實施),請將上述值設定為 on。預設為 off。
啟用配額通知
- 按一下 [配額] 標籤。
- 核取 [啟用配額通知] 方塊。
此方塊用於進行切換。若要停用配額通知,只需取消核取此方塊即可。
- 定義配額警告郵件
請參閱定義配額警告郵件。
- 按一下 [儲存]。
configutil -o store.quotanotification -v [ yes | no ]
configutil -o store.quotaexceededmsg -v message如果未設定郵件,則將不會向使用者傳送配額警告郵件。請參閱下一節,以取得配額警告郵件格式的範例。
定義配額警告郵件
您可以使用以下方法定義將傳送給超額使用者的郵件。郵件會傳送至使用者的電子信箱。
configutil -o store.quotaexceededmsg -v message
該郵件的格式必須符合 RFC 822 的規定。它必須包含一個標頭 (至少包含一個主旨行),之後是 $$,然後是郵件內文。「$」表示新的一行。範例:
configutil -o store.quotaexceededmsg -v ‘Subject: 警告:使用者配額已超出$$使用者配額已超出臨界值 - 請清理使用的空間。’
若要定義傳送警告郵件的間隔時間:
configutil -o store.quotaexceededmsginterval -v number
其中,number 表示天數。例如,3 表示每 3 天傳送一次郵件。
指定配額臨界值
透過指定配額臨界值,您可以在使用者超額之前將警告郵件傳送給 IMAP 使用者。當使用者的磁碟使用率超出指定的臨界值時,伺服器便會向使用者傳送警告郵件。
對於其用戶端支援 IMAP ALERT 機制的 IMAP 使用者,每當使用者選取一個電子信箱時,其郵件就會顯示在使用者的螢幕上 (同時還將郵件寫入 IMAP 日誌)。
configutil -o store.quotawarn -v number
其中,number 表示所允許配額的百分比。
設定寬限期
寬限期指定電子信箱滿載 (磁碟空間或郵件數目) 後,要隔多久才會將郵件退回給寄件者。郵件由 MTA 接受,但是它會停留在 MTA 佇列中而不遞送給郵件儲存,直至發生以下狀況之一:
例如,如果您的寬限期設定為兩天,而您已超額一天,則系統將繼續接收新郵件並將其保留在郵件佇列中,並且會繼續嘗試遞送郵件。但是兩天以後,新郵件將被退回。
註
寬限期並不是郵件將保留在郵件佇列中的時間,而是電子信箱超額的時間,超出這個時間限制之後,所有進來的郵件 (包括郵件佇列中的郵件) 均會被退回。當使用者達到配額臨界值 (請參閱指定配額臨界值) 並收到警告後,寬限期便開始計時。
configutil -o store.quotagraceperiod -v number
其中,number 表示小時數。
設定自動移除郵件 (過期和清除) 功能自動移除郵件功能 (也稱為過期和清除) 會根據一組管理員定義的條件,自動將郵件從郵件儲存中移除。該功能可自動移除過時或過大的郵件、已讀取/刪除的郵件以及具有特定 Subject: 行的郵件等。此功能允許使用以下移除條件:
此功能由 imexpire 公用程式執行,它可永久刪除並清除郵件。請參閱郵件儲存如何移除郵件,以取得有關郵件移除程序的詳細資訊。
imexpire 的運作原理
您可以使用指令行呼叫 imexpire,或藉由 imsched 常駐程式進行排程以自動執行它。管理員可以使用主控台或 configutil 指令行公用程式來配置全域過期規則 (即用於整個郵件儲存的規則)。本地過期規則 (套用至資料夾或使用者的規則) 可透過在郵件儲存分割區、使用者或電子信箱目錄下建立過期規則檔案 (store.expire) 來配置。
imexpire 會在系統啟動時載入所有過期規則。依預設,imexpire 會為每個分割區建立一個執行緒。每個執行緒會將其指定分割區內的使用者資料夾清單掃過一遍,然後載入本地過期規則檔案。過期功能會根據適用於資料夾的過期規則來檢查每個資料夾,並依需要永久刪除郵件。如果電子信箱目錄下存在 store.exp 檔案,並且其中的已永久刪除/過期郵件超過了 store.cleanupage 配置參數指定的時間,則清除功能會將郵件雜湊目錄下的郵件檔案永久移除,並將使用者 ID 記錄從 store.exp 檔案中移除。
佈署自動移除郵件功能
您可以使用指令行或主控台 GUI 來部署自動移除郵件功能。該程序需要三個步驟:
- 定義自動移除郵件的策略:哪些郵件將被自動移除?哪些使用者、網域及分割區可以自動移除郵件?哪些大小、郵件存在時間及標頭將定義移除條件?請參閱定義自動移除郵件的策略。
- 指定實施此策略的 imexpire 規則。請參閱設定實施自動移除郵件策略的規則。
- 指定 imexpire 排程。請參閱排程自動移除郵件和記錄級別。
定義自動移除郵件的策略
請透過指定用於移除的條件來定義您的自動移除郵件策略。imexpire 允許使用以下條件執行移除:
郵件的存在時間。自動移除超過 X 天的郵件。屬性:messagedays。
郵件計數。自動移除超出 X 封郵件的資料夾中的郵件。屬性:messagecount。
超出大小限制的郵件的存在時間。在 Y 天寬限期之後自動移除超過 X 位元組的郵件。屬性:messagesize 和 messagesizedays。
Seen 和 Deleted 郵件旗標。自動移除已設定 Seen 或 Deleted 旗標的郵件。這些條件可以設定為「and」或「or」。如果設定為 or,則郵件的 Seen/Delete 旗標將不管其他條件而執行自動刪除。如果設定為 and,則郵件的 Seen/Delete 旗標必須設定為同時滿足其他所有指定的條件。屬性:seen 和 deleted。
郵件的標頭欄位。可讓您指定標頭和字串作為移除郵件的條件。例如,移除標頭中含有「Subject: Work from Home!」的所有郵件。
郵件資料夾。可讓您指定要移除其中郵件的資料夾。屬性:folderpattern
自動移除郵件策略的範例
範例 1:在超過 1,000 封郵件的資料夾中,移除所有已存放 365 天以上的郵件。
範例 2:移除 siroe.com 網域中已存放 180 天以上的郵件。
範例 3:移除所有已標記為 deleted 的郵件。
範例 4:移除符合以下條件的郵件:位於 sesta.com 網域中、已標記為 seen、已存放 30 天以上、容量超過 10 萬位元組、所在的資料夾包含 1,000 封以上的郵件以及標頭為 X-spam。
設定實施自動移除郵件策略的規則
若要實施前一節中定義的自動移除郵件策略,您必須設定 imexpire 規則。可以用以下方式設定規則:
- 透過 GUI (請參見圖 15-4)
- 透過設定 store.expirerule.attribute configutil 參數
在此範例中,Rule 1 指定回收筒資料夾中的所有郵件將在兩天後被移除。Rule 2 指定郵件儲存中的所有郵件將在 14 天後被移除。
過期規則指南
本節設定用於 store.expirerule.attribute configutil 參數和 store.expirerule 檔案規則的指南。
- 您可以在名為 store.expirerule 的檔案中指定規則,或使用 configutil 參數 store.expirerule.rulename.attribute 來指定規則。
- 多個過期條件可使用相同的規則指定。(請參閱上面的範例。)
- 規則可以套用至整個郵件儲存 (全域規則)、郵件儲存分割區、使用者或資料夾。非全域規則僅可透過 store.expirerule 規則來建立。
- 多個過期規則可同時套用至一個電子信箱。電子信箱的過期策略由全域規則和本地規則組成。本地規則可套用至某個目錄及其所有子資料夾下的電子信箱。
- imexpire 可結合所有套用至電子信箱的過期規則,除非另有為該電子信箱指定的額外規則 (請參閱表格 15-7)。結果規則集會根據所有適用的規則,總結出最嚴格的過期策略。例如,如果規則 X 規定最長郵件時限是 10 天,規則 Y 指定的卻是 5 天,則結合兩者得出的規則將是 5 天。
表格 15-7 imexpire 屬性
屬性
描述 (屬性值)
exclusive
指定此規則是否為專用規則。如果指定為 exclusive,則僅此規則會套用至指定的電子信箱,所有其他的規則將被忽略。如果存在一個以上的專用規則,則將使用最後載入的專用規則。例如,如果全域專用規則和本地專用規則均已指定,則將使用本地規則。如果有一個以上的全域專用規則,則使用 configutil 列出的最後一個全域規則。(yes/no)
folderpattern
指定受此規則影響的資料夾。格式必須以 user/ 開頭,它代表目錄 store_root/partition/*/。請參閱圖 15-4 和表格 15-8。(POSIX 常規表示式)
messagecount
資料夾中郵件的最大數目。隨著其他郵件被遞送,最舊的郵件會被永久刪除。(整數)
foldersize
在遞送其他郵件時,最舊的郵件被永久刪除之前的資料夾空間上限。(以位元組為單位的整數)
messagedays
郵件在被永久刪除之前的存在時間 (以天為單位)。(整數)
messagesize
郵件被標記為已永久刪除的大小上限 (以位元組為單位)。(整數)
messagesizedays
寬限期。超出大小限制的郵件保留在資料夾中的天數。(整數)
郵件標頭欄位
指定將郵件標記為移除的標頭欄位和字串。值不區分大小寫,並且不識別常規表示式。
範例:Rule1.Subject:Get Rich Now!對於標頭 Expires 和 Expiry-Date,如果在這些標頭欄位中指定的日期值早於 messagedays 屬性所對應的日期,則 imexpire 將移除郵件。如果指定多個過期標頭欄位,則將使用最早的過期日期。(字串)。
regexp
建立規則時啟用 UNIX 常規表示式。(1 或 0)
seen
seen 是當使用者開啟郵件時,由系統設定的郵件狀態旗標。如果將屬性 seen 設定為 and,則郵件必須已讀取並且必須滿足其他條件,才能實施此規則。如果將屬性 seen 設定為 or,則郵件只需被讀取或滿足其他條件,即可實施此規則。(and/or)。
deleted
deleted 是當使用者刪除郵件時,由系統設定的郵件狀態旗標。如果將屬性 deleted 設定為 and,則郵件必須被刪除並且必須滿足其他條件,才能實施此規則。如果將屬性 deleted 設定為 or,則郵件只需被刪除或滿足其他條件,即可實施此規則。(and/or)。
以文字形式設定 imexpire 規則
自動移除郵件規則可透過使用 configutil 參數 store.expirerule.rulename.attribute,或在 store.expirerule 檔案中指定規則來以文字形式設定。
store.expirerule 檔案中的每一行都包含一個過期條件。全域規則配置檔案 (msg_svr_base/data/store/store.expirerule) 過期條件的格式如下:
rule_name.attribute:value
程式碼範例 15-1 顯示的是 msg_svr_base/config/store.expirerule 中的一組過期規則。
Rule 1 設定全域過期策略 (即套用至所有郵件的策略),內容如下:
Rule 2 為 siroe.com 託管網域中的使用者設定自動郵件移除策略。它限制電子信箱的容量不得超過 1 兆位元組,移除已刪除的郵件,並移除超過 14 天的郵件。
Rule 3 為使用者 f.dostoevski 的 inbox 資料夾中的郵件設定自動移除郵件策略。它會移除主旨行中包含「On-line Casino」字樣的郵件。
程式碼範例 15-1 imexpire 規則的範例
Rule1.regexp: 1
Rule1.folderpattern:user/.*
Rule1.messagesize: 100000
Rule1.messagesizedays: 3
Rule1.deleted:or
Rule1.Subject:Viagra Now!
Rule1.Subject:XXX Porn!
Rule1.messagecount: 1000
Rule1.messagedays: 365
Rule2.regexp: 1
Rule2.folderpattern:user/.*@siroe.com/.*
Rule2.exclusive:yes
Rule2.deleted:or
Rule2.messagedays: 14
Rule2.messagecount: 1000
Rule3.folderpattern:user/f.dostoevski/inbox
Rule3.Subject:*On-line Casino*
請注意,相同的全域過期策略也可以用 configutil 來設定:
% configutil store.expirerule.rule1.regexp 1
% configutil store.expirerule.rule1.messagesizedays 3
% configutil store.expirerule.rule1.deleted or
% configutil store.expirerule.rule1.Subject Viagra Now!
% configutil store.expirerule.rule1.Subject XXX Porn!
% configutil store.expirerule.rule1.messagecount 1000
% configutil store.expirerule.rule1.messagedays 365
% configutil store.expirerule.rule1.messagesize 100000設定 imexpire 資料夾型樣
資料夾型樣可使用 POSIX 常規表示式指定。格式必須以 user/ 開頭,它代表目錄 store_root/partition/*/ (表格 15-8 顯示各種資料夾的型樣)。
表格 15-8 imexpire 資料夾型樣
資料夾型樣
範圍
user/userid/.*
將規則套用至 userid 下所有資料夾中的所有郵件。
user/userid/Sent
將規則套用至 userid 下 Sent 資料夾中的郵件:
user/.*
將規則套用至全部郵件儲存。
user/.*/trash
將規則套用至所有使用者的 trash 資料夾。
user/.*@siroe.com/.*
將規則套用至寄存網域 siroe.com 中的資料夾:
user/[^@]*/.*
將規則套用至預設網域中的資料夾。
user/partition_name/.*
將規則套用至特定分割區。
使用主控台設定自動移除郵件規則
- 請依以下順序叫出自動移除郵件 GUI:
主控台 > 伺服器群組 > Messaging Server (開啟) > Messaging Server 主控台 > [配置] 標籤 > 郵件儲存 > 過期/清除 > 新增
圖 15-4 中顯示一個 GUI 的簡圖。
圖 15-4 自動移除郵件 (過期/清除) GUI 簡圖
- 輸入新規則的名稱。
- 輸入將從中自動移除郵件的資料夾。
請參閱前面設定 imexpire 資料夾型樣。
- 對於符合指定條件的資料夾來說,如果此規則為專用規則,請核取 [專用] 方塊。
如果核取此方塊,則此規則的優先順序將高於符合指定型樣的其他所有規則。請參閱表格 15-7,以取得有關 [專用] 核取方塊的詳細資料。
- 若要根據資料夾大小建立規則,請執行以下動作:
- 若要根據郵件存在時間建立規則,請核取 [郵件存在時間限制] 核取方塊:
在 [天數] 欄位中,指定郵件保留在資料夾中的時間 (以天為單位)。
- 若要根據郵件大小建立規則:
- 若要根據是否已設定 Seen 或 Deleted 郵件旗標來建立規則:
- 若要根據標頭欄位及它們的值建立規則:
- 按一下 [確定] 以將新規則加入 [自動移除郵件] 清單。
排程自動移除郵件和記錄級別
自動移除郵件功能由 imsched 排程常駐程式啟動。依預設,imsched 會在每天晚間 23:00 時呼叫 imexpire,藉以永久刪除並清除郵件。此排程可透過設定表格 15-9 中描述的三個 configutil 參數 (local.schedule.expire、local.schedule.purge 和 store.cleanupage) 來自訂。
對於大型郵件儲存來說,過期清除作業可能會耗時甚久,因此您也許會想要先測試一下全程所花的時間,以便決定多久執行一次這些程序。例如,如果過期/清除循環需耗時 10 小時,則預設的每日執行一次過期清理也許就不太合適。您可以使用 local.schedule.purge 來指定清理的單獨排程,以便排程過期清除。如果未設定 local.schedule.purge,則 imexpire 將在郵件過期後直接執行清除。
表格 15-9 過期和清除 configutil 日誌和排程參數
參數
描述
local.schedule.expire
執行 imexpire 的間隔時間。格式與 UNIX 的 crontab 格式相同:
minute hour day-of-month month-of-year day-of-week數值均以空格或定位鍵分隔,其範圍可以是 0 - 59、0 - 23、1 - 31、1 - 12 或 0 - 6 (0 = 星期日)。每個時間欄位都可以填入星號 (代表所有合法數值)、一列以逗號分隔的數值,或是範圍 (兩個以破折號連接的數值)。請注意,此處的日期可以用月份中的日期或每週第幾日的格式來指定,但是這兩者通常不一起使用,因為某日剛好又是星期幾的機率甚低。如果指定了這兩種格式,則必須在兩者都符合時才會執行作業。例如,設定為每月 17 日及星期二執行,則這兩個值必須均符合時才會執行作業。
間隔時間範例:
1) 在中午 12:30、上午 8:30 和下午 4:30 執行 imexpire:
30 0,8,16 * * *2) 在每個工作日的清晨 3:15 執行 imexpire:
15 3 * * 1-53) 僅在每週一執行 imexpire:
0 0 * * 1預設值: 0 23 * * *
local.schedule.purge
執行 purge 的間隔時間。格式與 UNIX 的 crontab 格式相同:
minute hour day-of-month month-of-year day-of-week。預設值:0 0,4,8,12,16,20 * * * /opt/SUNWmsgsr/lib/purge -num=5
(每四小時一次。)store.cleanupage
已過期或已永久刪除郵件的存在時間 (以小時為單位),期滿後 purge 將永久移除此郵件。
預設值:無
local.store.expire.loglevel
指定記錄級別:
1 = 記錄整個過期階段作業的摘要。
2 = 為每個過期的電子信箱記錄一則訊息。
3 = 為每封過期的郵件記錄一則訊息。預設: 1
使用主控台進行排程的 imexpire
請依以下順序叫出自動移除郵件 GUI:
主控台 > 伺服器群組 > Messaging Server (開啟) > Messaging Server 主控台 > [配置] 標籤 > 郵件儲存 > 過期/清除
此主控台頁面在開始時列出過期規則,而以過期與清除排程結尾。若要排程過期清除,請使用 [過期/清除排程] 中的下拉式功能表,為過期和清除作業設定執行的月份、日期、星期幾 (0 = 星期日) 以及時間。
註
日期可以用當月第幾日或是星期幾來設定。如果兩者均有設定,則這兩個條件都必須滿足。若您設定了每週第 3 天 (星期三) 以及每月 17 日,則過期/清除作業將僅在當月 17 日又剛好是星期三時執行。
設定 imexpire 記錄級別
imexpire 將在作業完成後將摘要記錄到預設的日誌檔案中。如果您從指令行呼叫過期,則可以使用 -v (冗長) 和 -d (除錯) 選項來指示 imexpire 將詳細的狀態/除錯訊息記錄到 stderr 中。如果 imexpire 是由 imsched 呼叫執行,則可以將 configutil 的參數 local.store.expire.loglevel 設定為 1、2 或 3,以執行不同級別的記錄。記錄級別 1 是預設值,它將記錄整個過期階段作業的摘要。記錄級別 2 將為每個過期的電子信箱記錄一則訊息。記錄級別 3 將為每個過期的郵件記錄一則訊息。
配置郵件儲存分割區電子信箱儲存在郵件儲存分割區中,郵件儲存分割區是磁碟分割區中專用於儲存郵件儲存的一個區域。郵件儲存分割區與磁碟分割區不同,但為便於維護,建議您為每個郵件儲存分割區配置一個磁碟分割區和一個檔案系統。郵件儲存分割區其實就是特別指定為郵件儲存的目錄。
依預設,使用者電子信箱儲存在 store_root/partition/ 目錄中 (請參見圖 15-1)。partition 目錄是一個邏輯目錄,其中可能包含一個或多個分割區。在系統啟動時,partition 目錄包含一個稱為 primary 的子分割區。
您可以依需要將分割區加入 partition 目錄。例如,您可能要分割單一磁碟以組織使用者,方法如下:
store_root/partition/mkting/
store_root/partition/eng/
store_root/partition/sales/隨著磁碟儲存需求的增加,您可能要將這些分割區對映到其他實體磁碟機上。
您應限制任一磁碟上的電子信箱數目。將電子信箱分配到多個磁碟上,可以縮短郵件遞送時間 (雖然這不一定能改善 SMTP 的接收比率)。您分配給每個磁碟的電子信箱數目,將視磁碟容量和分配給每個使用者的磁碟空間容量而有所不同。例如,如果您為每個使用者分配的磁碟空間較少,則每個磁碟上可以分配較多的電子信箱。
如果您的郵件儲存需要多個磁碟,則可以使用 RAID (廉價磁碟冗餘陣列) 技術來簡化多重磁碟的管理。藉由 RAID 技術的協助,您可以將資料分散到一組磁碟上,但是這些磁碟看起來卻像是一個邏輯容體,因此可以簡化磁碟的管理。您可能還需要 RAID 技術的備援功能;即,它可以複製儲存,以便在故障回復時進行資料復原。
新增分割區
新增分割區時,您應指定分割區在磁碟上的絕對實體路徑以及邏輯名稱 (稱為分割區別名)。
您可以使用分割區別名來對映使用者與邏輯分割區的名稱,而不必採用實體路徑。設定使用者帳號以及為使用者指定郵件儲存時,您可以使用分割區別名。您輸入的名稱必須是字母數字名稱,並且必須是小寫字母。
若要建立和管理分割區,用於執行伺服器的使用者 ID 必須有權將資料寫入實體路徑中指定的位置。
configutil -o store.partition.nickname.path -v path
其中,nickname 是分割區的邏輯名稱,path 是分割區所在的絕對路徑名稱。
若要指定預設主分割區的路徑:
configutil -o store.partition.primary.path -v path
將電子信箱移至其他磁碟分割區
依預設,電子信箱均在 primary 分割區中建立。如果此分割區已滿,將無法儲存額外的郵件。解決此問題的方法有以下幾種:
- 減少使用者電子信箱的容量
- 如果您要使用容體管理軟體,請加裝額外的磁碟
- 建立額外分割區 (新增分割區) 並將電子信箱移至新分割區
如果可能,建議您使用容體管理軟體為系統增加額外的磁碟空間,因為對使用者來說,此程序是最簡單的方法。但是,您可能還需要執行以下作業,將電子信箱移至其他分割區:
- 確定在轉移過程中不會有使用者連線至電子信箱。要做到這一點,可以先通知使用者登出,並在移動電子信箱期間保持離線狀態;或設定 mailAllowedServiceAccess 屬性,以便在使用者登出後暫停 POP、IMAP 和 HTTP 服務。(請參閱「Sun ONE Messaging Server Schema Reference Manual」。)
- 使用以下指令來移動使用者電子信箱:
mboxutil -r user/<userid>/INBOX user/<userid>/INBOX <partition_name>
範例:
mboxutil -r user/ofanning/INBOX user/ofanning/INBOX secondary
- 將被移動使用者的 LDAP 項目中的 mailMessageStore 屬性設定為新分割區的名稱。
範例:mailMessageStore:secondary
- 通知使用者已允許進行郵件儲存連線。如果適用,將 mailAllowedServiceAccess 屬性變更為允許 POP、IMAP 和 HTTP 服務。
執行郵件儲存的維護程序本節提供有關您維護和回復郵件儲存所使用的公用程式的資訊。您應經常閱讀 Postmaster 傳送的郵件,以便及時掌握伺服器傳送的警告和警示。您還應該監視日誌檔,以取得有關伺服器執行的資訊。如需有關日誌檔的更多資訊,請參閱第 17 章「記錄和日誌分析」。
本節包含以下內容:
管理電子信箱
本節描述以下管理和監視電子信箱的公用程式:mboxutil、hashdir 和 readership。
mboxutil 公用程式
您可以使用 mboxutil 指令在電子信箱上執行一般維護作業。請注意,您不應在執行過程中終止 mboxutil 程序。如果此程序被 SIGKILL (kill -9) 終止,則可能需要重新啟動每台伺服器,並執行回復作業。
mboxutil 的作業包括:
您還可以使用 mboxutil 指令來檢視有關配額的資訊。如需更多資訊,請參閱監視配額限制。
表格 15-10 列出各種 mboxutil 指令。如需詳細的語法及使用需求,請參閱「Messaging Server Reference Manual」。
表格 15-10 mboxutil 選項
選項 描述
-a
列出所有的使用者配額資訊。
-c mailbox
建立指定的電子信箱。
-d mailbox
刪除指定的電子信箱。
-f file
建立、刪除或鎖定指定資料檔案中列出的電子信箱。
-k mailbox cmd
在資料夾級別鎖定指定的電子信箱;執行指定的指令;在指令完成後解除鎖定電子信箱。
-l
列出伺服器上所有的電子信箱。
-p pattern
與 -l 選項一起使用時,將僅列出名稱符合 pattern 的電子信箱。您可以使用 POSIX 常規表示式。
-q domain
列出指定網域的配額資訊。
-r oldname newname
[partition]將電子信箱從 oldname 重新命名為 newname。若要在分割區之間移動資料夾,請使用 partition 選項指定新的分割區。
此選項亦可用於重新命名使用者。例如,mboxutil -r user/user1/INBOX user/user2/INBOX 會將所有的郵件和電子信箱從 user1 移到 user2,並且新郵件將顯示在新的 INBOX 中。(如果 user2 已經存在,此作業將失敗。)
-u user
列出使用者資訊,如郵件儲存的目前容量、配額 (如果已設定) 以及已使用的配額百分比等。
-x
當與 l 選項一起使用時,將顯示電子信箱的路徑和存取控制。
電子信箱命名慣例
您必須以下列格式指定電子信箱名稱:user/userid/mailbox,其中,userid 是擁有電子信箱的使用者,mailbox 是電子信箱的名稱。對於託管網域,userid 是 uid@domain。
例如,以下指令將為 ID 是 crowe 的使用者建立名為 INBOX 的電子信箱。INBOX 是傳送至使用者 crowe 的郵件的預設電子信箱。
mboxutil -c user/crowe/INBOX
重要事項:名稱 INBOX 將保留為每個使用者的預設電子信箱。INBOX 是唯一不區分大小寫的資料夾名稱。所有其他的資料夾名稱均區分大小寫。
範例目錄
若要列出所有使用者的所有電子信箱:
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
若要為使用者 dulcinea 鎖定名為 legal 的郵件資料夾:
mboxutil -k user/dulcinea/legal cmd
其中,cmd 是您要在資料夾鎖定時執行的指令。
若要將使用者 dimitria 的郵件帳號移至新分割區:
mboxutil -r user/dimitria/INBOX user/dimitria/INBOX partition
其中,partition 指定新分割區的名稱。
若要將使用者 dimitria 的 personal 郵件資料夾移至新分割區:
mboxutil -r user/dimitria/personal user/dimitria/personal partition
hashdir 公用程式
郵件儲存中的電子信箱以雜湊結構儲存,以便快速搜尋。因此,若要搜尋包含特定使用者電子信箱的目錄,請使用 hashdir 公用程式。
此公用程式可識別包含特定帳號的郵件儲存的目錄。它還可報告郵件儲存的相對路徑,如 d1/a7/。此路徑與以使用者 ID 為名的目錄級別有關。公用程式會將路徑資訊傳送至標準輸出。
例如,若要為使用者 crowe 找出電子信箱的相對路徑:
hashdir crowe
readership 公用程式
readership 公用程式可報告有多少使用者 (電子信箱所有者除外) 閱讀過共用 IMAP 資料夾中的郵件。
IMAP 資料夾的所有者可以允許其他人讀取資料夾中的郵件。允許其他人存取的資料夾稱為共用資料夾。管理員可以使用 readership 公用程式來查看有多少使用者 (所有者除外) 在存取共用資料夾。
此公用程式會掃描所有的電子信箱,並為每個共用資料夾產生一行輸出資料,用於報告讀者數目 (後跟空格) 和電子信箱的名稱。
每個讀者都是獨立的認證個體,他們都在過去的指定天數內選取過共用資料夾。但是讀取個人電子信箱的使用者不會算作讀者之一。此公用程式不會報告個人電子信箱的閱讀狀況,除非至少有一個資料夾所有者以外的人在閱讀。
例如,以下指令會將過去 15 天中選取過共用 IMAP 資料夾的任何人都算作讀者:
readership -d 15
監視配額限制
您可以使用 mboxutil 公用程式監視配額的使用率和限制。mboxutil 公用程式將產生一個報告,列出定義的配額和限制,並提供有關配額使用率的資訊。配額和使用率圖表以千位元組為單位報告。
例如,以下指令將列出所有使用者配額資訊:
mboxutil -a
以下範例列出使用者 crowe 的配額資訊:
mboxutil -u crowe
以下範例列出網域 siroe.com 的配額資訊:
mboxutil -q siroe.com
監視磁碟空間
您可以指定系統監視磁碟空間的頻率,以及在何種情況下傳送警報。若要配置磁碟空間監視和通知,您可以使用 configutil 指令設定警報空間屬性,這些屬性在表格 15-11 中有描述。
表格 15-11 磁碟空間警報屬性
磁碟空間屬性
預設值
alarm.diskavail.msgalarmstatinterval
3600 秒
alarm.diskavail.msgalarmthreshold
10%
alarm.diskavail.msgalarmwarninginterval
24 小時
例如,如果您希望系統每 600 秒監視一次磁碟空間,請指定以下指令:
configutil -o alarm.diskavail.msgalarmstatinterval -v 600
如果您希望在可用磁碟空間低於 20% 時收到警告,請指定以下指令:
configutil -o alarm.diskavail.msgalarmthreshold -v 20
如需有關設定警報屬性的更多資訊,請參閱「Messaging Server Reference Manual」和監視磁碟空間。
使用 stored 公用程式
stored 公用程式可為伺服器執行以下監視和維護作業:
- 後台作業和日常郵件傳送作業。
- 死結偵測和死結資料庫異動回轉。
- 在啟動時清除暫存檔。
- 實施時效策略。
- 定期監視伺服器狀態、磁碟空間和服務回應時間等 (請參閱 stored)。
- 在必要時發出警報。
- 依需要回復資料庫 (請參閱郵件儲存的啟動與回復)。
stored 公用程式在每天晚上 11 點鐘自動執行清除和過期作業。您可以選擇執行額外的清除和過期作業。
表格 15-12 列出部分 stored 選項。表格後還隨附有一些常用範例。如需詳細的語法及使用需求,請參閱「Messaging Server Reference Manual」。
表格 15-12 stored 選項
選項 描述
-d
棄用。使用 start-msg store 來啟動 stored,使之作為常駐程式執行,用於執行系統檢查並啟動警報、死結偵測和資料庫修復。
-t
檢查 stored 的狀態。此指令的回覆碼可表示狀態。
-v
冗長輸出。
-v -v
更加冗長的輸出。
若要列印狀態,請輸入:
stored -t -v
如果您要變更自動清理和過期作業的時間,請按以下方法使用 configutil 指令:
configutil -o store.expirestart -v 21
有時,您可能需要重新啟動 stored 公用程式;例如,在電子信箱清單資料庫損毀的情況下。若要在 UNIX 上重新啟動 stored,請在指令行使用以下指令:
msg_svr_base/sbin/stop-msg store
msg_svr_base/sbin/start-msg store如果有任何伺服器常駐程式當機,您必須停止所有的常駐程式,然後再重新啟動它們,包括 stored。
備份和復原郵件儲存郵件儲存的備份和復原是最常用、最重要的管理作業之一。它涵蓋了郵件儲存中所有郵件和資料夾的備份。您必須為自己的郵件儲存實施備份和復原策略,以確定在以下問題發生時不會遺失資料:
您可以使用指令行公用程式 imsbackup 和 imsrestore,或是使用 Legato Networker® 的整合解決方案來執行郵件儲存的備份和復原。
Messaging Server 提供單一的備份程序。不管特定郵件同時為多少個使用者資料夾所共同持有,在備份時只會使用第一個找到的郵件檔案來製作一個備份。第二個郵件副本將只會以第一個郵件檔案名稱的連結做備份,以下亦同。imsbackup 會保留所有郵件的雜湊表,其中以郵件檔案的裝置和 I 節點作為索引。但是,此方法在復原資料時還有一些額外功能。如需更多資訊,請參閱部分復原的考量。
本節包含以下小節:
建立電子信箱的備份策略
您的備份策略將視多種因素而定,如:
業務尖峰負荷
由於備份會降低系統在尖峰時刻的負荷,因此當您為系統排程備份時,需要將業務尖峰時的負荷納入考量。例如,最好將備份排程到清晨執行,如清晨 2:00。
完整備份和增量備份
增量備份將掃描儲存中已變更的資料,然後僅備份變更的部分。完整備份將備份整個郵件儲存。您需要決定系統要多久執行一次完整備份或增量備份。您可能想將增量備份作為每日維護程序的一部分執行,而完整備份需要每週執行一次。
平行或串列備份
當使用者資料儲存在多個磁碟上時,您可以平行方式隨意備份使用者群組。根據系統資源,平行備份可以加快整個備份程序的速度。但是,如果您想儘量減少備份對系統效能的影響,則串列備份也許比較合適。平行備份與串列備份之間的抉擇受許多因素影響,包括系統負荷、硬體配置以及有多少磁帶機可用等。
建立備份群組
備份群組是由常規表示式定義的任意一組使用者電子信箱。將使用者電子信箱歸類為備份群組後,您便可以更加靈活地管理備份。
例如,您可以建立三個備份群組,第一個群組包含的使用者 ID 都是以從 A 到 L 之間的字母開頭,第二個群組包含的使用者 ID 則是以從 M 到 Z 之間的字母開頭,第三個群組包含的使用者 ID 都是以數字開頭。管理員可以使用這些備份群組以平行方式備份電子信箱,或是一天只備份某幾個群組,其他群組則改日再備份。
請注意幾個關於備份群組的事項:
- 它們是由郵件使用者任意組成的虛擬群組。雖然看起來是對映的,但它們與郵件儲存的目錄沒有精確的對映關係 (圖 15-1)。
- 它們是由管理員使用 UNIX 常規表示式定義的。
- 常規表示式定義在配置檔案
msg_svr_base/config/backup-groups.conf 中。- 當 imsbackup 與 imsrestore 參閱備份群組時,它們使用的路徑格式是:/partition_name/backup_group
backup-groups.conf 的格式如下:
使用前段所述的範例,以下定義將用於建立三個備份群組:
現在,您可以在幾個級別上查看 imsbackup 和 imsrestore。您可以使用備份指令來備份/復原整個郵件儲存:
imsbackup -f device /
若要備份 groupA 中所有使用者的全部電子信箱,請使用以下指令:
imsbackup -f device /partition/groupA
預設分割區名為 primary。
預先定義的備份群組
Messaging Server 包含一個預先定義的備份群組,您不需要為其建立 backup-groups 配置檔案。該群組名為 user;它包含所有使用者。例如,下面將備份 primary 分割區上的所有使用者:
imsbackup -f backupfile /primary/user
Messaging Server 的備份和復原公用程式
若要備份和復原資料,Messaging Server 可提供 imsbackup 和 imsrestore 這兩種公用程式。請注意,imsbackup 和 imsrestore 公用程式並不具備像 Legato Networker 那樣的進階功能。例如,這些公用程式對自動更換磁帶裝置的支援就很有限,而且它們也無法將單一的儲存同時寫入多個裝置。真正意義上的備份仍須仰賴 Legato Networker 這類多用途的外掛程式才能完成。如需有關使用 Legato Networker 的更多資訊,請參閱使用 Legato Networker。
imsbackup 公用程式
藉由 imsbackup,您可以將所選的郵件儲存內容寫入任何串列裝置,包括磁帶、UNIX 管道或純文字檔案。您可以使用 imsrestore 公用程式在以後回復整個備份或部分備份。imsbackup 的輸出可傳送至 imsrestore。
以下範例是將整個郵件儲存備份到 /dev/rmt/0:
這會將使用者 ID 為 joe 的電子信箱備份到 /dev/rmt/0:
此範例是將備份群組 groupA 中定義的所有使用者的所有電子信箱備份到 backupfile (請參閱建立備份群組):
該指令使用了預設區段化倍數 20。如需 imsbackup 指令的完整語法描述,請參閱「Messaging Server Reference Manual」。
imsrestore 公用程式
若要從備份裝置復原郵件,請使用 imsrestore 指令。例如,以下指令將從檔案 backupfile 中復原 user1 的郵件。
imsrestore -f backupfile /primary/user1
如需 imsbackup 指令的完整語法描述,請參閱「Messaging Server Reference Manual」。
部分復原的考量
郵件儲存使用單一副本的郵件系統。也就是說,儲存中的任何郵件只會以單一檔案作一份副本。該郵件的任何其他實例 (如將郵件傳送至多個電子信箱的時間) 將以連結的方式儲存在此副本中。因此,在復原郵件時會有些額外的麻煩。例如:
以下範例會展示,在執行部分復原時,系統會如何處置由多個使用者共用的郵件。假設有三個相同的郵件,分屬 A、B 和 C 三個使用者,如下所示:
A/INBOX/1
B/INBOX/1
C/INBOX/1範例 1。在第一個範例中,系統將執行部分備份和完全復原,方法如下:
在此範例中,B/INBOX/1 和 C/INBOX/1 均被指定了新的 I 節點號碼,並且郵件資料被寫入磁碟上的新位置。被復原的郵件只有一個;第二個郵件只是第一個郵件的強制連結。
範例 2。在此範例中,系統將執行完整備份和部分復原,方法如下:
A/INBOX/1 被指定一個新的 I 節點號碼。
範例 3。在此範例中,部分復原可能需要嘗試多次:
使用 Legato Networker
Messaging Server 包含一個備份 API,它提供一個帶有協力廠商備份工具 (如 Legato Networker) 的介面。郵件儲存的實體結構和資料格式均被壓縮在備份 API 中。備份 API 將直接與郵件儲存互動。備份 API 將郵件儲存抽象化,轉成備份服務可以理解的邏輯形式。備份服務就使用此郵件儲存的概念形式來儲存和擷取備份物件。
Messaging Server 可提供一個應用程式特定模組 (ASM),此模組可由 Legato Networker 的 save 和 recover 指令呼叫,以備份和復原郵件儲存資料。然後,ASM 將呼叫 Messaging Server 的 imsbackup 和 imsrestore 公用程式。
註
本節提供有關如何將 Legato Networker 與 Messaging Server 郵件儲存配合使用的資訊。若要瞭解 Legato Networker 介面,請參閱 Legato 說明文件。
使用 Legato Networker 備份資料
若要使用 Legato Networker 執行 Messaging Server 郵件儲存的備份,在呼叫 Legato 介面之前,您必須執行以下準備步驟:
- 建立從 /usr/lib/nsr/imsasm 連結至 msg_srv_base/lib/msg/imsasm 的符號式連結
- 從 Sun 或 Legato 取得 nsrfile 的二進位檔副本,然後將其複製到以下目錄:
/usr/lib/nsr/nsrfile
- 如果您要依群組來備份使用者,請執行以下步驟:
- 如建立備份群組中所示,建立一個備份群組檔案。
- 若要驗證您的配置,請執行 mkbackupdir.sh。
請查看由 mkbackupdir.sh 建立的目錄結構。此結構看起來應該類似於表格 15-4 所示。
請注意,如果您未指定 backup-groups.conf 檔案,備份程序將對所有使用者使用預設備份群組 ALL。
- 在 /nsr/res/ 目錄中,為您的 save 群組建立一個 res 檔案,以在備份前呼叫 mkbackupdir.sh 程序檔。請參閱表格 15-4 中的範例。
表格 15-4 顯示了備份群組目錄結構的範例。
圖 15-5 備份群組目錄結構
以下範例顯示 /nsr/res 目錄中名為 IMS.res 的 res 範例檔案:
type:savepnpc
precmd:"echo mkbackupdir started",
"/usr/siroe/server5/msg-siroe/bin/mkbackupdir.sh -p /backup"
pstcmd:"echo imsbackup Completed";
timeout:"12:00 pm";
現在,您便可以按以下方法執行 Legato Networker 介面:
- 如有需要,建立 Messaging Server 的 save 群組。
- 將 savepnpc 用作備份指令,建立一個備份用戶端:
對於單一階段作業備份,請使用 /backup
對於平行備份,請使用 /backup/server/group
確定您已按照建立備份群組所述建立了 group。
您還必須設定平行的備份階段作業的數目。
- 選取 [群組控制] | [啟動],以測試您的備份配置。
範例:在 Networker 中建立備份用戶端:
若要在 Networker 中建立備份用戶端,請從 nwadmin 中選取 [用戶端] | [用戶端設定] | [建立]:
Name:siroe
Group:IMS
Savesets:/backup/primary/groupA
/backup/secondary/groupB
/backup/tertiary/groupC
.
.
Backup Command:savepnpc
Parallelism: 4:
使用 Legato Networker 復原資料
若要回復資料,您可以使用 Legato Networker 的 nwrecover 介面或 recover 指令行公用程式。以下範例將回復使用者 al 的 INBOX:
recover -a -f -s siroe /backup/siroe/groupA/a1/INBOX
以下範例將回復整個郵件儲存:
recover -a -f -s siroe /backup/siroe
使用協力廠商備份軟體 (Legato 除外)
Messaging Server 提供了兩套郵件儲存備份方案,即指令行 imsbackup 和 Solstice Backup (Legato Networker)。對於大型郵件儲存,執行單一 imbackup 來備份整個郵件儲存將佔用大量時間。Legato 解決方案支援在多個備份裝置上同時執行備份階段作業。同步備份可以大幅縮減備份時間 (備份速度可達每小時 25GB)。
如果您要使用其他協力廠商的同步備份軟體 (例如 Netbackup),可以採用以下方式來整合備份軟體和 Messaging Server。
- 將使用者分為幾個群組 (請參閱建立備份群組),然後在 msg_svr_base/config/ 目錄下建立 backup-groups.conf 檔案。
註
此備份方案需要額外的磁碟空間。若要同步備份所有群組,磁碟空間必須是郵件儲存容量的兩倍。如果您沒有足夠的磁碟空間,請將使用者分為多個較小的群組,然後一次備份一組群組。例如,group1 - group5 或 group6 - group10。備份後,請移除群組資料檔案。
- 執行 imsbackup 以將每個群組備份到展示區的檔案中。
該指令為 imsbackup -f <device> /<instance>/<group>
您還可以同時執行多個 imsbackup 程序。例如:
# imsbackup -f- /primary/groupA > /bkdata/groupA &
# imsbackup -f- /primary/groupB > /bkdata/groupB &. . .
imsbackup 不支援大型檔案,如果備份資料超過 2GB,您就需要使用 -f- 選項將資料寫入 stdout,然後再將輸出導入檔案中。
- 使用您的協力廠商備份軟體來備份展示區中的群組資料檔案 (在範例中為 /bkdata)。
- 若要復原使用者,請先找出使用者所屬的群組檔案名稱,從磁帶上復原該檔案,然後使用 imsrestore 從資料檔案中復原該使用者。
請注意,imsrestore 不支援大型檔案。如果資料檔案超過 2GB,請使用以下指令:
# cat /bkdata/groupA | imsrestore -f- /primary/groupA/andy
監視使用者存取Messaging Server 提供 imsconnutil 指令,可讓您監視使用者經由 IMAP、POP 和 HTTP 存取郵件儲存的狀況。您還可以確定使用者的最後登入和登出情況。該指令作用的對象是單一郵件儲存,它無法跨多個郵件儲存作業。
該指令要求系統使用者擁有超級使用者權限 (預設:inetuser),並且您必須將配置變數 local.imap.enableuserlist、local.http.enableuserlist 和 local.enablelastaccess 設定為 1。
若要列出目前經由 IMAP 或其他 Web 郵件用戶端登入的使用者,請使用以下指令:
# imsconnutil -c
若要列出郵件儲存上每位使用者最後的 IMAP、POP 或 Messenger Express 存取 (登入和登出) 情況,請使用:
# imsconnutil -a
以下指令將執行兩項作業:1) 它會檢查指定使用者目前是否經由 IMAP 或 Messenger Express、或是任何使用 mshttp (請注意,它不能用於 POP,因為 POP 使用者通常不會一直保持連線) 進行連線的用戶端來登入;2) 它會列出使用者最後一次登入和登出的時間:
# imsconnutil -c -a -u user_ID
請注意,使用以下指令可以從檔案輸入使用者清單 (每行一位使用者):
# imsconnutil -c -a -f filename
您還可以使用 -s 旗標來指定特定服務 (imap 或 http)。例如,若要列出特定使用者 ID 是否登入 IMAP,請使用以下指令:
# imsconnutil -c -s imap -u user_ID
如需 imsconnutil 語法的完整描述,請參閱Sun ONE Messaging Server Reference Guide。
以下是某些輸出範例:
$ ./imsconnutil -a -u soroork
UID IMAP last accessHTTP last accessPOP last access
=========================================================================
soroork 08/Jul/2003:10:49:0510/Jul/2003:14:55:52----NOT-RECORDED----
$ ./imsconnutil -c
IMAP
UIDTIME AUTH TO FROM
===========================================================================
ed17/Jun/2003:11:24:03plain172.58.73.45:193129.157.12.73:2631
bill17/Jun/2003:04:28:43plain172.58.73.45:193129.158.16.34:2340
mia 17/Jun/2003:09:36:54plain172.58.73.45:193192.18.184.103:3744
jay17/Jun/2003:05:38:46plain172.58.73.45:193129.159.18.123:3687
paul17/Jun/2003:12:23:28plaintext172.58.73.45:193192.18.194.83:2943
tony17/Jun/2003:05:38:46plain172.58.73.45:193129.152.18.123:3688
anil17/Jun/2003:12:26:40plaintext172.58.73.45:193192.18.164.17:1767
anil17/Jun/2003:12:25:17plaintext172.58.73.45:193129.150.17.34:3117
jack17/Jun/2003:12:26:32plaintext172.58.73.45:193129.150.17.34:3119
toni17/Jun/2003:12:25:32plaintext172.58.73.45:193192.18.148.17:1764===========================================================================
10 users were logged in to imap.
Feature is not enabled for http.
------------------------------------------------------------------------------
郵件儲存的疑難排解本節提供主動維護郵件儲存的指南。此外,本節還描述,當郵件儲存損毀或意外關閉時,您可以使用的其他郵件儲存回復程序。請注意,有關這些額外郵件儲存回復程序的部分屬於修復電子信箱和電子信箱資料庫的延伸內容。
在閱讀本節之前,強烈建議您也同時查閱本章節以及「Sun ONE Messaging Server Reference Manual」中有關指令行公用程式和 configutil 的章節。本節囊括之主題如下:
郵件儲存的標準監視程序
本節將概述郵件儲存的標準監視程序。對於郵件儲存的一般檢查、測試和標準維護作業來說,這些程序很有幫助。
如需其他資訊,請參閱監視郵件儲存。
檢查硬體空間
郵件儲存應備有充足的額外磁碟空間和硬體資源。若郵件儲存已接近磁碟空間及硬體空間的上限,在郵件儲存內可能會出現問題。
磁碟空間不足是導致郵件伺服器問題和故障的最常見原因。若沒有空間可供寫入郵件儲存,郵件伺服器將當機。此外,當可用磁碟空間低於特定臨界值時,將出現與郵件遞送和記錄等相關的問題。如果 stored 程序的清除功能失敗,並且已刪除郵件無法從郵件儲存中刪去,則磁碟空間將很快耗盡。
如需有關監視磁碟空間的資訊,請參閱監視磁碟空間和監視郵件儲存。
檢查日誌檔
請檢查日誌檔,以確定郵件儲存程序均按照配置執行。Messaging Server 可為每個主要協定或服務建立一組單獨的日誌檔,它支援:SMTP、IMAP、POP 和 HTTP。您可以透過主控台,或直接到 msg_svr_base/log/ 目錄下查看日誌檔。您應定期監視日誌檔。
請注意,記錄會影響伺服器效能。您指定的記錄冗長度越高,您的日誌檔在給定時間內佔用的磁碟空間就越大。您應為伺服器定義有效可行的日誌旋轉策略、過期策略和備份策略。如需有關為伺服器定義記錄策略的資訊,請參閱第 17 章「記錄和日誌分析」。
檢查使用者 IMAP/POP 階段作業
Messaging Server 提供了名為遙測的功能,可以捕獲使用者的整個 IMAP 或 POP 階段作業並形成檔案。該功能對於除錯用戶端問題十分有用。例如,如果使用者抱怨他們的郵件存取用戶端未按預期運行,則該功能可用來追蹤存取用戶端與 Messaging Server 之間的互動作業。
若要捕獲階段作業,只需建立以下目錄:
msg_svr_base/data/telemetry/pop_or_imap/userid
Messaging Server 將在該目錄中針對每個階段作業建立一個檔案。輸出範例如下所示。
LOGIN redb 2003/11/26 13:03:21
>0.017>1 OK User logged in
<0.047<2 XSERVERINFO MANAGEACCOUNTURL MANAGELISTSURL MANAGEFILTERSURL
>0.003>* XSERVERINFO MANAGEACCOUNTURL {67}
http://redb@cuisine.blue.planet.com:800/bin/user/admin/bin/enduser MANAGELISTSURL NIL MANAGEFIL
TERSURL NIL
2 OK Completed
<0.046<3 select "INBOX"
>0.236>* FLAGS (\Answered ?lagged ?raft ?eleted \Seen $MDNSent Junk)
* OK [PERMANENTFLAGS (\Answered ?lagged ?raft ?eleted \Seen $MDNSent Junk \*)]
* 1538 EXISTS
* 0 RECENT
* OK [UNSEEN 23]
* OK [UIDVALIDITY 1046219200]
* OK [UIDNEXT 1968]
3 OK [READ-WRITE] Completed
<0.045<4 UID fetch 1:* (FLAGS)
>0.117>* 1 FETCH (FLAGS (\Seen) UID 330)
* 2 FETCH (FLAGS (\Seen) UID 331)
* 3 FETCH (FLAGS (\Seen) UID 332)
* 4 FETCH (FLAGS (\Seen) UID 333)
* 5 FETCH (FLAGS (\Seen) UID 334)
<etc>
檢查 stored 程序
stored 功能可執行各項重要作業,如郵件資料庫的死結和異動作業、實施時效策略以及永久刪除並刪除磁碟上儲存的郵件。如果 stored 停止執行,將導致 Messaging Server 出現問題。如果 stored 未在 start-msg 執行時啟動,則其他程序均不會啟動。
如需有關 stored 程序的更多資訊,請參閱使用 stored 公用程式,以及「Messaging Server Reference Manual」的「Messaging Server 指令行公用程式」一章中有關 stored 公用程式的說明。
如需有關監視 stored 功能的其他資訊,請參閱監視郵件儲存。
檢查資料庫日誌檔
資料庫日誌檔參考不活躍的異動檢查點日誌檔 (在目錄 store_root/mboxlist 中)。如果日誌檔累積,將不會產生資料庫檢查點。一般說來,總會有兩個或三個資料庫日誌檔同時存在。如果檔案較多,可能是發生問題的徵兆。
檢查使用者資料夾
如果您要檢查使用者資料夾,可能會執行
reconstruct -r -n 指令 (不循環修復),該指令會檢查所有使用者資料夾並報告錯誤。如需有關 reconstruct 指令的更多資訊,請參閱修復電子信箱和電子信箱資料庫。檢查核心檔案
僅當程序意外終止時,才會出現核心檔案。查看這些檔案非常重要,特別是當您發現郵件儲存中存在問題的時候。在 Solaris 上,請使用 coreadmin 來配置 core 檔案的位置。
郵件儲存的啟動與回復
郵件儲存的資料由郵件、索引資料以及郵件儲存資料庫共同組成。儘管該資料非常牢固,系統中仍可能會出現郵件儲存資料的問題,但這種情況很少發生。這些問題都可以從預設日誌檔中察覺,而且幾乎總是可以消弭於無形。在極少數情況下,日誌檔中的錯誤訊息會指出您需要執行 reconstruct 公用程式。此外,作為最後的憑藉,請按照備份和復原郵件儲存中的說明,透過備份和復原程序來保護郵件。本節將重點說明 stored 的自動啟動和回復程序。
郵件儲存將許多原本屬於管理員職責的回復作業都予以自動化。這些作業都是由郵件儲存常駐程式 stored 在系統啟動時執行,並依需要採用資料庫快照和自動快速回復功能。stored 將徹底檢查郵件儲存的資料庫,並在偵測到問題時自動啟動修復。
stored 還提供資料庫狀態的綜合分析,包括使用「預設」日誌的狀態訊息、報告對郵件儲存進行的修復,以及嘗試自動恢復作業等。
自動啟動和回復 運作原理
stored 常駐程式將在其他郵件儲存程序之前啟動。它將初始化郵件儲存資料庫,必要時也會回復資料庫。郵件儲存資料庫中包含有資料夾、配額、訂閱以及郵件旗標等資訊。該資料庫可以進行記錄和異動處理,因此已內建有回復功能。此外,某些資料庫的資訊還會複製到每個資料夾的郵件索引區域,作為備援之用。
雖然資料庫非常穩定,仍可能會偶爾發生損毀,但在大多數情況下,stored 可以明顯回復並修復資料庫。但是,只要 stored 重新啟動,您就應該檢查預設日誌檔,以確定系統不需要額外的管理介入。如果資料庫需要進一步重建,日誌檔中的狀態訊息會要求您執行 reconstruct。
開啟郵件儲存資料庫之前,stored 會分析資料庫的完整性,並將狀態訊息傳送到 warning 類別之下的預設日誌中。某些訊息對管理員很有用,某些訊息則包含已編碼的資料,可供內部分析之用。如果 stored 偵測到任何問題,它將嘗試修復並再次啟動資料庫。
當資料庫再度開啟後,stored 會通知其餘服務再行啟動。如果自動修復失敗,預設日誌中的郵件將指出應採取何種動作。請參閱表示需要執行 reconstruct -m 的錯誤訊息,以取得詳細資訊。
在先前的版次中,stored 可能會啟動極度耗時的回復程序,使得管理員常常擔心 stored 是否「滯塞」。此類緩慢的回復方式已被移除,並且 stored 可在一分鐘內決定最終狀態。但是,如果 stored 需要採用從快照回復之類的回復技術,該程序可能會多花費幾分鐘。
多數情況下,資料庫在回復後都可以恢復運作,不需再做其他處置。然而,某些回復將需要執行 reconstruct -m,以同步化郵件儲存中的備援資料。這也會記錄到預設日誌中,因此在啟動後監視預設日誌很重要。雖然郵件儲存看起來一切如常,但還是有必要執行 reconstruct 之類的作業。
查閱日誌檔的另一個原因是可以確定損害資料庫的真正元兇。雖然 stored 的設計就是要讓郵件儲存能在無視其他系統問題的情況下啟動,您也許還是想查明資料庫損毀的真相,因為這可能是更大潛在問題的徵兆。
表示需要執行 reconstruct -m 的錯誤訊息
本節描述需要執行 reconstruct -m 的錯誤訊息類型。
當錯誤訊息指出電子信箱錯誤時,請執行 reconstruct <mailbox>。範例:
"Invalid cache data for msg 102 in mailbox user/joe/INBOX.Needs reconstruct"
"Mailbox corrupted, missing fixed headers:user/joe/INBOX"
"Mailbox corrupted, start_offset beyond EOF:user/joe/INBOX"
當錯誤訊息指出資料庫錯誤時,請執行 reconstruct -m。範例:
"Removing extra database logs.Run reconstruct -m soon after startup to resync redundant data"
"Recovering database from snapshot.Run reconstruct -m soon after startup to resync redundant data"
資料庫快照
快照是資料庫的最新備份,stored 可以用它在幾分鐘內悄然地復原資料庫。這種方式比依賴其他區域中儲存的備援資訊來運作的 reconstruct 要快得多。
郵件儲存資料庫快照 運作原理
資料庫快照位於 mboxlist 目錄中,依預設每 24 小時自動取樣一次。依預設,快照會複製到 store 目錄的子目錄中。依預設,在任何給定時間,系統會保留五種快照:一個作用中的資料庫,三個快照以及一個已移除資料庫的副本。已移除資料庫的副本較新,它是資料庫的緊急備用副本,通常放在 mboxlist 資料庫目錄的 removed 子目錄下。
如果回復程序偵測出資料庫已經損壞,並決定將目前資料庫移除時,stored 會儘量將其移至 removed 目錄中。這樣便可以對損壞的資料庫進行分析。
資料移動每週進行一次。如果已存在資料庫副本,stored 將不會在每次儲存啟動時取代資料庫副本。僅當 removed 目錄中的資料超過一週後,才會進行取代。這是為了防止原先有問題的資料庫在啟動成功後很快被取代。
指定郵件儲存資料庫快照的間隔時間和位置
所需空間至少是資料庫加上快照空間的五倍。強烈建議管理員應重新配置快照以在單獨的磁碟上執行,並根據系統的需求進行調整。
如果 stored 在啟動時偵測到資料庫有問題,就會自動用最新的快照來回復。三個快照變數可以設定以下參數:快照檔案的位置、執行快照的間隔時間以及儲存的快照數目。這些 configutil 參數在表格 15-14 中顯示。
如果快照的間隔時間太短,會對系統造成太多負擔,並且資料庫中有問題的部分也很可能被複製到快照中。如果快照的間隔時間太長,會造成資料庫只能回復到當初快照時的狀態,中間的變動都會損失掉。
一般的建議是一天作一次快照,如果系統上的問題已存在數天之久,一週份 (或更多) 的快照會對回復很有幫助,因為您也許會想將系統復原到問題發生之前的狀態。
stored 會監視資料庫,並且當它懷疑資料庫有問題時,會拒絕使用最新的快照。然後它將擷取儘可能新的最可靠快照。雖然快照可能是一天前擷取的,但如果可用,系統還是會以較新的備援資料來置換較舊的快照資料。
因此,快照的最終目的就是要取得系統最近的穩定狀態資料,以減輕系統在正常作業時重建資料的負擔。
表格 15-14 郵件儲存資料庫快照的參數
參數
描述
local.store.snapshotpath
郵件儲存資料庫快照檔案的位置。可以是絕對路徑,也可以是相對於 store 目錄的路徑。
預設:dbdata/snapshots
local.store.snapshotinterval
快照間隔的分鐘數。有效值: 1 - 46080
預設:1440 (1440 分鐘 = 1 天)
local.store.snapshotdirs
所保留的不同版本快照的數目。有效值: 2 -367
預設: 3
修復電子信箱和電子信箱資料庫
如果有一個或多個電子信箱損毀,您可以使用 reconstruct 公用程式來重建電子信箱或電子信箱資料庫,並修復任何內容不一致的問題。請參閱表示需要執行 reconstruct -m 的錯誤訊息。
reconstruct 公用程式會重建一個或多個電子信箱或主電子信箱檔案,並修復任何內容不一致的問題。您可以使用此公用程式,從郵件儲存中任何一種資料損毀類型回復。請注意,低階資料庫修復 (如完成異動及回復未完成的異動) 均在啟動時自動執行。
表格 15-15 列出各種 reconstruct 選項。如需詳細的語法及使用需求,請參閱「Messaging Server Reference Manual」。
表格 15-15 reconstruct 選項
選項
描述
-e
在重建後立即移除 store.exp 檔案。
-i
在重建後立即初始化 store.idx 檔案。
-f
強制 reconstruct 執行電子信箱的修復。
-m
修復電子信箱資料庫,並執行一致性檢查。此選項會檢查它在暫存區中找到的每個電子信箱,然後在電子信箱資料庫中適當地新增或移除項目。每當在資料庫中新增或移除項目時,此公用程式便會將訊息列印到標準輸出檔案。
-n
僅檢查郵件儲存,而不執行電子信箱的修復作業。-n 選項不能單獨使用,必須配合電子信箱名稱。如果沒有提供電子信箱名稱,則必須將 -n 選項與 -r 選項配合使用。-r 選項可以與 -p 選項結合使用。例如,以下指令均有效:
reconstruct -n user/dulcinea/INBOX
reconstruct -n -r
reconstruct -n -r -p primary
reconstruct -n -r user/dulcinea/
-o
檢查孤立帳號。此選項會在目前的郵件傳送伺服器主機上搜尋沒有相應 LDAP 項目的收件箱。例如,-o 選項會找出已從 LDAP 刪除或移到其他伺服器主機上的所有者的收件箱。對於找到的每個孤立帳號,reconstruct 會將以下指令寫入標準輸出:
mboxutil-d user/userid/INBOX
-o -d filename
如果將 -d filename 配合 -o 選項使用,reconstruct 會開啟指定檔案,並將 mboxutil -d 指令寫入該檔案。該檔案隨後會轉變成刪除孤立帳號的程序檔檔案。
-p partition
指定分割區名稱;無需使用完整路徑名稱。如果未指定此選項,reconstruct 會預設處理所有分割區。
-q
修復配額子系統中任何不一致的問題,如電子信箱的根配額錯誤,或是報告的根配額使用率錯誤。-q 選項可在執行其他伺服器程序時執行。
-r [mailbox]
修復指定電子信箱的分割區,並執行一致性檢查。-r 選項也可以修復指定電子信箱中的所有子電子信箱。如果您指定 -r 選項時沒有加上電子信箱引數,則此公用程式將修復使用者分割區目錄下的所有電子信箱暫存區。
重建電子信箱
若要重建電子信箱,請使用 -r 選項。此選項的使用時機是:
在 5.0 版次中,reconstruct -r 會先執行一致性檢查。它會報告一致性狀況,並僅在偵測到問題時才進行修復。因此,這一版的 reconstruct 公用程式的效能已提高。
您可以按照以下範例中的描述方式使用 reconstruct:
若要重建使用者 daphne 的電子信箱暫存區,請使用以下指令:
reconstruct -r user/daphne
若要重建電子信箱資料庫中列出的所有電子信箱的暫存區:
reconstruct -r
但是,使用此選項時必須小心,因為對於大型郵件儲存來說,重建電子信箱資料庫中列出的所有電子信箱的暫存區會佔用很長時間。(請參閱 reconstruct 效能。)較好的故障回復方式可能是讓儲存使用多個磁碟。如果其中一個磁碟發生故障,也不致影響整個儲存。如果磁碟損毀,您只需使用 -p 選項重建一部分儲存,方法如下:
reconstruct -r -p subpartition
若要重建指令行引數中列出的、位於 primary 分割區的電子信箱:
reconstruct -p primary mbox1 mbox2 mbox3
如果您需要重建 primary 分割區中的所有電子信箱:
reconstruct -r -p primary
如果您要強制 reconstruct 重建資料夾而不執行一致性檢查,請使用 -f 選項。例如,以下指令會強制重建使用者 daphne 的資料夾:
reconstruct -f -r user/daphne
若要只檢查所有電子信箱而不進行修復,請使用 -n 選項,方法如下:
reconstruct -r -n
檢查並修復電子信箱
若要執行電子信箱資料庫的高階一致性檢查和修復:
reconstruct -m
-m 選項的使用時機是:
移除孤立帳號
若要搜尋孤立帳號 (孤立帳號指沒有相應 LDAP 項目的電子信箱),請使用以下指令:
reconstruct -o
指令輸出的格式為:
reconstruct:Start checking for orphaned mailboxes
mboxutil -d user/test/annie/INBOX
mboxutil -d user/test/oliver/INBOX
reconstruct:Found 2 orphaned mailbox(es)
reconstruct:Done checking for orphaned mailboxes
若要建立一個列出孤立電子信箱並可轉變成刪除孤立電子信箱的程序檔的檔案 (檔案名為 orphans.cmd),請使用以下指令:
reconstruct -o -d orphans.cmd
指令輸出如下所示:
reconstruct:Start checking for orphaned mailboxes
reconstruct:Found 2 orphaned mailbox(es)
reconstruct:Done checking for orphaned mailboxes
reconstruct 效能
reconstruct 執行作業所花費的時間視以下因素而定:
reconstruct -r 選項會執行最初的一致性檢查;該項檢查會根據需要重建的資料夾數目來提昇 reconstruct 的效能。
有大約 2400 名使用者,85GB 的郵件儲存,伺服器上同時有 POP、IMAP 或 SMTP 正在活動的系統具有以下效能:
常見問題與解決方案
本節列出郵件儲存的常見問題及解決方案:
使用萬用字元型樣的指令失效
有些 UNIX shell 要求在萬用字元參數的前後加上引號,有些則不要求。例如,當 C shell 嘗試將包含萬用字元 (*、?) 的引數展開成檔案時,如果找不到匹配的資料,則會失敗。這些與型樣相符的引數可能需要以引號括住,以傳遞至 mboxutil 之類的指令。
例如:
mboxutil -l -p user/usr44*
可在 Bourne shell 下執行,但在 tsch 和 C shell 下會失敗。這些 shell 的慣用格式是:
mboxutil -l -p "user/usr44*"
如果使用萬用字元型樣的指令無法執行,請檢驗您是否需要為該 shell 的萬用字元加上引號。
未知/無效的分割區
如果將使用者的電子信箱移到一個剛剛建立的新分割區,並且 Messaging Server 尚未更新或重新啟動,則該使用者可能會在 Messenger Express 中收到訊息「未知/無效的分割區」。此問題只會發生在新分割區上。如果您現在將其他使用者電子信箱新增至此新的分割區,則無需更新/重新啟動 Messaging Server。
使用者電子信箱目錄的問題
當郵件儲存的受損程度僅限於少量使用者,而不會全面影響系統時,會出現使用者電子信箱問題。以下指南提出了一套用於辨識、分析和解決使用者電子信箱目錄問題的程序:
- 復查日誌檔、錯誤訊息或使用者觀察到的任何不尋常行為。
- 若要保留除錯資訊及歷程,請將整個 store_root/mboxlist/ 使用者目錄複製到郵件儲存以外的其他位置。
- 若要找出可能導致問題的使用者資料夾,應執行 reconstruct -r -n 指令。如果您無法以 reconstruct 找出資料夾,則該資料夾可能不在 folder.db 中。
如果您無法以 reconstruct -r -n 指令找出資料夾,請使用 hashdir 指令來確定該資料夾的位置。如需有關 hashdir 的更多資訊,請參閱 hashdir 公用程式,以及「Messaging Server Reference Manual」的「Messaging Server 指令行公用程式」一章中有關 hashdir 公用程式的說明。
- 如果找到該資料夾,請檢查檔案和許可權,並驗證檔案大小正確。
- 使用 reconstruct -r (不帶 -n 選項) 重建電子信箱。
- 如果 reconstruct 未偵測出您觀察到的問題,則可以使用 reconstruct -r -f 指令強制重建郵件資料夾。
- 如果資料夾不在 mboxlist 目錄中 (store_root/mboxlist),卻在 partition 目錄中 (store_root/partition),則可能存在全域性的不一致問題。在這種情況下,您應執行 reconstruct -m 指令。
- 如果上一步不管用,您可以移除 store.idx 檔案,然後再執行一次 reconstruct 指令。
- 如果該問題僅限於一個問題郵件,您應將此郵件檔案複製到郵件儲存以外的其他位置,然後對 mailbox/ 目錄執行 reconstruct -r 指令。
- 如果您確定資料夾位於磁碟上 (store_root/partition/ 目錄),但顯然不在資料庫中 (store_root/mboxlist/ 目錄),請執行 reconstruct -m 指令來確保郵件儲存的一致性。
如需有關 reconstruct 指令的更多資訊,請參閱修復電子信箱和電子信箱資料庫。
儲存常駐程式無法啟動
如果 stored 無法啟動,並出現以下錯誤訊息:
# msg_svr_base/sbin/start-msg
msg_svr_base:Starting STORE daemon ...Fatal error:Cannot find group in name service這表示系統找不到 local.servergid 中配置的 UNIX 群組。Stored 及其他常駐程式需要將它們的 GID 設定到該群組上。有時,由 local.servergid 定義的群組會被意外刪除。在這種情況下,就必須重建被刪除的群組,將 inetuser 加入群組,然後將 instance_root 及其檔案的所有權改授予 inetuser 和該群組。