Sun ONE Messaging Server 6.0 管理员指南 |
第 15 章
管理邮件存储本章介绍了邮件存储和邮件存储管理界面。本章包含以下各节:
概述邮件存储包含特定 Messaging Server 实例的用户邮箱。邮件存储的大小随邮箱、文件夹和日志文件的数量的增加而增加。可以通过指定对邮箱大小(磁盘配额)的限制、指定对允许的邮件总数的限制以及为存储中的邮件设置生存期策略来控制存储的大小。
向系统添加更多用户时,磁盘存储要求会相应增加。根据服务器支持的用户的数量,邮件存储可能需要一个物理磁盘或多个物理磁盘。将此附加磁盘空间集成到系统中的方法有两种。最简单的方法是添加附加邮件存储分区(请参见配置邮件存储分区)。
同样,如果要支持多个托管域,您可能需要将一个服务器实例专用于一个大型域。通过此配置,您可以为特定域指定存储管理员。还可以通过添加更多分区扩展邮件存储。
为管理邮件存储,除了 Sun ONE Console 界面,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 目录中,依此类推。
邮件存储如何删除邮件从邮件存储中删除邮件分三个阶段:
- 删除。客户机将邮件标志设置为删除。此时邮件被标记为删除,但是通过去掉删除标志,客户机仍然可以恢复邮件。如果有第二个客户机,则已删除标志可能不会立即被该客户机识别。可以设置 configutil 参数 local.imap.immediateflagupdate 以使标志立即更新。
- 擦除。邮件将从邮箱中删除。从技术上讲,邮件将从邮件存储索引文件 store.idx 中删除。邮件本身仍然在磁盘上,但是一旦邮件被擦除,客户机将不能再恢复邮件。
过期是擦除的一个特例。符合管理员定义的一组删除条件(例如邮件大小、生存期等)的邮件将被擦除。请参见设置自动删除邮件(过期和清除)功能。
- 清除。缺省情况下,stored 实用程序将在每天晚上 11 点从磁盘上清除所有已被擦除的邮件。可以使用控制邮件清除时间安排的 local.schedule.purge 和控制清除宽限期(邮件被清除之前的时间段)的 store.cleanup 配置此功能。
指定管理员对存储的访问权限邮件存储管理员可以查看和监视用户邮箱,并指定邮件存储的访问控制。存储管理员具有对任何服务(POP、IMAP、HTTP 或 SMTP)的代理验证权限,这意味着他们可以使用任何用户的权限对任何服务进行验证。这些权限允许存储管理员运行特定的实用程序以管理存储。例如,存储管理员使用 MoveUser 可以将用户帐户和邮箱从一个系统移动到另一个系统。
本节介绍如何将存储权限授予邮件存储以进行 Messaging Server 安装。
您可以执行以下小节中所述的管理员任务:
添加管理员
Console 要通过 Console 添加管理员条目,请执行以下操作:
configutil -o store.admins -v "adminlist"
其中 adminlist 是以空格分隔的管理员 ID 的列表。如果指定多个管理员,必须将列表包含在引号中。此外,管理员必须是服务管理员组的成员(位于 LDAP 用户条目:memberOf:cn=Service Administrators,ou=Groups,o=usergroup)。
修改管理员条目
Console 要通过 Console 修改邮件存储“管理员 UID”列表中的现有条目,请执行以下操作:
命令行 要通过命令行修改邮件存储“管理员 UID”列表中的现有条目,请运行以下命令:
configutil -o store.admins -v "adminlist"
删除管理员条目
Console 要使用 Console 从邮件存储“管理员 UID”列表中删除条目,请执行以下操作:
命令行 要通过命令行删除存储管理员,可以如下所示编辑管理员列表:
configutil -o store.admins -v "adminlist"
关于共享文件夹共享文件夹是可以由一组用户访问和读取的文件夹。也就是说,多个用户被授予对共享文件夹的访问权限。例如,用户可以创建一个名为 golf 的文件夹,并允许其他用户查看该文件夹的内容。
缺省情况下,Messaging Server 在所有电子邮件帐户中都创建一个名为 Shared Folders/Users 的文件夹。用户在该文件夹中创建和访问共享文件夹。图 15-2 中显示了共享文件夹在客户机上如何显示的示例。在设置分布式共享文件夹中将进一步说明该示例。
图 15-2 Ed 的客户机共享邮件文件夹列表的示例
用户可以创建专用共享文件夹,并为其电子邮件客户机提供对这些文件夹的访问权限(如果客户机支持共享文件夹)。这些共享文件夹将会显示在已被授予访问权限的其他用户的 Shared Folders 中。
共享文件夹对于启动、共享和归档正在进行的有关特定主题的对话非常有用。例如,一组软件开发者可以创建用于讨论特定项目的开发的共享文件夹。邮件发送到共享文件夹时,每个订阅共享文件夹的用户(可以通过单个地址或一组地址添加订户)都可以打开此邮箱并阅读邮件。
有两种共享文件夹:
通常,只有特定邮件存储中的用户才可以使用共享文件夹。但是,Messaging Server 允许您创建可以从多个邮件存储中访问的、特殊的共享文件夹。这些文件夹称为分布式共享文件夹。有关详细信息,请参见设置分布式共享文件夹。
共享文件夹访问权限
在存储在 folder.db 中的访问控制列表 (ACL) 中维护访问权限。通过设置 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
启用或禁用共享文件夹列表
响应 LIST 命令时,根据配置选项 local.store.sharedfolders 中的设置,服务器将返回或不返回共享文件夹。将选项设置为 off 将禁用该选项。缺省情况下,该设置处于启用状态(设置为 on)。
SELECT 和 LSUB 命令不受此选项的影响。LSUB 命令将返回每个已订阅的文件夹,包括共享文件夹。用户可以选择(SELECT)其拥有或订阅的共享文件夹。
设置分布式共享文件夹
通常,只有特定邮件存储中的用户才可以使用共享文件夹。但是,Messaging Server 允许您创建可以从多个邮件存储中访问的分布式共享文件夹。即,可以将对分布式共享文件夹的访问权限授予邮件存储组内的所有用户。但是,请注意 Web 邮件客户机(HTTP 访问客户机,如 Messenger Express)不支持远程共享文件夹访问。用户可以列出和订阅文件夹,但不能查看或更改内容。
设置分布式共享文件夹要满足以下要求:
必须通过设置表 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 的示例。
$ StoreServer1 :> readership -l
Ed:user/Han/golf
Ian:user/Han/golf
anyone:user/public/press_releases
$ 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 Console 或 configutil 命令为所有用户设置缺省配额。您还可以为各个用户、系列组和托管域设置配额。
本节介绍了以下任务:
如果要使用 Console,请执行以下操作:
指定缺省用户配额
缺省配额适用于尚未为其设置单个配额的用户。为单个用户设置的配额将覆盖缺省配额。
Console 要通过 Console 指定缺省配额,请执行以下操作:
命令行 要指定总邮件大小的缺省用户磁盘配额,请运行以下命令:
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 发送邮件机制和传送命令不显示错误消息。
启用强制配额
Console 要通过 Console 启用强制配额,请执行以下操作:
configutil -o store.quotaenforcement -v [ on | off]
要拒绝将促使邮件存储超出其配额的邮件,请运行以下命令:
configutil -o local.store.quotaoverdraft -v off
要在超出配额后启动强制(即在启动强制配额前接受将促使邮件存储超出配额的邮件),则将以上值设置为 on。缺省值为 off。
启用配额通知
Console 要通过 Console 启用配额通知,请执行以下操作:
- 单击“配额”选项卡。
- 选取“启用配额通知”框。
此框将用于切换。要禁用配额通知,则取消选取此框。
- 定义配额警告邮件
请参见定义配额警告邮件。
- 单击“保存”。
configutil -o store.quotanotification -v [ yes | no ]
configutil -o store.quotaexceededmsg -v message如果未设置邮件,则不会向用户发送任何配额警告邮件。有关配额警告邮件格式的示例,请参见下一节。
定义配额警告邮件
您可以定义将发送给超出其磁盘配额的用户的邮件,如下所示。邮件被发送到用户的邮箱。
Console 要通过 Console 定义配额警告邮件,请执行以下操作:
configutil -o store.quotaexceededmsg -v message
邮件必须是 RFC 822 格式。必须包含一个标题(至少具有一个主题行),接着是 $$,然后是邮件主体。$ 表示一个新的行。示例:
configutil -o store.quotaexceededmsg -v ‘Subject:WARNING:User quota exceeded$$User quota threshold exceeded - reduce space used.’
要定义发送警告邮件的频率,请运行以下命令:
configutil -o store.quotaexceededmsginterval -v number
其中 number 表示天数。例如,3 表示每 3 天发送一次邮件。
指定配额阈值
您可以通过指定配额阈值在 IMAP 用户达到其磁盘配额前向其发送警告邮件。用户的磁盘使用率超出指定的阈值时,服务器将向用户发送警告邮件。
对于其客户机支持 IMAP ALERT 机制的 IMAP 用户,邮件将在每次用户选择邮箱时显示在用户的屏幕上(邮件还将被写入 IMAP 日志)。
Console 要通过 Console 指定配额阈值,请执行以下操作:
configutil -o store.quotawarn -v number
其中 number 表示允许的配额的百分比。
设置宽限期
宽限期将指定邮件被退回发件人之前邮箱可以超出配额(磁盘空间或邮件数量)的时间。邮件被 MTA 接受,但保留在 MTA 队列中而不被传送到邮件存储,直到发生以下情况之一:
例如,如果您的宽限期设置为两天,而您超出了配额一天,则将继续接收新邮件并将其保留在邮件队列中,并继续进行传送尝试。第二天以后,邮件将退回。
注
宽限期不是邮件将在邮件队列中保留的时间,而是退回所有外来邮件(包括邮件队列中的邮件)之前邮箱可以超出配额的时间。用户达到配额阈值(请参见指定配额阈值)并被警告时,宽限期将启动。
Console 要通过 Console 设置邮件在队列中保存时间的宽限期,请执行以下操作:
configutil -o store.quotagraceperiod -v number
其中 number 表示小时数。
设置自动删除邮件(过期和清除)功能自动删除邮件功能(也称为过期和清除)根据管理员定义的一组条件自动从邮件存储中删除邮件。此功能可用于自动删除旧的和过大的邮件、已读/已删除邮件、带特定主题行的邮件等等。此功能允许使用以下删除条件:
此功能由 imexpire 实用程序执行,它将擦除和清除邮件。有关邮件删除过程的详细信息,请参见邮件存储如何删除邮件。
imexpire 操作原理
可以从命令行调用 imexpire 或通过 imsched 守护程序安排其自动运行的时间。管理员使用 Console 或 configutil 命令行实用程序配置全局过期规则(即用于整个邮件存储的规则)。可以通过在邮件存储分区、用户或邮箱目录中创建过期规则文件 (store.expire) 来配置本地过期规则(应用于文件夹或用户的规则)。
imexpire 在启动时装入所有过期规则。缺省情况下,imexpire 为每个分区创建一个线程。每个线程都将在其指定的分区下查看用户文件夹列表,同时装入本地过期规则文件。过期功能将按照适用于该文件夹的过期规则检查每个文件夹,并根据需要擦除邮件。如果在邮箱目录下存在 store.exp 文件,并且邮件由于超出了 store.cleanupage 配置参数指定的时间而被擦除/过期,清除功能将在邮件散列目录下永久删除邮件文件,并从 store.exp 文件中永久删除用户 ID 记录。
部署自动删除邮件功能
可以通过命令行或使用 Console GUI 部署自动删除邮件。此过程需要三个步骤:
- 定义自动删除邮件策略:哪些邮件将被自动删除?哪些用户、域和分区将使邮件自动被删除?哪些大小、邮件生存期、标题将定义删除条件。请参见定义自动删除邮件策略。
- 指定 imexpire 规则以实现此策略。请参见设置实现自动删除邮件策略的规则。
- 指定 imexpire 时间安排。请参见安排自动删除邮件和日志记录级别。
定义自动删除邮件策略
通过指定删除条件定义自动删除邮件策略。imexpire 允许使用以下条件进行删除:
邮件的生存期。自动删除存在的时间超过 X 天的邮件。属性:messagedays。
邮件计数。自动删除文件夹中超出 X 封邮件的邮件。属性:messagecount。
超大邮件的生存期。自动删除在 Y 天宽限期后超过 X 字节的邮件。属性:messagesize 和 messagesizedays。
已读和已删除邮件标志。自动删除带有已读或已删除标志设置的邮件。这些条件可以设置为“and”或“or”。如果设置为 or,则邮件的已读/删除标志将导致自动删除而不管其它条件。如果设置为 and,则邮件的已读/删除标志必须设置为与所有其它指定的条件一起使用。属性:seen 和 deleted。
邮件的标题字段。允许您将标题和字符串指定为删除邮件的条件。例如,删除所有带有标题“Subject:Work from Home!”的邮件
邮件的文件夹。允许您指定要从其中删除邮件的文件夹。属性:folderpattern
自动删除邮件策略的示例
示例 1:删除超过 1,000 封邮件的文件夹中所有存在时间达到 365 天的邮件。
示例 2:删除域 siroe.com 中 180 天以上的邮件。
示例 3:删除所有已标记为已删除的邮件。
示例 4:删除 sesta.com 中已标记为已读、30 天以上、大于 100 千字节、位于超过 1,000 封邮件的文件夹中、带有标题 X-spam 的邮件。
设置实现自动删除邮件策略的规则
要实现上一节中定义的自动删除邮件策略,必须设置 imexpire 规则。可以通过以下方式设置规则:
- 通过 GUI(请参见图 15-4)。
- 通过设置 store.expirerule.attribute configutil 参数。
在此示例中,规则 1 指定垃圾文件夹中的所有邮件将在两天后被删除。规则 2 指定邮件存储中的所有邮件将在 14 天后被删除。
过期规则原则
本节介绍设置 store.expirerule.attribute configutil 参数和 store.expirerule 文件规则的原则。
- 在名为 store.expirerule 的文件中指定规则,或者通过使用 configutil 参数 store.expirerule.rulename.attribute 指定规则。
- 可以使用相同的规则指定多个过期条件。(请参见以上示例。)
- 规则可以应用到整个邮件存储(全局规则)、邮件存储分区、用户或文件夹。只能使用 store.expirerule 规则创建非全局规则。
- 通过使用 configutil 参数 store.expirerule.rulename.attribute 创建全局规则,或者通过在 msg_svr_base/config/store.expirerule 中指定规则创建全局规则。
- 可以通过在 store_root/partition/partition_name/store.expirerule 中指定规则创建分区规则。
- 可以通过在 store_root/partition/partition_name/userid/store.expirerule 中指定规则创建用户规则,或者通过将 folderpattern 规则指定为 user/userid/.* 来创建用户规则。
- 多个过期规则可以同时应用于一个邮箱。邮箱的过期策略由全局规则和本地规则组成。本地规则适用于同一目录下的邮箱及其所有子文件夹。
- 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!对于标题过期和过期日期,如果在这些标题字段中指定的日期值早于 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 中的一组过期规则。
规则 1 设置全局过期策略(即应用于所有邮件的策略),如下所示:
规则 2 为托管域 siroe.com 中的用户设置自动删除邮件策略。它将邮箱大小限制为 1 兆字节,删除已删除的邮件,并删除 14 天前的邮件。
规则 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/.*
将规则应用于特定分区。
使用 Console 设置自动删除邮件规则
- 调出自动删除邮件 GUI,如下所示:
“主 Console”>“服务器组”>“Messaging Server”(打开)>“Messaging Server Console”>“配置”选项卡>“邮件存储”>“过期/清除”>“添加”
图 15-4 中显示了 GUI 的草图。
图 15-4 自动删除邮件(过期/清除)GUI 草图
- 输入新规则的名称。
- 输入将从其中自动删除邮件的文件夹。
请参见上述设置 imexpire 文件夹模式。
- 如果此规则是与指定条件相匹配的文件夹的专用规则,则请选取“Exclusive”框。
如果已选取此框,则此规则将优先于与指定模式相匹配的所有其它规则。有关专用复选框的详细信息,请参见表 15-7。
- 要创建基于文件夹大小的规则,请执行以下操作:
- 要创建基于邮件生存期的规则,请选取“邮件生存期约束”复选框:
在“天数”字段中,指定邮件可以在文件夹中保存的时间(以天为单位)。
- 要创建基于邮件大小的规则,请执行以下操作:
- 要创建基于是否已设置“已读”或“已删除”标志的规则,请执行以下操作:
- 要创建基于标题字段及其值的规则,请执行以下操作:
- 单击“确定”以将新规则添加到“自动删除邮件”列表中。
安排自动删除邮件和日志记录级别
通过 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这些值以空格或 Tab 分隔符分隔,可以分别为 0-59、0-23、1-31、1-12 或 0-6(其中 0 = 星期天)。每个时间字段都可以为以下内容之一:一个星号(表示所有合法值)、一个以逗号分隔的值的列表或一个以连字符分隔的两个值表示的范围。请注意,可以同时用几号和星期几指定时间,但是通常不同时使用这两者,因为这种情况很少发生。如果同时指定了这两者,则需要同时满足两者。例如,设置月份的第 17 日和星期二将要求同时满足两个值。
时间间隔示例:
1) 在 12:30am、8:30am 和 4:30pm 运行 imexpire:
30 0,8,16 * * *2) 在工作日早晨 3:15 am 运行 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
使用 Console 进行 imexpire 时间安排
调出自动删除邮件 GUI,如下所示:
“主 Console”>“服务器组”>“Messaging Server”(打开)>“Messaging Server Console”>“配置”选项卡>“邮件存储”>“过期/清除”
此 Console 页面在顶部列出过期规则,在底部列出过期和清除时间安排。要安排过期和清除的日程,请使用“过期/清除时间安排”中的下拉式菜单为过期和清除设置月份、月份日期、星期日期(其中 0 = 星期天)、小时和分钟。
设置 imexpire 日志记录级别
imexpire 将在完成时记录缺省日志文件的摘要。如果从命令行调用过期命令,则 -v(冗余)和 杁(调试)选项可以用于指示 imexpire 记录 stderr 的详细状态/调试消息。如果通过 imsched 调用 imexpire,则 configutil 参数 local.store.expire.loglevel 可以设置为 1、2 或 3 以进行不同级别的日志记录。Loglevel 1 是缺省值,将记录整个过期会话的摘要。Loglevel 2 将对每个过期邮箱记录一条消息。Loglevel 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 必须具有对物理路径中指定的位置的写入权限。
Console 要使用 Console 向存储添加分区,请执行以下操作:
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 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 服务。
执行邮件存储维护过程本节提供有关用于执行邮件存储的维护和恢复任务的实用程序的信息。您应该始终阅读服务器可能发送的用于警告和警报的邮寄主管邮件。您还应监视日志文件以获取有关服务器如何执行操作的信息。有关日志文件的详细信息,请参见第 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 实用程序将在每天的 11 PM 自动执行一次清除和过期操作。您可以选择运行其它清除和过期操作。
表 15-12 列出了一些 stored 选项。表后还提供了一些通用使用示例。有关详细的语法和使用要求,请参见 Messaging Server Reference Manual。
表 15-12 stored 选项
选项 说明
-d
OBSOLETE。使用 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 将邮件文件的设备和索引节点用作索引来维护所有邮件的散列表。但是,恢复数据时,此方法确实会产生一些影响。有关详细信息,请参见部分恢复的注意事项。
本节包含以下小节:
创建邮箱备份策略
备份策略将取决于若干因素,例如:
高峰业务负载
安排系统备份时,需要考虑到高峰业务负载,因为这在高峰时段可以减少系统负载。例如,清晨时段(例如 2:00 AM)可能是安排备份的最佳时段。
完全备份和增量备份
增量备份将扫描存储查找更改的数据,并仅备份已经更改的内容。完全备份将备份整个邮件存储。需要确定与增量备份相比系统执行完全备份的频率。您可能需要将增量备份作为每日维护过程执行,而每星期执行一次完全备份。
并行备份和串行备份
用户数据存储在多个磁盘中时,如果需要,可以并行备份用户组。根据系统资源,并行备份可以加速整体备份过程。但是,如果要减少备份对服务器性能的影响,可能需要使用串行备份。使用并行备份还是串行备份可能取决于许多因素,包括系统负载、硬件配置、有多少可用的磁带驱动器等等。
创建备份组
备份组是由正则表达式定义的任意用户邮箱集。通过将用户邮箱组织成备份组,您可以定义更灵活的备份管理。
例如,您可以创建三个备份组,第一个组包含以字母 A 至 L 开始的用户 ID,第二个组包含用户 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 被指定了新的索引节点编号,并且邮件数据被写入磁盘上的新位置。仅恢复了一封邮件;第二封邮件是第一封邮件的硬链接。
示例 2。在此示例中,系统执行完全备份和部分恢复,如下所示:
A/INBOX/1 被指定了新的索引节点编号。
示例 3。在此示例中,部分恢复可能需要多次尝试:
使用 Legato Networker
Messaging Server 包括提供了带有第三方备份工具(例如 Legato Networker)的界面的备份 API。物理邮件存储结构和数据格式封装在备份 API 中。备份 API 将直接与邮件存储进行交互式操作。它显示了备份服务的邮件存储的逻辑视图。备份服务使用邮件存储的概念表示法来存储和检索备份对象。
Messaging Server 为备份和恢复邮件存储数据提供了可以由 Legato Networker 的 save 和 recover 命令调用的应用程序特定模块 (ASM)。然后,ASM 将调用 Messaging Server 的 imsbackup 和 imsrestore 实用程序。
使用 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/ 中,为您的保存组创建 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 保存组。
- 使用 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 命令行实用程序。以下示例将恢复用户 a1 的 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 不支持大型文件,如果备份数据大于 2 GB,则需要使用 -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
===========================================================================
ed 17/Jun/2003:11:24:03 plain 172.58.73.45:193 129.157.12.73:2631
bill 17/Jun/2003:04:28:43 plain 172.58.73.45:193 129.158.16.34:2340
mia 17/Jun/2003:09:36:54 plain 172.58.73.45:193 192.18.184.103:3744
jay 17/Jun/2003:05:38:46 plain 172.58.73.45:193 129.159.18.123:3687
paul 17/Jun/2003:12:23:28 plaintext 172.58.73.45:193 192.18.194.83:2943
tony 17/Jun/2003:05:38:46 plain 172.58.73.45:193 129.152.18.123:3688
anil 17/Jun/2003:12:26:40 plaintext 172.58.73.45:193 192.18.164.17:1767
anil 17/Jun/2003:12:25:17 plaintext 172.58.73.45:193 129.150.17.34:3117
jack 17/Jun/2003:12:26:32 plaintext 172.58.73.45:193 129.150.17.34:3119
toni 17/Jun/2003:12:25:32 plaintext 172.58.73.45:193 192.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。您可以从 Console 或目录 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 最终会出现问题。如果 start-msg 运行时 stored 未启动,则其它进程也不会启动。
有关 stored 进程的详细信息,请参见使用 stored 实用程序和 Messaging Server Reference Manual 的“Messaging Server Command-line Utilities”一章中关于 stored 实用程序的部分。
有关监视 stored 功能的其它信息,请参见监视邮件存储。
检查数据库日志文件
数据库日志文件指 sleepycat 事务检查点日志文件(在目录 store_root/mboxlist 中)。如果日志文件堆积,则不会出现数据库检查点操作。通常,单个时间段内存在两个或三个数据库日志文件。如果有更多文件,则可能是问题的征兆。
检查用户文件夹
如果要检查用户文件夹,可以运行命令
reconstruct -r -n(递归无修复),此命令将查阅所有用户文件夹并报告错误。有关 reconstruct 命令的详细信息,请参见修复邮箱和邮箱数据库。检查主存文件
仅当进程已经意外终止时才会存在主存文件。查阅这些文件很重要,特别是在邮件存储中发现问题时。在 Solaris 中,使用 coreadmin 配置 core 文件位置。
邮件存储启动和恢复
邮件存储数据由邮件、索引数据和邮件存储数据库组成。虽然此数据相当可靠,在极少时候系统中也可能出现邮件存储数据问题。这些问题将在缺省日志文件中指出,并且几乎始终透明地被修复。在极少情况下,日志文件中的错误消息可能会指出您需要运行 reconstruct 实用程序。此外,作为最后的手段,邮件将由备份并恢复邮件存储中所述的备份和恢复进程保护。本节将着重说明 stored 的自动启动和恢复进程。
邮件存储自动执行许多恢复操作,这以前是管理员的职责。启动期间,邮件存储守护程序 stored 将执行这些操作,包括数据库快照和必要时的自动快速恢复。stored 将彻底检查邮件存储的数据库并在检测到问题时自动启动修复。
stored 还通过缺省日志的状态消息提供数据库状态的综合分析,报告对邮件存储完成的修复和使其运行的自动尝试。
自动启动和恢复 — 操作原理
stored 守护程序将在其它邮件存储进程之前启动。如果有必要,它将初始化并恢复邮件存储数据库。邮件存储数据库可保存文件夹、配额、订阅和邮件标志信息。数据库可以进行日志记录和处理事务,因此已经内置了恢复。此外,某些数据库信息将在每个文件夹的邮件索引区域中大量地被复制。
尽管数据库相当可靠,但在极少情况下也会中断。在大多数情况下,stored 可以透明地恢复和修复数据库。但是,无论何时重新启动 stored,都应检查缺省日志文件以确保不需要其它管理介入。如果数据库需要进一步重建,日志文件中的状态消息将提醒您运行 reconstruct。
打开邮件存储数据库前,stored 将分析其完整性,并将状态消息发送到警告类别下的缺省日志。某些邮件将对管理员很有用,某些邮件将由用于内部分析的编码数据组成。如果 stored 检测到任何问题,则将尝试修复数据库并尝试再次启动数据库。
打开数据库时,stored 将以信号表明其余服务可以启动。如果自动修复失败,缺省日志中的消息将指定要采取的措施。有关详细信息,请参见表示需要 reconstruct -m 的错误消息。
在上一版本中,stored 可能会花费很长时间启动恢复进程,使管理员怀疑 stored 是否被“阻塞”了。这种长时间的恢复现在已不存在,stored 将在一分钟内确定最终状态。但是,如果 stored 需要使用恢复技术(例如从快照恢复),则进程可能会花费几分钟时间。
大多数恢复之后,数据库通常会更新,并且不需要进行任何其它操作。但是,某些恢复需要 reconstruct -m 以便与邮件存储中的冗余数据同步。同样,这会在缺省日志中说明,因此启动后监视缺省日志非常重要。即使邮件存储看起来启动和运行正常,运行任何要求的操作(例如 reconstruct)都是很重要的。
阅读日志文件的另一个原因是可以首先确定导致数据库损坏的原因。尽管 stored 用于调出邮件存储,而不管系统中的任何问题,但是您仍要尝试确定导致数据库损坏的原因,因为这可能是更大的隐藏问题的征兆。
表示需要 reconstruct -m 的错误消息
本节介绍需要运行 reconstruct -m 的错误消息类型。
错误消息指示邮箱错误时,运行 reconstruct <mailbox>。示例:
“邮箱 user/joe/INBOX 中的邮件 102 的高速缓存数据无效。需要重建”
“邮箱已破坏,缺少固定标题: user/joe/INBOX”
“邮箱已破坏,start_offset 在 EOF: user/joe/INBOX 之外”
当错误消息指示数据库错误时,请运行 reconstruct -m。示例:
“正在删除附加数据库日志。请在启动后立即运行 reconstruct -m 以再同步冗余数据”
“从快照恢复数据。请在启动后立即运行 reconstruct -m 以再同步冗余数据”
数据库快照
快照是数据库的热备份,由 stored 使用以在几分钟内透明地恢复中断的数据库。这比使用 reconstruct 要快得多,后者依赖于其它区域中存储的冗余信息。
邮件存储数据库快照操作原理
缺省情况下,每 24 小时自动获取一次数据库(位于 mboxlist 目录中)的快照。缺省情况下,快照被复制到 store 目录的子目录中。缺省情况下,在任意给定时间有五个快照:一个实时数据库、三个快照和一个数据库/已删除副本。数据库/已删除副本比较新,并且是抛入 mboxlist 数据库目录的子目录 removed 中的数据库的紧急副本。
如果恢复进程由于确定数据库已损坏而决定删除当前数据库,stored 会将其移入 removed 目录(如果可以)。此操作允许在需要时对数据库进行分析。
数据移动一周仅发生一次。如果已存在数据库的副本,stored 将不会在每次进行存储时替换副本。如果 removed 目录中的数据是一星期以前的数据,则仍将替换副本。这是为了防止有问题的原始数据库由于连续启动被替换太快。
指定邮件存储数据库快照的时间间隔和位置
应有五倍的空间用于组合的数据库和快照。强烈建议管理员重新配置快照以在单独的磁盘上运行,并调节快照以满足系统需求。
如果 stored 在启动时检测到数据库的问题,最好的快照将自动被恢复。有三个快照变量,可以设置以下参数:快照文件的位置、获取快照的时间间隔、保存的快照数量。表 15-14 显示了这些 configutil 参数。
获取快照时间间隔太小将会导致给系统带来频繁的负担,并更有可能会将数据库中的问题复制为快照。获取快照时间间隔太大意味着获取快照时数据库要保持过去的状态。
建议采用一天的快照时间间隔,如果问题将在系统中保存若干天并且您希望返回问题存在的时间点以前的时段,则一周或更长的快照时间间隔会很有用。
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.exp 文件。
-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
如果使用 -o 选项指定了 -d filename,则 reconstruct 将打开指定文件并将 mboxutil -d 命令写入该文件。然后可以将文件转变为脚本文件,以删除孤立帐户。
-p partition
指定分区名称;不使用全路径名。如果未指定此选项,reconstruct 将默认为对所有分区执行操作。
-q
修复配额子系统中的所有不一致性,例如带有错误配额根(其中报告了错误的配额使用情况)的邮箱。其它服务器进程正在运行时,可以运行 -q 选项。
-r [mailbox]
修复并对指定邮箱的分区区域执行一致性检查。-r 选项还将修复指定邮箱内的所有子邮箱。如果不使用任何邮箱参数指定 -r,实用程序将修复用户分区目录内的所有邮箱的假脱机区域。
重建邮箱
要重建邮箱,请使用 -r 选项。您应在以下情况使用此选项:
使用 5.0 版本时,reconstruct -r 首先将运行一致性检查。仅在检测到任何问题时报告所有一致性并重建。因此,重建实用程序的性能将在此版本内得到改善。
您可以使用以下示例中所述的 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 Command-line Utilities”一章中关于 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 命令的详细信息,请参见修复邮箱和邮箱数据库。
store 守护程序不启动
如果 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 和该组。