Sun logo      上一个      目录      索引      下一个     

Sun ONE Messaging Server 6.0 管理员指南

第 15 章
管理邮件存储

本章介绍了邮件存储和邮件存储管理界面。本章包含以下各节:


概述

邮件存储包含特定 Messaging Server 实例的用户邮箱。邮件存储的大小随邮箱、文件夹和日志文件的数量的增加而增加。可以通过指定对邮箱大小(磁盘配额)的限制、指定对允许的邮件总数的限制以及为存储中的邮件设置生存期策略来控制存储的大小。

向系统添加更多用户时,磁盘存储要求会相应增加。根据服务器支持的用户的数量,邮件存储可能需要一个物理磁盘或多个物理磁盘。将此附加磁盘空间集成到系统中的方法有两种。最简单的方法是添加附加邮件存储分区(请参见配置邮件存储分区)。

同样,如果要支持多个托管域,您可能需要将一个服务器实例专用于一个大型域。通过此配置,您可以为特定域指定存储管理员。还可以通过添加更多分区扩展邮件存储。

为管理邮件存储,除了 Sun ONE Console 界面,Messaging Server 还提供了一系列命令行实用程序。表 15-1 介绍了这些命令行实用程序。有关使用这些实用程序的信息,请参见执行邮件存储维护过程Messaging Server Reference Manual

表 15-1 邮件存储命令行实用程序

实用程序

说明

configutil

设置和修改存储的配置参数。

deliver

将邮件直接传送至 IMAP 或 POP 邮件客户机可以访问的邮件存储。

hashdir

标识包含用于特定用户的邮件存储的目录。

imsconnutil

监视邮件存储的用户访问。

imexpire

根据管理员指定的条件(如生存期)自动从邮件存储中删除邮件。

iminitquota

从 LDAP 目录重新初始化配额限制并重新计算要使用的磁盘空间。

imsasm

处理用户邮箱的保存和恢复。

imsbackup

备份已存储邮件。

imsexport

将 Certificate Management System 邮箱导出至 UNIX /var/mail 格式文件夹中。

imsrestore

恢复已备份的邮件。

imscripter

IMAP 服务器协议脚本撰写工具。执行一个命令或一序列命令。

mboxutil

列出、创建、删除、重命名或移动邮箱;报告配额使用情况。

mkbackupdir

创建备份目录并使其与邮件存储中的信息同步。

MoveUser

将用户的帐户从一个邮件传送服务器移动到另一个邮件传送服务器。

imquotacheck

计算邮件存储中每个用户的邮箱总大小,并与其指定的配额进行比较。imquotacheck 通知的本地化版本未正确转换 % 和 $ 符号。要更正编码,请将邮件文件中的每个 $ 替换为 \24,将每个 % 替换为 \25。

readership

收集共享 IMAP 文件夹中的读者身份信息。

reconstruct

重建已被损坏或破坏的邮箱。

stored

执行后台任务和每日任务,擦除和删除磁盘上存储的邮件。


邮件存储目录布局

图 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/

邮件存储的顶层目录。包含 mboxlistuserpartition 子目录。

./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。对于缺省域,useriduid。对于托管域,useriduid@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 目录中,依此类推。


邮件存储如何删除邮件

从邮件存储中删除邮件分三个阶段:

  1. 删除。客户机将邮件标志设置为删除。此时邮件被标记为删除,但是通过去掉删除标志,客户机仍然可以恢复邮件。如果有第二个客户机,则已删除标志可能不会立即被该客户机识别。可以设置 configutil 参数 local.imap.immediateflagupdate 以使标志立即更新。
  2. 擦除。邮件将从邮箱中删除。从技术上讲,邮件将从邮件存储索引文件 store.idx 中删除。邮件本身仍然在磁盘上,但是一旦邮件被擦除,客户机将不能再恢复邮件。
  3. 过期是擦除的一个特例。符合管理员定义的一组删除条件(例如邮件大小、生存期等)的邮件将被擦除。请参见设置自动删除邮件(过期和清除)功能

  4. 清除。缺省情况下,stored 实用程序将在每天晚上 11 点从磁盘上清除所有已被擦除的邮件。可以使用控制邮件清除时间安排的 local.schedule.purge 和控制清除宽限期(邮件被清除之前的时间段)的 store.cleanup 配置此功能。


指定管理员对存储的访问权限

邮件存储管理员可以查看和监视用户邮箱,并指定邮件存储的访问控制。存储管理员具有对任何服务(POP、IMAP、HTTP 或 SMTP)的代理验证权限,这意味着他们可以使用任何用户的权限对任何服务进行验证。这些权限允许存储管理员运行特定的实用程序以管理存储。例如,存储管理员使用 MoveUser 可以将用户帐户和邮箱从一个系统移动到另一个系统。

本节介绍如何将存储权限授予邮件存储以进行 Messaging Server 安装。


其他用户可能也具有对存储的管理员权限。例如,某些管理员可能具有这些权限。


您可以执行以下小节中所述的管理员任务:

添加管理员

Console     要通过 Console 添加管理员条目,请执行以下操作:

  1. 从 Console 中打开要配置的 Messaging Server。
  2. 单击“配置”选项卡,并在左窗格中选择“邮件存储”。
  3. 单击“管理员”选项卡。
  4. 该选项卡包含现有管理员 ID 的列表。

  5. 单击“管理员 UID”窗口旁边的“添加”按钮。
  6. 在“管理员 UID”字段中,键入要添加的管理员的用户 ID。
  7. 键入的用户 ID 必须是 Sun ONE Directory Server 所知晓的。

  8. 单击“确定”以将管理员 ID 添加到“管理员”选项卡中显示的列表。
  9. 单击“管理员”选项卡中的“保存”以保存新修改的“管理员”列表。

命令行     要通过命令行添加管理员条目,请使用以下命令:

configutil -o store.admins -v "adminlist"

其中 adminlist 是以空格分隔的管理员 ID 的列表。如果指定多个管理员,必须将列表包含在引号中。此外,管理员必须是服务管理员组的成员(位于 LDAP 用户条目:memberOf:cn=Service Administrators,ou=Groups,o=usergroup)。

修改管理员条目

Console     要通过 Console 修改邮件存储“管理员 UID”列表中的现有条目,请执行以下操作:

  1. 单击“管理员”选项卡。
  2. 单击“管理员 UID”窗口旁边的“编辑”按钮。
  3. 将更改输入“管理员 UID”字段。
  4. 单击“确定”以提交更改并关闭“编辑管理员”窗口。
  5. 单击“管理员”选项卡中的“保存”以提交并保存已修改的“管理员”列表。

命令行     要通过命令行修改邮件存储“管理员 UID”列表中的现有条目,请运行以下命令:

configutil -o store.admins -v "adminlist"

删除管理员条目

Console     要使用 Console 从邮件存储“管理员 UID”列表中删除条目,请执行以下操作:

  1. 单击“管理员”选项卡。
  2. 在“管理员 UID”列表中选择一项。
  3. 单击“删除”以删除该项。
  4. 单击“保存”以提交并保存对“管理员”列表的更改。

命令行     要通过命令行删除存储管理员,可以如下所示编辑管理员列表:

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 命令。

表 15-3 ACL 权限字符

字符

说明

l

查找 - 用户可以查看和订阅共享文件夹。(允许的 IMAP 命令:LISTLSUB

r

读取 - 用户可以读取共享文件夹。(允许的 IMAP 命令:对文件夹进行操作的命令 SELECTCHECKFETCHPARTIALSEARCHCOPY

s

已读 - 指示系统保存多个会话的已读信息。(设置 IMAP STORE SEEN 标志)

w

写入 - 用户在读取和删除邮件时可以进行标记。(设置 IMAP STORE 标志,而不是 SEENDELETED

i

插入 -用户可以将电子邮件从一个文件夹复制和移动到另一个文件夹。(允许的 IMAP 命令:APPENDCOPY 到文件夹中)

p

邮寄 - 用户可以将邮件发送到共享文件夹电子邮件地址。(无需任何 IMAP 命令)

c

创建 - 用户可以创建新的子文件夹。(允许的 IMAP 命令:CREATE

d

删除 - 用户可以从共享文件夹中删除条目。(允许的 IMAP 命令:EXPUNGE 和设置 STORE DELETED 标志)

a

管理员 - 用户具有管理权限。(允许的 IMAP 命令:SETACL

组 ACL

ACL 条目的标识符可以指定组的名称。此条目的访问权限适用于该组的所有成员。服务器通过 inetMailUser 对象类的 aclGroupAddr 属性确定组的成员资格。组通过在 aclGroupAddr 属性上有一个过滤器的动态邮递列表来表示。以下示例显示了定义组的 LDIF 记录,包括 aclGroupAddr 属性:

dn:cn=lee-staff,ou=Groups, o=sesta.com

cn:lee-staff

mailHost:mail.sesta.com

inetMailGroupStatus:active

mgrpErrorsTo:lee.jones@sesta.com

description:Dynamic Group of Lee’s staff

objectClass:top

objectClass:groupofuniquenames

objectClass:inetmailgroup

objectClass:inetmailgroupmanagement

objectClass:inetlocalmailrecipient

objectClass:groupofurls

mail:lee-staff@sesta.com

memberURL:ldap:///o=sesta.com??sub?

(&(aclGroupAddr=lee-staff@sesta.com)(objectclass=inetmailuser))

在文件夹的 ACL 中使用组电子邮件地址时,不必创建组。实际上,在向组添加成员时,创建这样的动态组并对用户条目设置 aclGroupAddr 属性是有意义的。一旦创建了这样的组,就可以通过使用属性 mgrpRfc822MailMember 中相应的电子邮件地址添加静态外部成员。不应使用 uniqueMember 属性添加成员,也不应通过创建 memberURL 属性的其它值添加成员。这样做会导致 MTA 视为邮递列表成员的成员与 IMAP 服务器视为组成员的成员之间断开连接。

用户登录到 IMAP 服务器或使用 HTTP 访问服务客户机(例如 Messenger Express)登录时,服务器将获取 aclGroupAddr 属性(以及其它与邮件存储相关的属性)并在内存中缓存组的名称。服务器使用此信息确定用户的访问权限,无论客户机何时发出要求访问权限验证的命令(例如 LISTSELECT)。


共享文件夹任务

本节介绍了共享文件夹的管理员任务:

创建公用文件夹

由于公用文件夹需要访问 LDAP 数据库和使用 readership 命令,因此必须由系统管理员创建公用文件夹。

  1. 添加将用作所有公用文件夹的容器的 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

  2. 使用 mboxutil 命令行实用程序在公用帐户内创建文件夹。例如:
  3. mboxutil -c user/public/golftournament

  4. 使用 readership 命令行实用程序为此文件夹设置相应的 ACL。
  5. 要使此文件夹公用,必须指定一组可以访问它的用户。可以通过使用 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)。

SELECTLSUB 命令不受此选项的影响。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_releasesAnnouncements 的公用共享文件夹。三个服务器中任何一个上的用户均可以访问这三个共享文件夹中的任何一个。图 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.dbperuser.dblright.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.dbfolder.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,请执行以下操作:

  1. 从 Console 中打开要配置的 Messaging Server。
  2. 单击“配置”选项卡,并在左窗格中选择“邮件存储”。
  3. 在右窗格中单击“配额”选项卡。

指定缺省用户配额

缺省配额适用于尚未为其设置单个配额的用户。为单个用户设置的配额将覆盖缺省配额。

Console     要通过 Console 指定缺省配额,请执行以下操作:

  1. 单击“配额”选项卡。
  2. 要指定缺省用户磁盘配额,对于“缺省用户磁盘配额”字段,请选择以下选项之一:
  3. 无限制。如果不需要设置缺省磁盘配额,请选择此选项。

    指定大小。如果要将缺省用户磁盘配额限制为特定大小,请选择此选项。在按钮旁边的字段中键入数字,并从下拉式列表中选择“兆字节”或“千字节”。

  4. 要指定邮件数量配额,请在“缺省用户邮件配额”框中键入数字。
  5. 单击“保存”。

命令行     要指定总邮件大小的缺省用户磁盘配额,请运行以下命令:

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 启用强制配额,请执行以下操作:

  1. 单击“配额”选项卡。
  2. 选取“启用强制配额”框。
  3. 此框将用于切换。要禁用强制配额,则取消选取此框。

  4. 单击“保存”。

命令行     要通过命令行启用或禁用强制配额,请运行以下命令:

configutil -o store.quotaenforcement -v [ on | off]

要拒绝将促使邮件存储超出其配额的邮件,请运行以下命令:

configutil -o local.store.quotaoverdraft -v off

要在超出配额后启动强制(即在启动强制配额前接受将促使邮件存储超出配额的邮件),则将以上值设置为 on。缺省值为 off。

启用配额通知

Console     要通过 Console 启用配额通知,请执行以下操作:

  1. 单击“配额”选项卡。
  2. 选取“启用配额通知”框。
  3. 此框将用于切换。要禁用配额通知,则取消选取此框。

  4. 定义配额警告邮件
  5. 请参见定义配额警告邮件

  6. 单击“保存”。

命令行     要通过命令行启用配额通知,请运行以下命令:

configutil -o store.quotanotification -v [ yes | no ]
configutil -o store.quotaexceededmsg -v message

如果未设置邮件,则不会向用户发送任何配额警告邮件。有关配额警告邮件格式的示例,请参见下一节。

定义配额警告邮件

您可以定义将发送给超出其磁盘配额的用户的邮件,如下所示。邮件被发送到用户的邮箱。

Console     要通过 Console 定义配额警告邮件,请执行以下操作:

  1. 单击“配额”选项卡。
  2. 从下拉式列表中选择要使用的语言。
  3. 在下拉式列表下面的邮件文本字段中键入要发送的邮件。
  4. 单击“保存”。

命令行     要通过命令行定义配额警告邮件,请运行以下命令:

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 指定配额阈值,请执行以下操作:

  1. 单击“配额”选项卡。
  2. 在“配额警告阈值”字段中输入警告阈值的数值。
  3. 此数值表示允许的配额的百分比。例如,如果指定 90%,则将在使用了 90% 的允许的磁盘配额后警告用户。缺省值为 90%。要关闭此功能,请输入 100%。

  4. 单击“保存”。

命令行     要通过命令行指定配额阈值,请运行以下命令:

configutil -o store.quotawarn -v number

其中 number 表示允许的配额的百分比。

设置宽限期

宽限期将指定邮件被退回发件人之前邮箱可以超出配额(磁盘空间或邮件数量)的时间。邮件被 MTA 接受,但保留在 MTA 队列中而不被传送到邮件存储,直到发生以下情况之一:

例如,如果您的宽限期设置为两天,而您超出了配额一天,则将继续接收新邮件并将其保留在邮件队列中,并继续进行传送尝试。第二天以后,邮件将退回。


宽限期不是邮件将在邮件队列中保留的时间,而是退回所有外来邮件(包括邮件队列中的邮件)之前邮箱可以超出配额的时间。用户达到配额阈值(请参见指定配额阈值)并被警告时,宽限期将启动。


Console     要通过 Console 设置邮件在队列中保存时间的宽限期,请执行以下操作:

  1. 单击“配额”选项卡。
  2. 在“超出配额宽限期”字段中输入一个数字。
  3. 从下拉式列表中,指定 Day(s)Hour(s)
  4. 单击“保存”。

命令行     要通过命令行指定配额宽限期,请运行以下命令:

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 部署自动删除邮件。此过程需要三个步骤:

  1. 定义自动删除邮件策略:哪些邮件将被自动删除?哪些用户、域和分区将使邮件自动被删除?哪些大小、邮件生存期、标题将定义删除条件。请参见定义自动删除邮件策略
  2. 指定 imexpire 规则以实现此策略。请参见设置实现自动删除邮件策略的规则
  3. 指定 imexpire 时间安排。请参见安排自动删除邮件和日志记录级别

定义自动删除邮件策略

通过指定删除条件定义自动删除邮件策略。imexpire 允许使用以下条件进行删除:

邮件的生存期。自动删除存在的时间超过 X 天的邮件。属性:messagedays

邮件计数。自动删除文件夹中超出 X 封邮件的邮件。属性:messagecount

超大邮件的生存期。自动删除在 Y 天宽限期后超过 X 字节的邮件。属性:messagesizemessagesizedays

已读已删除邮件标志。自动删除带有已读已删除标志设置的邮件。这些条件可以设置为“and”“or”。如果设置为 or,则邮件的已读/删除标志将导致自动删除而不管其它条件。如果设置为 and,则邮件的已读/删除标志必须设置为与所有其它指定的条件一起使用。属性:seendeleted

邮件的标题字段。允许您将标题和字符串指定为删除邮件的条件。例如,删除所有带有标题“Subject:Work from Home!”的邮件

邮件的文件夹。允许您指定要从其中删除邮件的文件夹。属性:folderpattern


imexpire 不允许根据邮件被读取后已存在的时间删除或保留邮件。例如,不能指定删除已经有 200 天未被读取的邮件。


自动删除邮件策略的示例

示例 1:删除超过 1,000 封邮件的文件夹中所有存在时间达到 365 天的邮件。

示例 2:删除域 siroe.com 中 180 天以上的邮件。

示例 3:删除所有已标记为已删除的邮件。

示例 4:删除 sesta.com 中已标记为已读、30 天以上、大于 100 千字节、位于超过 1,000 封邮件的文件夹中、带有标题 X-spam 的邮件。

设置实现自动删除邮件策略的规则

要实现上一节中定义的自动删除邮件策略,必须设置 imexpire 规则。可以通过以下方式设置规则:

在此示例中,规则 1 指定垃圾文件夹中的所有邮件将在两天后被删除。规则 2 指定邮件存储中的所有邮件将在 14 天后被删除。

过期规则原则

本节介绍设置 store.expirerule.attribute configutil 参数和 store.expirerule 文件规则的原则。

按文本设置 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.dostoevskiinbox 文件夹中的邮件设置自动删除邮件策略。它将删除主题行带有表达式“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 设置自动删除邮件规则
  1. 调出自动删除邮件 GUI,如下所示:
  2. “主 Console”>“服务器组”>“Messaging Server”(打开)>“Messaging Server Console”>“配置”选项卡>“邮件存储”>“过期/清除”>“添加”

    图 15-4 中显示了 GUI 的草图。

    图 15-4 自动删除邮件(过期/清除)GUI 草图
    图形中显示了自动删除邮件 GUI 的近似图。

  3. 输入新规则的名称。
  4. 输入将从其中自动删除邮件的文件夹。
  5. 请参见上述设置 imexpire 文件夹模式

  6. 如果此规则是与指定条件相匹配的文件夹的专用规则,则请选取“Exclusive”框。
  7. 如果已选取此框,则此规则将优先于与指定模式相匹配的所有其它规则。有关专用复选框的详细信息,请参见表 15-7

  8. 要创建基于文件夹大小的规则,请执行以下操作:
    • 选取“文件夹大小约束”复选框。在“邮件计数”字段中,指定在最早的邮件被删除之前文件夹中将保留的邮件的最大数目。在“文件夹大小”字段中,指定最早的邮件被删除之前最大的文件夹大小(以字节为单位)。
  9. 要创建基于邮件生存期的规则,请选取“邮件生存期约束”复选框:
  10. 在“天数”字段中,指定邮件可以在文件夹中保存的时间(以天为单位)。

  11. 要创建基于邮件大小的规则,请执行以下操作:
    • 选取“邮件大小限制约束”复选框。在“邮件大小限制”字段中,输入文件夹中允许的邮件的最大大小。在“宽限期”字段中,输入超大邮件被删除前将在文件夹中保存的时间。
  12. 要创建基于是否已设置“已读”或“已删除”标志的规则,请执行以下操作:
    • 选取“邮件标志约束”复选框。
    • 对于“已读:”字段,选择“和”将指定邮件必须已被阅读在规则实施前必须满足另一个条件。选择“或”将指定邮件仅需已被阅读在规则实施前满足另一个条件。
    • 对于“已删除:”字段,选择“和”将指定邮件必须被删除在规则实施前必须满足另一个条件。选择“或”将指定邮件仅需被删除在规则实施前满足另一个条件。
  13. 要创建基于标题字段及其值的规则,请执行以下操作:
    • 选取“标题约束”复选框。
    • 用以下格式输入以逗号分隔的标题和值的列表:
    • header1:value1, header2:value2

      示例:Subject:Work at Home!,From:virus@sesta.com

      对于标题过期过期日期,如果其日期值早于“邮件生存期约束”,则系统将删除该邮件。如果指定了多个过期标题字段,将采用最早的过期日期。(字符串)。

  14. 单击“确定”以将新规则添加到“自动删除邮件”列表中。

安排自动删除邮件和日志记录级别

通过 imsched 时间安排守护程序来激活自动删除邮件。缺省情况下,imsched 将在每天 23:00 点调用 imexpire,邮件将被擦除并被清除。可以通过设置表 15-9 中介绍的 configutil 参数 local.schedule.expirelocal.schedule.purgestore.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-5

3) 仅在周一运行 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 = 星期天)、小时和分钟。


可以按几号和星期几设置日期值。如果同时设置了两者,则需同时满足两者的条件。如果设置星期的第 3 天(星期三)和月份的第 17 天,则将仅在每月的第 17 天恰好为星期三时进行清除/过期。


设置 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 向存储添加分区,请执行以下操作:

  1. 从 Console 中打开要配置的 Messaging Server。
  2. 单击“配置”选项卡,并在左窗格中选择“邮件存储”。
  3. 在右窗格中单击“分区”选项卡。
  4. 单击“添加”按钮。
  5. 输入分区昵称。
  6. 这是指定分区的逻辑名称。

  7. 输入分区路径。
  8. 这是指定分区的绝对路径名称。

  9. 要将此分区指定为缺省分区,请单击标有“使此分区成为缺省分区”的选择框。
  10. 单击“确定”以提交此分区配置条目并关闭窗口。
  11. 单击“保存”以提交并保存当前“分区”列表。

命令行     要通过命令行向存储添加分区,请运行以下命令:

configutil -o store.partition.nickname.path -v path

其中 nickname 是分区的逻辑名称,而 path 表示分区存储位置的绝对路径名称。

要指定缺省主分区的路径,请运行以下命令:

configutil -o store.partition.primary.path -v path

将邮箱移动到其它磁盘分区

缺省情况下,将在 primary 分区中创建邮箱。如果分区已满,则不能存储附加的邮件。有几种方法可以解决此问题:

如果有可能,我们建议使用卷管理软件向系统添加附加磁盘空间,因为此过程对于用户是最透明的。不过,您也可以通过执行以下操作将邮箱移到其它分区:

  1. 确保在迁移进程期间用户与其各自的邮箱断开了连接。可以通过通知用户在邮箱移动期间注销或脱机来完成此操作,或者通过设置 mailAllowedServiceAccess 属性以便在注销后不允许使用 POP、IMAP 和 HTTP 服务。(请参见 Sun ONE Messaging Server Reference Manual。)

    mailAllowedServiceAccess 设置为不允许 POP、IMAP、HTTP 访问不会断开与邮箱的任何开放连接。移动邮箱前必须确保关闭所有连接。


  2. 使用以下命令移动用户邮箱:
  3. mboxutil -r user/<userid>/INBOX user/<userid>/INBOX <partition_name>

    示例:

    mboxutil -r user/ofanning/INBOX user/ofanning/INBOX secondary

  4. 在已移动用户的 LDAP 条目中将 mailMessageStore 属性设置为新分区的名称。
  5. 示例:mailMessageStore:secondary

  6. 通知用户现在允许邮件存储连接。如果可用,则更改 mailAllowedServiceAccess 属性以允许 POP、IMAP 和 HTTP 服务。


执行邮件存储维护过程

本节提供有关用于执行邮件存储的维护和恢复任务的实用程序的信息。您应该始终阅读服务器可能发送的用于警告和警报的邮寄主管邮件。您还应监视日志文件以获取有关服务器如何执行操作的信息。有关日志文件的详细信息,请参见第 17 章“日志记录和日志分析”

本节包含以下内容:

管理邮箱

本节介绍了以下用于管理和监视邮箱的实用程序:mboxutilhashdirreadership

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 选项一起使用时,将显示邮箱的路径和访问控制。


POSIX 正则表达式可用于 mboxutil 命令中。


邮箱命名惯例

必须用以下格式指定邮箱名称:user/userid/mailbox,其中 userid 是拥有邮箱的用户,mailbox 是邮箱的名称。对于托管域,useriduid@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


备份并恢复邮件存储

邮件存储备份和恢复是最常见和最重要的管理任务之一。它由备份邮件存储中的所有邮件和文件夹组成。必须实现邮件存储的备份和恢复策略,以确保发生以下问题时不会丢失数据:

您可以使用命令行实用程序 imsbackupimsrestore 或集成解决方案(使用 Legato Networker®)执行邮件存储备份和恢复。

Messaging Server 将提供单副本备份过程。不管多少用户文件夹包含特定邮件,备份期间仅使用找到的第一封邮件文件备份一次邮件文件。第二封邮件副本将作为第一封邮件文件名称的链接备份,依此类推。imsbackup 将邮件文件的设备和索引节点用作索引来维护所有邮件的散列表。但是,恢复数据时,此方法确实会产生一些影响。有关详细信息,请参见部分恢复的注意事项

本节包含以下小节:

创建邮箱备份策略

备份策略将取决于若干因素,例如:

高峰业务负载

安排系统备份时,需要考虑到高峰业务负载,因为这在高峰时段可以减少系统负载。例如,清晨时段(例如 2:00 AM)可能是安排备份的最佳时段。

完全备份和增量备份

增量备份将扫描存储查找更改的数据,并仅备份已经更改的内容。完全备份将备份整个邮件存储。需要确定与增量备份相比系统执行完全备份的频率。您可能需要将增量备份作为每日维护过程执行,而每星期执行一次完全备份。

并行备份和串行备份

用户数据存储在多个磁盘中时,如果需要,可以并行备份用户组。根据系统资源,并行备份可以加速整体备份过程。但是,如果要减少备份对服务器性能的影响,可能需要使用串行备份。使用并行备份还是串行备份可能取决于许多因素,包括系统负载、硬件配置、有多少可用的磁带驱动器等等。

创建备份组

备份组是由正则表达式定义的任意用户邮箱集。通过将用户邮箱组织成备份组,您可以定义更灵活的备份管理。

例如,您可以创建三个备份组,第一个组包含以字母 A 至 L 开始的用户 ID,第二个组包含用户 ID 以 M 至 Z 开始的用户,而第三个组包含用户 ID 以数字开始的用户。管理员可以使用这些备份组以并行方式备份邮箱,也可能一天只备份特定组,另一天备份其它组。

关于备份组有几点事项要记住:

  1. 备份组是邮件用户的任意虚拟的组。它们不会准确地映射到邮件存储目录(图 15-1),尽管看上去似乎会这样。
  2. 它们由管理员使用 UNIX 正则表达式定义。
  3. 正则表达式在以下配置文件中定义
    msg_svr_base/config/backup-groups.conf
  4. imsbackupimsrestore 中引用备份组时,备份组使用以下路径格式:/partition_name/backup_group

backup-groups.conf 格式如下:

group_name=definition
group_name
=definition
.
.
.

使用上述段落中介绍的示例,以下定义将用于创建三个备份组:

groupA=[a-l].*
groupB=[m,-z].*
groupC=[0-9].*

现在您可以在几个级别中规定 imsbackupimsrestore 的范围。您可以使用以下备份命令备份/恢复整个邮件存储:

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 提供了 imsbackupimsrestore 实用程序。请注意,imsbackupimsrestore 实用程序不具有在通用工具(如 Legato Networker)中可以找到的高级功能。例如,实用程序对磁带自动转换器只提供非常有限的支持,并且不能将单个存储写入多个并行设备。综合备份将通过通用工具(如 Legato Networker)的插件来实现。有关使用 Legato Networker 的详细信息,请参见使用 Legato Networker

imsbackup 实用程序

使用 imsbackup,您可以将邮件存储的选定内容写入任何串行设备,包括磁带、UNIX 管道或纯文本文件。可以在以后使用 imsrestore 实用程序恢复备份或备份的选定部分。可以将 imsbackup 的输出传输到 imsrestore

以下示例将整个邮件存储备份到 /dev/rmt/0

imsbackup -f /dev/rmt/0 /

此示例将用户 ID joe 的邮箱备份到 /dev/rmt/0

imsbackup -f /dev/rmt/0 /primary/user/joe

此示例将备份组 groupA 中定义的所有用户的所有邮箱备份到 backupfile(请参见创建备份组):

imsbackup -f- /primary/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。在第一个示例中,系统执行部分备份和完全恢复过程步骤,如下所示:

  1. 备份用户 B 和 C 的邮箱。
  2. 删除用户 B 和 C 的邮箱。
  3. 恢复步骤 1 中的备份数据。

在此示例中,B/INBOX/1C/INBOX/1 被指定了新的索引节点编号,并且邮件数据被写入磁盘上的新位置。仅恢复了一封邮件;第二封邮件是第一封邮件的硬链接。

示例 2。在此示例中,系统执行完全备份和部分恢复,如下所示:

  1. 执行完全备份。
  2. 删除用户 A 的邮箱。
  3. 恢复用户 A 的邮箱。

A/INBOX/1 被指定了新的索引节点编号。

示例 3。在此示例中,部分恢复可能需要多次尝试:

  1. 执行完全备份。
  2. B/INBOX/1C/INBOX/1 备份为 A/INBOX/1 的链接。

  3. 删除用户 A 和 B 的邮箱。
  4. 恢复用户 B 的邮箱。
  5. 恢复实用程序要求管理员首先恢复 A/INBOX

  6. 恢复用户 A 和 B 的邮箱。
  7. 删除用户 A 的邮箱(可选)。

    如果要确保对所有邮件进行部分恢复,可以运行 imsbackup 命令并使用 -i 选项。如果有必要,-i 选项将多次备份每封邮件。

    如果备份设备(如:驱动器或磁带)可查找,imsrestore 将查找包含 A/INBOX/1 的位置,并将其恢复为 B/INBOX/1。如果备份设备(如:UNIX 管道)不可查找,imsrestore 将记录对象 ID 和文件的相关(链接)对象的 ID,并且管理员必须使用 -r 选项再次调用 imsrestore 以恢复缺少的邮件引用。


使用 Legato Networker

Messaging Server 包括提供了带有第三方备份工具(例如 Legato Networker)的界面的备份 API。物理邮件存储结构和数据格式封装在备份 API 中。备份 API 将直接与邮件存储进行交互式操作。它显示了备份服务的邮件存储的逻辑视图。备份服务使用邮件存储的概念表示法来存储和检索备份对象。

Messaging Server 为备份和恢复邮件存储数据提供了可以由 Legato Networker 的 saverecover 命令调用的应用程序特定模块 (ASM)。然后,ASM 将调用 Messaging Server 的 imsbackupimsrestore 实用程序。


本节提供有关如何将 Legato Networker 与 Messaging Server 邮件存储一起使用的信息。要了解 Legato Networker 界面,请参见 Legato 文档。


使用 Legato Networker 备份数据

要使用 Legato Networker 执行 Messaging Server 邮件存储的备份,调用 Legato 界面前必须执行以下预备步骤:

  1. 创建从 /usr/lib/nsr/imsasmmsg_srv_base/lib/msg/imsasm 的符号链接。
  2. 从 Sun 或 Legato 获取 nsrfile 二进制的副本并将其复制到以下目录:
  3. /usr/lib/nsr/nsrfile

  4. 如果要按组备份用户,请执行以下步骤:
    1. 创建创建备份组中所述的备份组文件。
    2. 要验证配置,请运行 mkbackupdir.sh

      查看由 mkbackupdir.sh 创建的目录结构。该结构应与表 15-4 中所示目录结构相似。

      请注意,如果未指定 backup-groups.conf 文件,备份进程将对所有用户使用缺省备份组 ALL

  5. 在目录 /nsr/res/ 中,为您的保存组创建 res 文件,以在备份前调用 mkbackupdir.sh 脚本。有关示例,请参见表 15-4

    Legato Networker 的早期版本限制保存组的名称为 64 个字符。如果此目录的名称加上邮箱的逻辑名称(例如 /primary/groupA/fred)超过了 64 个字符,则必须运行 mkbackupdir.sh -p。因此,应该为 mkbackupdir.sh-p 选项使用短路径名。例如,以下命令将在 /backup 下创建备份映像:

    mkbackupdir.sh -p /backup

    重要提示:备份目录必须可以由邮件存储所有者(如:inetuser)。


表 15-4 显示了样例备份组目录结构。

图 15-5 备份组目录结构

/backup/primary/groupA/amy
                      /bob
                      /carly
               /groupB/mary
                      /nancy
                      /zelda
               /groupC/123go
                      /1bill
                      /354hut

以下示例显示了 /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 界面,如下所示:

  1. 如果有必要,则创建 Messaging Server 保存组。
    1. 运行 nwadmin
    2. 选择“自定义”|“组”|“创建”。
  2. 使用 savepnpc 作为备份命令创建备份客户机:
    1. 将保存组设置为由 mkbackupdir 创建的目录。
  3. 选择“组控制”|“启动”以测试备份配置。

示例:在 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 集成。

  1. 将用户分成组(请参见创建备份组),并在目录 msg_svr_base/config/ 下创建 backup-groups.conf 文件。

  2. 此备份解决方案需要附加的磁盘空间。要并行备份所有组,磁盘空间要求将是邮件存储大小的两倍。如果没有足够的磁盘空间,请将用户分成较小的组,然后一次备份一个组集。例如 group1 至 group5,group6 至 group10。备份后删除组数据文件。


  3. 运行 imsbackup 将每个组备份到中转区下的文件中。
  4. 命令是 imsbackup -f <device> /<instance>/<group>

    可以同时运行多个 imsbackup 进程。例如:

    # imsbackup -f- /primary/groupA > /bkdata/groupA &
    # imsbackup -f- /primary/groupB > /bkdata/groupB &

    . . .

    imsbackup 不支持大型文件,如果备份数据大于 2 GB,则需要使用 -f- 选项将数据写入 stdout 然后将输出传输到一个文件中。

  5. 使用第三方备份软件以备份中转区(在我们的示例中是 /bkdata)中的组数据文件。
  6. 要恢复用户,请标识用户的组文件名,从磁带恢复该文件,然后使用 imsrestore 从数据文件恢复用户。
  7. 请注意,imsrestore 不支持大型文件。如果数据文件大于 2GB,请使用以下命令:

    # cat /bkdata/groupA | imsrestore -f- /primary/groupA/andy


监视用户访问

Messaging Server 提供了命令 imsconnutil,允许您监视通过 IMAP、POP 和 http 的用户的邮件存储访问。您还可以确定用户的上次登录和注销时间。此命令在每个邮件存储的基础上运行,不能在多个邮件存储之间运行。

此命令需要系统用户(缺省值:inetuser),并且必须将配置变量 local.imap.enableuserlistlocal.http.enableuserlistlocal.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 标志指定特定服务(imaphttp)。例如,要列出特定用户 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。

用户邮箱目录问题

对邮件存储的损坏限制为少数用户,并且对系统没有全局损坏时,将出现用户邮箱问题。以下指导建议了识别、分析和解决用户邮箱目录问题的进程:

  1. 查看日志文件、错误消息或用户观察到的任何异常性能。
  2. 要保存调试信息和历史记录,请将整个 store_root/mboxlist/ 用户目录复制到邮件存储以外的其它位置。
  3. 要查找可能导致问题的用户文件夹,请运行命令 reconstruct -r -n。如果使用 reconstruct 找不到该文件夹,则该文件夹可能不存在于 folder.db 中。
  4. 如果使用 reconstruct -r -n 命令找不到该文件夹,请使用 hashdir 命令以确定位置。有关 hashdir 的详细信息,请参见 hashdir 实用程序Messaging Server Reference Manual 的“Messaging Server Command-line Utilities”一章中关于 hashdir 实用程序的部分。

  5. 找到文件夹后,请检查文件、检查权限并验证正确的文件大小。
  6. 使用 reconstruct -r(不使用 -n 选项)重建邮箱。
  7. 如果 reconstruct 未检测到您观察到的问题,您可以使用 reconstruct -r -f 命令强制执行对邮件文件夹的重建。
  8. 如果文件夹不在 mboxlist 目录 (store_root/mboxlist) 中,而是在 partition 目录 (store_root/partition) 中,则可能存在全局不一致性。在此情况下,应运行 reconstruct -m 命令。
  9. 如果前面的步骤不起作用,可以删除 store.idx 文件并再次运行 reconstruct 命令。

    注意

    如果确定是在 reconstruct 命令无法找到的文件中有问题,则应仅删除 store.idx 文件。


  10. 如果问题限制为有问题的邮件,则应将邮件文件复制到邮件存储以外的其它位置,并对 mailbox/ 目录运行命令 reconstruct -r
  11. 如果确定文件夹存在于磁盘(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 和该组。



上一个      目录      索引      下一个     


版权所有 2003 Sun Microsystems, Inc.。保留所有权利。