lockingWindows磁盘备份(EC2快照)

我正在寻找一种方法来刷新所有挂起的写入到磁盘在Windows中,然后缓冲所有未来的写入,直到一个命令给予超前。

我想冲刷SQL Server写入和Windows系统写入,然后缓冲两者。

要清楚我在做什么:

我在EC2上使用Windows 2008 R2和SQL Server 2008 R2。 我运行这些驻留在驱动器上的小时快照。 当没有关键的变化,这些快照出来就很好 – 但我一次又一次地得到一个坏的快照。 最坏的情况下,如果发生驱动器故障(技术上EBS故障),如果我有3个错误的小时快照,我已经丢失了4个小时的数据。

快照已经解决了快速,差异化的备份和快速,简单的恢复 – 所以我正在寻找一种方法来刷新一切,以便在磁盘上保持一致的状态,然后挂起所有写入,直到快照完成。 我很高兴为我所称的服务编写一些代码来实现这一目标,但是我需要知道为了完成任务需要写什么API /命令。

我知道,我可以创build一个单独的卷,我不断运行Windows备份,然后快照,但是这大大延长了备份过程,感觉像一个黑客。 我知道Windows和SQL Server都非常擅长缓冲写入,所以这似乎是我应该能够在原地完成的事情。

想法?

您可以select使用Windows中的Shadow Copy。 影子拷贝进程本身在提交自己的快照之前会消耗任何写入缓冲区。 安排它在EC2快照前一两分钟拍一张快照。 通过这种方式,当EC2快照触发时,系统中已有最近一致的副本。

我无法回答如何locking磁盘,所以Windows不写或强制刷新,所以这将是一半的答案,但有一个相关的信息,你的问题没有注意到:

ec2-snapshot过程是即时的。 你不必等待它完成! 一旦启动它,您可以再次开始使用磁盘,快照仍然会获取快照时的数据,而不是当前状态。 发生这种情况是因为一旦将其标记为快照,写入磁盘的所有新数据都将以某种覆盖磁盘排队,并且在请求快照时的数据将被保留。

这应该会使你的其他问题更容易。 所有你需要做的就是对磁盘进行刷新以使所有内容保持一致,然后暂停几秒钟,同时确保快照API返回了成功代码,以便知道进程已经启动,然后可以回到写入状态。

我将添加一个单独的答案来解决您的一些意见。 如果您试图静止数据,VSS是一个很好的途径。 实际上,MSFT DPM使用该子系统对我所理解的SQL有很大的影响。 当然,他们有专门的团队把事情搞清楚。

VSS不会搞砸SQL,但它可以(并且)干扰SQL的本地备份方法(请参阅我对这个问题的回答以获得更多的见解)。 你需要非常清楚你想要完成什么,VSS正在做什么,以及两者是否一致。

您可以编写一些本地调用VSS API的方法(不要问我该怎么做,我不是开发人员),也可以使用vshadow.exe之类的方法为您制作和操作卷影副本。 Vshadow.exe在MSFT SDK中可用; 确保你的操作系统版本正确。

根据您的SQL恢复模型,SQL在调用VSS时会有不同的反应。 我已经处理了SQL和VSS的内容已经有一段时间了,但是从我记得的情况来看,如果您有简单恢复模型集,日志将在VSS被调用时截断。 在Full和Bulk-Logged中,情况并非如此,你需要做一些事情来pipe理日志的大小。

你可能知道这一点,但testing,testing,testing。 你的快照只有在你可以从中恢复的时候才是有用的。

我不是EC2的专家,但除了EC2以外,如果您想使用存储快照创build一致的备份,则必须在备份之前停顿文件系统。

SQL编写器服务必须正在运行(有关SQL编写器服务的更多信息,请参阅http://msdn.microsoft.com/zh-cn/library/ms175536.aspx ),然后备份将使用VSS COM API来冻结IO,快照然后解冻它(大量的细节在这里: http : //msdn.microsoft.com/en-us/library/aa384589%28v=vs.85%29.aspx )。

SAN供应商通常将对VSS API的调用集成到他们的快照例程中,这可以通过在服务器上运行的代理完成。

我无法回答EC2是否真的为你做这个调用,或者你是否需要编写自己的代码(使用VSS API来冻结IO,然后调用EC2 API来获取快照),但希望我的回答给出你几点。

AutomatiCloud完全是你在找什么。 它有一个可选的VSS代理,它使用由MS-SQL,MS-Exchange或其他提供的VSS快照提供程序。

在备份过程中,它冻结/redirect磁盘上的I / O,触发EC2快照,然后再次允许I / O。

整个过程是在一个易于使用的Windowsgraphics用户界面控制,而不需要脚本。