|
在本系列文章(“Hyper-V上的虚拟机备份”)的第一篇中,我主要讨论了如何使用Windows Server Backup。然而要想有效地备份Hyper-V上的工作负载,其方法有一些局限性,比如缺少对磁带驱动器的支持。其它廉价、稳定的替代工具——比如,Windows Server 2008中的Diskshadow,可以让你克服这些障碍。Diskshadow还可以助你完成在线的虚拟机备份,并可以让你与多种卷影拷贝服务编写器交互,在本文中,所涉及的卷影拷贝服务编写器是Hyper-V Volume Shadow Copy Service(VSS)。以下几个简单的Diskshadow脚本可以将虚拟机备份到磁盘或者存放时间更长的磁带存储中去。
Diskshadow脚本1:创建快照,以驱动器号的形式显示,拷贝到其它的磁盘,使用第三方的备份产品实施备份。
好处:
指定并拷贝一份完整的在线备份到其它单独的磁盘簇中,可以防止主要的逻辑单元号(LUN)或磁盘驱动器失效的故障事件。
磁带备份I/O不通过虚拟机所在的磁盘簇,避免了存储带宽占用。
不足:
需要另外一个具有较大空间的LUN或者磁盘驱动器,用以存储虚拟机的完整拷贝。
在将文件移动到其他单独的驱动器、然后从该驱动器执行磁带备份的时候,需要时间和服务器资源。这个过程可能需要好几个小时,具体时间长度取决于虚拟机的数目和他们的虚拟机磁盘大小。
脚本假设:
主机上已经安装了Hyper-V角色
创建一个名为”DiskShadowRobocopyBasic.dsh”的文件,并将以下文本的内容拷贝下来作为该文件的内容。
本例中,假设虚拟机存放在D:\(如果虚拟机存储在其他的盘符或者多个驱动器上,你也可以调整脚本)
创建一个命令行文件,叫做”backupscript_W.cmd”,将影像拷贝复制到其他的磁盘位置,如下所示。
DiskShadowRobocopyBasic.dsh
# Assuming your VMs reside on D:\, script cleans old shadows, creates shadows and
# copies files to separate LUN/drive (backupscript_W.cmd), then unexposes drive/LUN.
# Make sure the scripts are in C:\vsbackup and that C:\vsbackup\cab exists, or make the
# appropriate modifications.
DELETE SHADOWS ALL
SET CONTEXT PERSISTENT
SET METADATA c:\vsbackup\cab\Backup.cab
SET VERBOSE ON
BEGIN BACKUP
ADD VOLUME C:\ ALIAS CP0
ADD VOLUME D:\ ALIAS CP1
CREATE
EXPOSE CP1 W:
EXEC c:\vsbackup\backupscript_W.cmd
UNEXPOSE W:
Backupscript_W.cmd (注意自动换行)
C:\VSBackup\richcopy.exe W:\ e:\%computername%\W /E $RECYCLE.BIN;SYSTEM*;MP*;$*;Pagefile.sys
要执行以上的Diskshadow脚本,创建一个命令行文件,如下所示:
VSBackup.cmd
diskshadow /s c:\vsbackup\DiskShadowRobocopyBasic.dsh
Diskshadow脚本2:创建快照,以挂载点的形式显示,然后使用第三方的备份产品(该软件与挂载点有关)实施备份。
好处:
仅需要很少的磁盘空间,因为这个过程不会产生一个虚拟机的全拷贝
执行“有状态的”备份,并在挂载点显示短暂的时间,允许在较短时间内执行磁带备份
不足:
第三方的磁带备份系统必须能够识别操作系统的挂载点,而这往往是备份产品的一个限制
往磁带的备份过程需要占用虚拟机所在的磁盘簇的I/O带宽。因此,磁带备份应该在Hyper-V主机I/O较低的时间进行
脚本假设:
主机上已经安装了Hyper-V角色
创建一个名为”DiskShadowMountpointBasic.dsh”的文件,并将以下文本的内容拷贝下来作为该文件的内容。
本例中,假设虚拟机存放在D:\(如果虚拟机存储在其他的盘符或者多个驱动器上,你也可以调整脚本)
确认路径E:\Mountpoint\D存在。
DiskShadowMountpointBasic.dsh
*******************************************************************************************************
# Script cleans old shadows, creates shadows and copies files to separate LUN/drive
# (backupscript_W.cmd), then unexposes drive/LUN.
# Make sure the scripts are in C:\vsbackup and that C:\vsbackup\cab exists or make the
# appropriate modifications.
DELETE SHADOWS ALL
SET CONTEXT PERSISTENT
SET METADATA c:\vsbackup\cab\Backup.cab
SET VERBOSE ON
BEGIN BACKUP
ADD VOLUME C:\ ALIAS C
ADD VOLUME D:\ ALIAS MP1
CREATE
EXPOSE MP1 E:\Mountpoints\D
要执行以上的Diskshadow脚本,创建一个命令行文件,如下所示:
VSBackup.cmd
diskshadow /s c:\vsbackup\DiskShadowMountPointBasic.dsh
以上两个脚本只是概要性的列出了基本的命令编码,用以执行虚拟机的在线备份。每一个都有它的用处。我们用来备份Hyper-V工作负载的脚本是DiskShadowMountPoint.dsk,因为它仅仅创建影像拷贝的挂载点而并不实际将数据拷贝到另外一个磁盘存储区。这样可以节省大量的磁盘空间,但备份系统需要很长时间才能看到挂载点。
如果使用没有驱动器号的LUN或者驱动器存储虚拟机,你可能有其他的担心,但是这些基本的脚本在提供可靠的在线备份时,的确对你大有帮助。有关我在生产环境中使用的更多脚本的细节版本,请参考VirtuallyAware.com.
随着Hyper-V的不断流行,越来越多的厂商加入到支持Hyper-V VSS编写器的工作中,使得完成从主机级别直接备份虚拟机到磁带更容易了。这些产品非常有用,但需要购买授权,增加了成本。其他主要的厂商尚不支持Hyper-V VSS编写器的,这就需要采购其他的备份产品或者采用一些高效、低成本的替代方法。你可以在自己的环境中试验这些方法,然后告诉我用的如何或者你的任何建议。
|
|