我的 Windows Server 2008 R2 域控制器运行在物理戴尔服务器(型号为 PowerEdge R510)上。
这里有一些电气问题,因此不幸的是,停电是相当常见的现象;虽然有 UPS,但它们并不像它们应该的那样可靠,有时服务器会出现非正常关闭的情况。
由于某种我真的无法理解的原因,有时这个特定的 DC 会在非正常关机后出现并遇到USN 回滚,迫使我们将其降级并再提升。
这根本没有意义,因为该服务器是物理服务器,并且从未在其上执行过快照、克隆和/或恢复;此外,其上也没有安装任何附加软件,它只执行 DC 任务;具体来说,不存在克隆/恢复/任何软件。
文件系统损坏至少有些道理,但 USN 回滚真的没有道理,因为服务器无法恢复到以前的状态。然而,这种情况在过去两个月内至少发生过三次,所以这绝对不是一次性的疯狂事件;但我完全无法给出解释。
造成此问题的原因可能是什么?
答案1
我今天花了几个小时思考这个问题。这有点令人困惑,但正如我在评论中指出的那样,我最好的猜测是,要么您正在运行某种磁盘缓存,但在断电/非正常关机清除缓存内容之前,缓存内容没有被提交到磁盘...或者,由于您正在运行包含 ntds.dit 的 RAID 卷,断电可能会导致您的 RAID 卷暂时中断或变得不连贯,即使只是片刻。
我们知道,USN 回滚的路线是将 DC 恢复到之前的状态,典型示例是从快照恢复虚拟化 DC。我知道这并不完全适用于您……但即使在具有写入缓存的磁盘的情况下,您也可以将物理上位于磁盘上的数据视为包含“以前的状态”,而写入缓存实际上包含 DC 的最新状态……即使这两个状态仅相隔半秒。
仔细思考一下微软的这些评论:
与虚拟 IDE 相比,虚拟 SCSI 磁盘提供了更高的性能,并且支持强制单元访问 (FUA)。FUA 确保操作系统绕过任何缓存机制,直接从介质写入和读取数据。
我知道您的 DC 不是 VM,但这个概念仍然适用。磁盘缓存和 DC 不能混合使用。这就是为什么安装 Active Directory 会关闭写入缓存作为 Windows 策略,但您仍然可以在硬件 RAID 控制器等中使用缓存机制。
场景 B:从损坏的镜像中的其他驱动器启动 Active Directory
提升域控制器。在镜像驱动器上找到 Ntds.dit 文件。
打破镜子。
使用镜像中第一个驱动器上的 Ntds.dit 文件继续进行入站复制和出站复制。
使用镜像中第二个驱动器上的 Ntds.dit 文件启动域控制器。
这是一个复制杀手,在具有 RAID 1 卷的物理 DC 上,它给我带来了很多麻烦。我个人从未遇到过由它引起的实际 USN 回滚,但它会终止该 DC 上的复制。我的意思是,想象一下一个由 2 个磁盘组成的 RAID 1 卷。1 个驱动器坏了。你把它移除,插入一个新驱动器……然后 DSA 不可写。
来自AskDS 博客:
如果您的 VM 主机或 Active Directory 数据库所在的存储磁盘没有不间断电源 (UPS),请确保在虚拟机的主机上禁用写入缓存。请参阅此链接获取更多指导。相反,如果需要为托管 DC 的 VM 主机保持启用写入缓存,则安装 UPS 以避免损坏 DC。
再次,它谈论的是虚拟化 DC,但磁盘缓存概念也适用于物理 DC。
这就是我的想法。我认为这与你的存储系统有关。至少在 ntds.dit 卷上,绝对要禁用所有缓存机制,尤其如果您容易停电。