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

备份并恢复邮件存储

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

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

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


注 –

还可以通过备份所有邮件文件和目录来执行邮件存储备份和恢复。请参阅邮件存储灾难备份和恢复


本节包含以下小节:

创建邮箱备份策略

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

高峰业务负载

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

完全备份和增量备份

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

并行备份和串行备份

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

创建备份组

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

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

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

  1. 备份组是邮件用户的任意虚拟的组。它们不会准确地映射到邮件存储目录(图 18–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
            

增量备份

以下示例将备份从 2004 年 5 月 1 日下午 1 点 10 分至今所存储的邮件。默认情况下将备份所有邮件而不考虑它们的日期:


imsbackup -d 20040501:13100
               

此命令使用默认块因子 20。有关 imsbackup 命令的完整语法描述,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》

imsrestore 实用程序

要从备份设备恢复邮件,使用 imsrestore 命令。例如,以下命令将从文件 backupfile 中恢复 user1 的邮件。

imsrestore -f backupfile /primary/user1

有关 imsbackup 命令的完整语法描述,请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》

执行备份时排除批量邮件

执行一个备份操作时,您可以指定将从备份中被排除的邮箱。通过排除可以产生大量琐碎邮件的批量邮箱或垃圾邮箱,您可以简化备份会话,减少完成操作的时间,并最小化存储备份数据所需的磁盘空间。

要排除邮箱,请为 configutil 参数 local.store.backup.exclude 指定一个值。

您可以指定单个邮箱或由 '%' 字符分隔开的邮箱列表。(在邮箱名称中 '%' 是非法字符。)例如,您可以指定以下值:

Trash

Trash%Bulk Mail%Third Class Mail

在第一个示例中,排除了文件夹 Trash。在第二个示例中,排除了文件夹 TrashBulk MailThird Class Mail

备份实用程序将备份用户邮箱中所有的文件夹,那些以 local.store.backup.exclude 参数指定的文件夹除外。

此功能与 Messaging Server 备份实用程序、Legato Networker 和第三方备份软件一起工作。

您可以覆盖 local.store.backup.exclude 设置,并通过在操作期间指定被排除邮箱的完整逻辑名称以备份此邮箱。假设已排除“垃圾箱”文件夹。您还可以通过指定以下内容来备份“垃圾箱”,例如:

/primary/user/user1/trash

但是,如果指定

/primary/user/user1

“垃圾箱”文件夹被排除。

部分恢复的注意事项

部分恢复是指仅恢复部分邮件存储。完全恢复是指恢复整个邮件存储。邮件存储使用单副本邮件系统。即,仅将任何邮件的单个副本作为单个文件保存在存储中。该邮件的任何其他实例(如邮件发送到多个邮箱时)都存储为该副本的链接。由于此原因,恢复邮件时会有一些影响。例如:

以下示例说明了执行部分恢复时,由多个用户使用的邮件发生的变化。假设有三封邮件,同时属于三个用户 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 被指定了新的 inode 编号,并且邮件数据被写入磁盘上的新位置。仅恢复了一封邮件;第二封邮件是第一封邮件的硬链接。

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

  1. 执行完全备份。

  2. 删除用户 A 的邮箱。

  3. 恢复用户 A 的邮箱。

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

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

  1. 执行完全备份。

    B/INBOX/1C/INBOX/1 备份为 A/INBOX/1 的链接。

  2. 删除用户 A 和 B 的邮箱。

  3. 恢复用户 B 的邮箱。

    恢复实用程序要求管理员首先恢复 A/INBOX

  4. 恢复用户 A 和 B 的邮箱。

  5. 删除用户 A 的邮箱(可选)。


    注 –

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

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


从已被增量备份的邮箱中恢复邮件

如果您正从已被增量备份的邮箱中恢复邮件,并且该邮箱存在于您要用于恢复邮件的服务器上,那么恢复邮件需要简单而直观的运行 imesrestore。但是如果您要从已被增量备份的邮箱中恢复邮件,并且该邮箱不再存在,则必须遵循不同的恢复过程。

使用以下过程之一将邮件恢复至不存在于邮件存储服务器上的邮箱中:

恢复增量备份必须遵循这些说明的原因如下:在邮箱已被删除或正被迁移时,imsrestore 实用程序将使用存储在备份归档文件中的邮箱唯一标识有效性标志和邮件唯一标识 (UID) 来重新创建邮箱。

以前,当 imsrestore 重新创建已删除或迁移的邮箱时,它将为邮箱分配新的 UID 有效性标志并为邮件分配新的 UID。在这种情况下,带有高速缓存邮件的客户机将必须重新同步邮箱 UID 有效性标志和邮件 UID。客户机将必须再次下载新的数据,增加服务器上的工作负荷。

在新的 imsrestore 行为下,客户机高速缓存将保持同步,并且恢复进程将透明地运行,而不会对性能有负面影响。

如果邮箱存在,imsrestore 将为已恢复的邮件分配新的 UID,从而使新的 UID 与已分配给现有邮件的 UID 保持一致。要确保 UID 的一致性,imsrestore 在恢复操作期间会锁定邮箱。但是,由于 imsrestore 现在使用的是备份归档文件中的邮箱 UID 有效性标志和邮件 UID,而不是分配新的 UID 值,因此如果执行增量备份和恢复,UID 可能会变得不一致。

如果使用 imsbackup 实用程序的 -d 日期选项执行增量备份,则可能需要多次调用 imsrestore 以完成恢复操作。如果执行了增量备份,则必须恢复最新的完全备份和所有后续的增量备份。

新邮件可以在恢复操作期间被传送至邮箱,但在这种情况下,邮件 UID 可能变得不一致。要防止 UID 的不一致,您需要采取以上介绍的操作之一。

使用 Legato Networker

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

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


注 –

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


Procedure使用 Legato Networker 备份数据

步骤
  1. 创建从 /usr/lib/nsr/imsasmmsg_srv_base/lib/msg/imsasm 的符号链接。

  2. 从 Sun 或 Legato 获取 nsrfile 二进制文件的副本并将其复制到以下目录:

    /usr/bin/nsr

    请注意,仅当使用以前版本的 Networker (5.x) 时才需要进行此操作。使用 Networker 6.0 和更高版本时,nsrfile 将被自动安装在 /usr/bin/nsr 下。

  3. 如果要按组备份用户,请执行以下步骤:

    1. 创建创建备份组中所述的备份组文件。

    2. 要验证配置,运行 mkbackupdir.sh。

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

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

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


    注 –

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

    mkbackupdir.sh -p /backup

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


    表 18–6 显示了样例备份组目录结构。


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

  5. 如果有必要,则创建 Messaging Server 保存组。

    1. 运行 nwadmin

    2. 选择“自定义”|“组”|“创建”。

  6. 使用 savepnpc 作为备份命令创建备份客户机:

    1. 将保存组设置为由 mkbackupdir 创建的目录。

      对于单个会话备份,使用 /backup

      对于并行备份,使用 /backup/server/group

      确保已经创建如创建备份组中所定义的 group

      还必须设置备份会话数量的并行性。

      请参见使用 Legato Networker 备份数据

  7. 选择“组控制”|“启动”以测试备份配置。

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

Procedure使用除 Legato 以外其他的第三方备份软件

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


    注 –

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


  2. 运行 imsbackup 将每个组备份到中转区下的文件中。

    命令是 imsbackup -f <device> /<instance>/<group>

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


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

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

  3. 使用第三方备份软件以备份中转区(在我们的示例中是 /bkdata)中的组数据文件。

  4. 要恢复用户,请标识用户的组文件名,从磁带恢复该文件,然后使用 imsrestore 从数据文件恢复用户。

    注意,imsrestore 不支持大型文件。如果数据文件大于 2GB,请使用以下命令:

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

备份和恢复问题的故障排除

本节介绍常见的备份和恢复问题及其解决方法。

邮件存储灾难备份和恢复

灾难是指整个邮件存储的灾难性故障。即邮件存储服务器上的所有数据全部丢失的情况。完整的邮件存储灾难恢复将包含恢复以下丢失的数据: