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

执行邮件存储维护过程

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

本节包含以下内容:

给邮件存储添加更多的物理磁盘

Messaging Server 邮件存储包含特定 Messaging Server 实例的用户邮箱。邮件存储的大小随邮箱、文件夹和日志文件的数量的增加而增加。

向系统添加更多用户时,磁盘存储要求会相应增加。根据服务器支持的用户的数量,邮件存储可能需要一个物理磁盘或多个物理磁盘。Messaging Server 使您可以根据需要添加更多存储。添加更多存储的一种方法是使用存储设备。有关如何在 Messaging Server 中配置 Network Appliance 存储设备的信息,请参见《》

管理邮箱

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

mboxutil 实用程序

使用 mboxutil 命令执行典型的邮箱维护任务。mboxutil 任务包括以下内容:


注 –

注意,不应在执行中中止 mboxutil 进程。如果使用 SIGKILL (kill -9) 中止了该进程,则可能潜在地需要每个服务器重新启动并完成恢复。


表 18–11 列出了 mboxutil 命令。有关详细的语法和使用要求,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》

表 18–11 mboxutil 选项

选项 

说明 

-a

已作废。用于列出所有用户的配额信息。使用。imquotacheck

-c mailbox

创建指定邮箱。可以与 -f 一起使用。 

在创建第二个邮箱前必须已存在一个邮箱。 

-d mailbox

删除指定邮箱。 

要从邮件存储中删除用户,请使用 -d mailbox 的以下值:

user/userid/INBOX

例如,要从邮件存储中删除用户 john,则使用 -d user/john/INBOX。要删除用户 john 的邮箱中的 mm 文件夹,使用 -d user/john/mm

建议的删除用户的方法是在 LDAP 目录中将用户状态标记为已删除(通过使用 Delegated Administrator 实用程序的 commadmin user delete 命令或 Delegated Administrator 控制台)。下一步,使用 commadmin user purge 命令将被标记为已删除超过指定天数的用户清除。

如果使用的是上一段中介绍的 Delegated Administrator 实用程序,则无需使用 mboxutil -d 命令来删除邮箱。

-e

用于清除邮件存储中所有已删除的邮件。此选项还可与 -p pattern 选项一起使用,以擦除名称与 pattern 匹配的所有已删除的邮箱。

-f file

用于指定存储邮箱名称的文件。-f 选项可以与 -c、-d-r 选项一起使用。

文件包含一个在其上执行了 mboxutil 命令的邮箱的列表。以下是数据文件中条目的示例:

user/daphne/INBOXuser/daphne/projxuser/daphne/mm

-k mailbox cmd

已作废。在文件夹级别中锁定指定邮箱;运行指定命令;命令完成后,取消锁定邮箱。 

-l

在服务器上列出所有邮箱。 

如果要为不同的语言环境创建多字节文件夹,您应编辑:msg_svr_base/sbin/bundles/encbylang.properties,以便将相应的字符集与 LANG 环境变量相关联。

-o

检查孤立帐户。此选项将在当前邮件服务器主机中搜索在 LDAP 中没有相应条目的收件箱。例如,-o 选项将查找已从 LDAP 删除或已移动到另一个服务器主机的拥有者的收件箱。对于找到的每个孤立帐户,mboxutil 将把以下命令写入标准输出:

mboxutil-d user/userid/INBOX

除非已指定 -w

-p MUTF7_IMAP_pattern

与 -l 选项一起使用时,仅列出名称与 MUTF7_IMAP_pattern 匹配的那些邮箱。

还可以与 -d-e 选项一起使用,以删除或擦除名称与 MUTF7_IMAP_pattern 匹配的邮箱。

您可以使用 IMAP 通配符。此选项需要的是格式为 IMAP M-UTF-7 的模式。不建议您使用此方法来搜索非 ascii 邮箱。要搜索非 ascii 邮箱,请使用 -P 选项。 

-P regexp

仅列出那些名称与指定的 POSIX 正则表达式匹配的邮箱。此选项需要本地语言的 regexp

-q domain

已作废。使用 imquotacheck -d domain

-r oldname newname[partition]

将邮箱从 oldname 重命名为 newname。要将文件夹从一个分区移动到另一个分区,请使用 partition 选项指定新分区。可以与 -f 标志一起使用以使用文件。

此选项可用于重命名用户。例如,mboxutil -r user/user1/INBOX user/user2/INBOX 可以将所有邮件和邮箱从 user1 移到 user2,并在新的 INBOX 中显示新邮件。(如果 user2 已经存在,则此操作将会失败。)

-R mailbox

用于恢复已删除但尚未被清除的邮件。 

在邮箱被擦除或过期时,已删除邮件的 uid 将存储在 store.exp 文件中。cleanup 页面已通过之后,imexpire 将物理删除这些邮件。错误地发布了擦除或过期消息时,此选项可用于将已删除但尚未被 imexpire 清除的邮件恢复至原始邮箱。

-s

在与 -l 选项一起使用时,仅显示邮箱名称。将不显示其他任何数据。

-t num

列出在指定天数未被访问的邮箱 (num)。-t 选项必须与 -o 选项(它用于标识孤立邮箱)一起使用。

从而使 -t 选项可以同时标识非活动邮箱(基于最近一次访问的日期)和孤立邮箱(在 LDAP 目录中没有相应用户条目的邮箱)。

要标识(列出)孤立邮箱和非活动邮箱,使用 mboxutil -o -w file -t num

要将这些孤立邮箱和非活动邮箱标记为已删除,使用 mboxutil -d -f file,其中 file 与前面的 -w file 所使用的是同一个文件。

要使用此功能,config 变量 local.enablelastaccess 已被启用的天数必须至少为 -t 选项所指定的天数。

-u user

已作废。用于列出用户信息。使用 imquotacheck -u user

-w file

-o 选项一起使用。将由 -o 选项(标识孤立帐户)生成的邮箱名称写入文件。

-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

要将用户 dimitria 的邮件帐户移动到新分区,运行以下命令:

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

其中 partition 用于指定新分区的名称。

要将用户 dimitria 的名为 personal 的邮件文件夹移动到新分区,运行以下命令:

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

删除孤立帐户

要搜索孤立帐户(孤立帐户是在 LDAP 中没有相应条目的邮箱),使用以下命令:


mboxutil -o

命令输出如下所示:

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

使用以下命令创建列出可转换为脚本文件的孤立邮箱的文件,用于删除孤立邮箱(示例文件名为 orphans.cmd):


mboxutil -o -w orphans.cmd

命令输出如下所示:

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

使用以下命令删除孤立文件:


mboxutil -d -f orphans.cmd

hashdir 实用程序

邮件存储中的邮箱以散列结构存储以便进行快速搜索。因此,要查找包含特定用户的邮箱的目录,请使用 hashdir 实用程序。

此实用程序可以识别包含特定帐户的邮件存储的目录。此实用程序将报告邮件存储的相对路径,例如 d1/a7/。该路径相对于基于用户 ID 的级别之前的目录级别。实用程序会将路径信息发送到标准输出。

例如,要查找用户 crowe 的邮箱的相对路径,请运行以下命令:

hashdir crowe

readership 实用程序

readership 实用程序将报告有多少用户(而不是邮箱拥有者)已经阅读了共享 IMAP 文件夹中的邮件。

IMAP 文件夹的拥有者可以授予其他用户阅读文件夹中的邮件的权限。允许其他用户访问的文件夹称为共享文件夹。管理员可以使用 readership 实用程序查看有多少用户(而不是拥有者)正在访问共享文件夹。

此实用程序将扫描所有邮箱并为每个共享文件夹生成一行输出,报告阅读者的数量,接着是一个空格和邮箱的名称。

每个阅读者都是在过去的指定天数内选择了共享文件夹的独特验证身份。用户阅读自己的个人邮箱时系统不进行计数。系统不报告个人邮箱,除非至少有一个文件夹拥有者以外的阅读者。

例如,以下命令行将在过去 15 天内选择了共享 IMAP 文件夹的任何身份都作为阅读者进行计数:

readership -d 15

监视配额限制

通过使用 imqutoacheck 监视配额使用情况和限制,此实用程序生成列出已定义的配额和限制的报告,并提供有关配额使用情况的信息。以千字节为单位报告配额和使用情况数字。此实用程序也可以将邮箱大小与用户分配的配额进行比较。此外,您可以选择通过电子邮件向已超出的配额量达到所设置的百分比的用户发送通知。


注 –

imquotacheck 中某些功能已更改。(在 Messaging Server 6.x 中,imquotacheck 实用程序已取代了 quotacheck 实用程序。)在 Messaging Server 5.x 中,当您使用 quotacheck 实用程序检索用户列表时,quotacheck 搜索本地 mboxlist 数据库。此功能重复 mboxutil 实用程序中的搜索功能。

在 Messaging Server 6.x 中,此重复功能已从 imquotacheck 实用程序中删除。如果您使用 imquotacheck 执行用户搜索,将针对 LDAP 目录执行搜索,而不是针对本地 mboxlist 数据库。要从本地 mboxlist 数据库检索用户列表,使用 mboxutil 实用程序。


要列出配额超出规则文件中的最小阈值的所有用户的使用情况,请运行以下命令:

imquotacheck

列出域 siroe.com 的配额信息:

imquotacheck -d siroe.com

要依据默认规则文件向所有用户发送通知,请运行以下命令:

imquotacheck -n

要根据指定的 rulefilemyrulefile 和邮件模板文件 mytemplate.file 向所有用户发送通知,请运行以下命令(有关更多信息,请参阅 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》中的“imquotacheck”):

imquotacheck -n -r myrulefile -t mytemplate.file

要列出所有用户的使用情况(将忽略规则文件),请运行以下命令:

imquotacheck -i

要列出用户 user1 的每个文件夹的使用情况(将忽略规则文件),请运行以下命令:

imquotacheck -u user1 -e

监视磁盘空间

您可以指定系统监视磁盘空间和分区使用情况的频率,以及系统应在什么情况下发送警告。有关详细信息,请参见监视磁盘空间

使用 stored 实用程序

stored 实用程序将为服务器执行以下监视和维护任务:

stored 实用程序将在每天的 11 PM 自动执行一次清除和过期操作。您可以选择运行其他清除和过期操作。

表 18–12 列出了一些 stored 选项。表后还提供了一些通用使用示例。有关详细的语法和使用要求,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》

表 18–12 stored 选项

选项 

说明 

-d

已作废。使用 start-msg store 启动将作为守护进程运行的 stored,执行系统检查并激活警报、死锁检测和数据库修复。

-t

检查 stored 的状态。此命令的返回代码将表明状态。

-v

详细输出。 

-v -v

更多详细输出。 

要打印状态,请输入:

stored -t -v

如果要更改自动清除和过期操作的时间,请使用 configutil 实用程序,如下所示:

configutil -o store.expirestart -v 21

有时,您可能需要重新启动 stored 实用程序;例如邮箱列表数据库被破坏时。要在 UNIX 中重新启动 stored,请在命令行中使用以下命令:

msg_svr_base/sbin/stop-msg store
msg_svr_base/sbin/start-msg store

如果任一服务器守护进程崩溃,则必须停止所有守护进程并重新启动所有守护进程,包括 stored

由于重复存储相同的邮件而减少邮件存储大小

将某邮件发送给多个收件人时,该邮件将被置于每个收件人的邮箱中。某些邮件服务系统将同一邮件的副本分别存储在每个收件人的邮箱中。相反地,Sun Java System Messaging Server 力求保留一个邮件副本,而不考虑该邮件所在的邮箱数。通过在包含该邮件的邮箱中创建指向该邮件的硬链接即可实现此目的。

在将其他邮件服务系统迁移到 Sun Java Messaging Server 时,可能会在迁移过程中将这些多个邮件副本复制到 Sun Java Messaging Server 中。邮件存储会很大,这意味着不必要地重复了很多邮件。此外,在正常的服务器操作中也可能会积累同一邮件的多个副本,例如,从 IMAP append操作或其他来源中。

Messaging Server 提供了一个名为 relinker 的新命令,该命令用于删除过量的邮件副本并用指向单个副本的硬链接替换这些邮件副本。

relinker 操作原理

重链接功能可在命令模式或实时模式下运行。当 relinker 命令运行时,它将扫描整个邮件存储分区,创建或更新 MD5 邮件摘要系统信息库(以硬链接形式),删除过量的邮件文件,并创建必要的硬链接。

摘要系统信息库由指向邮件存储中的邮件的硬链接组成。它存储在目录分层结构 partition_path/=md5 中。此目录与用户邮箱分层结构 partition_path/=user 并行(请参见图 18–1)。摘要系统信息库中的邮件可由其 MD5 摘要唯一标识。例如,如果 fredb/00/1.msg 的摘要为 4F92E5673E091B43415FFFA05D2E47,则 partition/=user/hashdir/hashdir/=fredb/00/1.msg 将被链接到 partition/=md5/hashdir/hashdir/4F92E5673E091B43415FFFA05D2E47EA.msg。如果另一个邮箱中也有这封相同邮件(例如 partition_path/=user/hashdir/hashdir/gregk/00/17.msg),则该邮件也将被硬链接到 partition_path/=md5/4F/92/4F92E5673E091B43415FFFA05D2E47EA.msg。如图 18–5 中所示。

图 18–5 邮件存储摘要系统信息库

该图描述了邮件存储系统信息库。

对于这封邮件,链接计数为三。如果从 fredb 和 gregk 邮箱中删除了这两封相同邮件,则链接计数为一并且可以清除此邮件。

还可以在实时模式下运行 relinker 进程以实现类似的功能。有关详细信息,请参见在实时模式下使用 relinker

在命令行模式中使用 relinker

relinker 将扫描整个邮件存储分区,创建或更新 MD5 邮件系统信息库(以硬链接形式)并删除过量的邮件文件。relinker 扫描完存储分区后,它将输出唯一邮件数和重链接前后分区大小的统计信息。为了在已散列的存储上更快速地运行,relinker 将只计算尚未存在于 =md5 中的邮件摘要。它还具有可以删除整个摘要系统信息库(此操作不会影响用户邮箱)的选项。

命令的语法如下所示:

relinker [-p partitionname] [-d]

其中 partitionname 指定要处理的分区(默认值:所有分区),-d 指定将删除摘要系统信息库。以下显示了输出样例:


# relinker

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


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

运行 relinker 可能需要花费很长时间,尤其是在系统信息库中没有邮件的情况下首次运行。这是因为如果将 relinker 条件配置为包含所有邮件,则 relinker 必须计算每封邮件的摘要—有关配置 relinker 条件的信息,请参见配置 relinker。例如,处理 100 千兆字节的邮件存储可能需要花费六个小时。但是,如果启用了运行时重链接(请参见在实时模式下使用 relinker),则无需运行 relinker 命令。

如果单独使用 relinker 命令行模式,而不使用运行时选项,则必须清除摘要系统信息库 (=md5),否则存储 (=user) 中清除的邮件所占用的空间将不能成为可用磁盘空间,因为在摘要系统信息库中仍有这些邮件的链接(它们将成为孤立邮件)。如果只执行存储的一次性优化(例如,在迁移后),您可以运行一次 relinker,然后使用 relinker -d 删除整个系统信息库。对于迁移过程中进行的重复清除,只要重复运行 relinker 命令就可以了,因为每次运行该命令时,还会从系统信息库中清除过期的或孤立的邮件。

并行运行 relinker 的多个实例来使每个实例分别处理不同分区(使用 -p 选项),这样做是最安全的。仅在同一分区内重链接邮件。

在实时模式下使用 relinker

通过将 configutil 参数 local.store.relinker.enabled 设置为 yes 可以在实时模式下启用 relinker 函数。在实时模式下使用 relinker 将计算符合配置的 relinker 条件(配置 relinker)的每封已传送(或已恢复、IMAP 已附加等)邮件的摘要,然后查找系统信息库以查看该摘要是否已存在。如果摘要存在,relinker 将在目标邮箱中创建一个指向该摘要的链接而不创建该邮件的新副本。如果摘要不存在,relinker 将创建该邮件,然后在系统信息库中添加指向该邮件的链接。

stored 将扫描每个分区的摘要系统信息库,并清除链接计数为 1 或不符合 relinker 条件的邮件。在可配置的时间段内,扫描一次将扫描完一个目录。这样可以平均分布 I/O 负载而不会对其他服务器操作造成明显影响。默认情况下,清除周期为 24 小时,这意味着从存储中删除了邮件或者邮件超过了配置的最大生存期后,这些邮件最多还可在磁盘上保存 24 小时。如果启用了 relinker 实时模式,将启用此任务。

配置 relinker

表 18–13 显示了用于设置 relinker 条件的参数。

表 18–13 relinker configutil 参数

参数 

说明 

local.store.relinker.enabled

在附加代码中启用实时重链接邮件并启用 stored 清除。即使此选项处于禁用状态,也可以运行 relinker 命令行工具,但由于 stored 将不清除系统信息库,因此必须将 relinker -d 用于此任务。启用此选项将影响邮件传送性能但可以节省磁盘空间。

默认值:no

local.store.relinker.maxage

保存在系统信息库中或由 relinker 命令行考虑的邮件最大生存期(以小时为单位)。-1 表示无生存期限制,即仅从系统信息库中清除孤立邮件。对于 relinker,它表示处理现有邮件而不考虑生存期。值越小保留的系统信息库也就越小,从而允许 relinkerstored 清除可以更快地运行并更快地收回磁盘空间;而值越大允许重复邮件重链接的时间就越长,例如,用户分几天将同一邮件复制到存储中,或在几天或几星期内运行迁移等情况。

默认值:24 

local.store.relinker.minsize

邮件的最小大小(以千字节为单位)由运行时或命令行 relinker 考虑。设置为非零值将失去 relinker 用于较小邮件的优点,但可以获得较小的系统信息库。

默认值:0 

local.store.relinker.purgecycle

整个 stored 清除周期的近似持续时间(以小时为单位)。实际持续时间取决于扫描系统信息库中的每个目录所花费的时间。值越小使用的 I/O 就越多;值越大收回磁盘空间的速度就越慢。0 表示连续运行清除而不在目录之间有任何暂停。-1 表示不使用 stored 而必须使用 relinker -d 命令执行清除。

默认值:24