您需要知道的有关 Exchange 备份的全部内容* - 第 1 部分

原文发布于 2012 年 6 月 5 日(星期二)

*想知道但又不敢问

如果您觉得使用卷影复制(该链接可能指向英文页面)(VSS) 的 Exchange 数据备份的内幕好像有点神秘,那么放心好了,有同样感觉的不止您一人。譬如,管理员们可能会问:“我在我的事件日志里看到的‘冻结’和‘解冻’是些什么东西?Exchange VSS 编写器究竟是干什么的,它对我的数据库做了些什么?它如何在不到 60 秒内便创建出一个 135 GB 的数据库快照?”

如果您曾问过这些问题,但只觉得获得的回答却让您更糊涂了,那么,这里有个指导可帮助您理清思路。要了解 Exchange 的 VSS 备份如何工作,关键是理解 VSS 本身的基本情况。TechNet、MSDN 以及 Windows Server 核心团队博客“询问核心团队(该链接可能指向英文页面)”都提供有这方面的优秀文档。我尊敬的同事 Randy Monteleone 早在他的文章中就非常精辟地归纳了 VSS 的基础知识,同时还提供一些链接(这里重复提供),可帮您获得有关 VSS 的一些好的 TechNet 入门材料:

如何:VSS 追踪 – Randy Monteleone
https://blogs.technet.com/b/askcore/archive/2012/04/29/how-to-vss-tracing.aspx(该链接可能指向英文页面)

卷影复制服务工作原理
https://technet.microsoft.com/zh-cn/library/cc785914(WS.10).aspx(该链接可能指向英文页面)

卷影复制服务
https://technet.microsoft.com/zh-cn/library/ee923636(WS.10).aspx(该链接可能指向英文页面)

如果您已经熟悉了起码的 VSS 基础知识,则可以进入本系列的第 2 部分,在这一部分中,我们将分析发生在 VSS Exchange 备份中的事件,以及 Exchange 如何在应用程序事件日志中记录它们。

如果您需要有关 VSS 基础知识和 Exchange 编写器的快速入门材料或最新资料,我已将它们精简为下面几个直观的要点,作为上述参考资料的补充。

快照

请记住,在不同硬件和软件配置之间,有关 Exchange 和所有应用程序的 VSS 解决方案变化很大。克隆和 COW 快照,硬件和软件解决方案,这都只不过是基于核心 VSS 子系统的众多技术而已。为便于理解 Exchange 备份,我们只准备谈谈其中一种特定类型的解决方案。下面详细解释什么是“写入时复制 (COW)”快照。

在 Exchange 的基于 COW 快照的 VSS 备份中,我们创建了寄存 Exchange 数据的磁盘的快照。不管备份什么,即便只是一个数据库文件和一些日志,VSS 都会创建存储所有数据的整个磁盘的快照。如果数据跨多个磁盘存储,例如,当 Exchange 数据库在一个磁盘上,而日志在另一个磁盘上时,VSS 将创建所涉及到的所有磁盘的快照。

那么,什么是“快照”呢?卷快照是称为“卷影存储”内的一个空间区域,而卷影存储本身是位于“系统卷信息”文件夹中磁盘上的一小块典型区域。

创建一个磁盘快照后,从那时起往后对任何数据块的更改都不能进行写入,直到复制该块数据后,才能把更改(创建快照时的状态)写入卷影存储中的差异比较区域。以这种方式,创建快照时磁盘上的数据被逐块地保留在卷影存储区中。于是,既可从原始磁盘使用快照数据(如果请求的数据块尚未改变),也可从差异区域使用快照数据(如果存在)。基本原理如下图所示:

磁盘 E: 下午 1 点 (1PM) 创建了一个快照:

图像

一分钟后,其中一个块写入,但却是在 1PM 时的数据状态保留在差异区域后才写入:

图像

当实际磁盘改变时,1PM 时的数据状态写入卷影存储中,从而保留那一时刻磁盘的记录:

图像

以下步骤:

图像

上图中,备份服务器从块 2 和块 53 的快照请求数据。1PM 的块 53 状态保留在快照中,所以直接从卷影存储复制它。块 2 自 1PM 后无变化,所以通过 VSS 驱动程序 VOLSNAP.SYS 复制它。VOLSNAP.SYS 的运作很像 NTFS.SYS 文件系统驱动程序下的筛选器驱动程序。通过在文件系统下的 IRP 堆栈(管理磁盘 I/O 的内核内存的一部分)工作,它可以读取数据块,无需文件正在使用的 NTFS 目标对象。VOLSNAP.SYS 还负责确保在请求写入块时,块都复制到卷影存储中,“写入时复制”因而得名。以下是来自 Tim McMichael 的有关 VOLSNAP.SYS 的更多信息:

Exchange / VSS / 和差异块大小…
https://blogs.technet.com/b/timmcmic/archive/2011/07/12/exchange-vss-and-differential-block-size.aspx(该链接可能指向英文页面)

至此,我们已了解了 COW 快照的基础知识,让我们来看看它如何与 Exchange 协作,以及其他一些主要概念:

Microsoft Exchange 编写器

于是,我们知道,对于存储 Exchange 数据的任何磁盘,VSS 都会为它创建一个快照。但是,备份应用程序究竟是如何知道它们是哪些磁盘?很多时候,管理员无需指定任何有关他们的数据文件存储在哪里的信息就能选择要备份的数据库。因此,需要些东西来提供有关数据文件放在什么地方、VSS 需要为哪些磁盘创建快照等信息。这些信息还会告诉备份应用程序(也称 VSS 请求方)应当从保留在备份介质上的快照中复制哪些特定数据文件,因为我们不需要从磁盘上复制我们不需要的东西。

这里面的工作机制是 Microsoft Exchange VSS 编写器。像任何应用程序的 VSS 编写器(有很多,只要运行 VSSADMIN LIST WRITERS 就能看到)一样,它的第一个工作就是告诉备份应用程序有关需要备份的数据,尤其是 EDB 文件、日志和请求的每个数据库的检查点文件。有关这些特定 Exchange 数据文件的信息称为“编写器元数据”。

图像

(单击缩略图查看全尺寸版本)

在上图中,我们了解了 Exchange 备份的初始步骤。Exchange 编写器会告诉备份服务器(请求方)有一个数据库位于卷 E: 上的一个文件夹中,而该数据库的事务日志位于 D: 上的一个文件夹中。基于该信息,在作业进行中,备份应用程序将请求 D: 和 E: 卷的快照。

Exchange VSS 编写器除了向 VSS 请求方提供元数据外,还扮演另一个至关重要的角色。它还负责停止写入到磁盘上数据库和日志的操作,或者“冻结”写操作一段时间,并在此期间内创建必要的快照。COW 快照通常只需很少的时间便能创建,因为它的全部组成最初只是卷影存储上一块指定区域,用于当块在实际磁盘上更改时保留块。尽管这是一个相对快速的操作,但它仍然要花上一分钟,这已足够数据块在快照创建过程的始末在磁盘上更改。如果数据块发生改变,但没有保留下快照开始创建的确切时间的原始数据,则这些块可能与其他快照数据不一致,尤其是在日志、数据库和检查点文件之间。因此,Exchange 编写器可防止信息存储服务或 MS Exchange 复制服务将 RAM 中的内容写入冻结的数据库文件中。对于信息存储服务,在 Exchange 编写器允许 VSS 拍摄快照前,当前事务日志文件 (Exx.log) 滚动并关闭。这将确保在快照开始到结束(此时数据库为“已解冻”)期间文件数据没有任何变化。当数据库解冻后,保留在 RAM 中的写 I/O 操作可以再次进入磁盘。

下面是有关应用程序的 VSS 编写器如何就冻结、解冻和完成快照所需时间与 VSS 进行交互的更多信息:

CVssWriter::OnFreeze 方法
https://msdn.microsoft.com/zh-cn/library/windows/desktop/aa381563(v=vs.85).aspx(该链接可能指向英文页面)

Exchange 编写器的最后一个主要职责是告诉信息存储服务(被动副本备份时的 MS Exchange 复制服务)备份是否完成,并且如果适用,还会执行备份后任务,如截断日志,将数据库标记为不再进行备份等等。

在这个系列的第二和第三部分中,我们会详细地了解上述元素如何集中在 Exchange 备份中使用,以及生成的应用程序日志事件,并比较安装的数据库的过程和被动数据库副本的过程。

感谢 Michael Blanton、Tim McMichael、Randy Monteleone、Dave Vespa 和 Tom Kern 协助我创作这些文章的内容。

Jesse Tedoff

这是一篇本地化的博客文章。请访问 Everything You Need to Know About Exchange Backups* - Part 1 以查看原文