替代答案:强制驱动器号持久性

替代答案:强制驱动器号持久性

我正在使用最新的 Backup Exec 2010 R3 设置备份系统,并且我想使用 USB 硬盘作为备份介质。我正在尝试找出将磁盘轮换策略引入 Backup Exec 的最佳无忧方法,但我遇到了以下问题:

设置(简化以解决当前问题)

  • Backup Exec 2010 R3服务器上Windows 2003 R2服务器
  • 每周的每一天使用不同的备份到磁盘文件夹
  • 根据星期几轮换外部磁盘

使用内置的可移动备份到磁盘选项

此选项存在问题,因为备份到磁盘文件夹基于驱动器号而不是磁盘 ID。这意味着:

  • 无法将多个可移动磁盘驱动器备份指定给同一个驱动器号。
  • 如果为磁盘分配驱动器号以允许创建多个可移动磁盘驱动器备份,则在创建全面的全年备份系统时,您很容易用尽所有可用的驱动器号。此外,需要特殊设置才能为驱动器准备磁盘以供使用(分配驱动器号)。
  • 如果由于 Windows USB 驱动器行为而重新排列驱动器号分配,则备份驱动器将无法上线。

所有这些意味着我没有直接的方法将可移动备份链接到磁盘文件夹到外部驱动器。

使用备份到磁盘设置

这种设置起初似乎有效,因为 Backup Exec 可以找到并使用磁盘。但是,系统似乎并不关心要使用哪个物理磁盘进行备份,而是在已经设置了其他磁盘备份文件夹的驱动器上创建磁盘备份文件夹。想象一下这种情况:

Backup Exec 设备:

  • BED001
  • BED002

对应的物理设备:

  • PD001
  • PD002

PD001 和 PD002 连接到系统以处理两天的备份。但是,Backup Exec 使用 BED001 进行两次备份,并在 PD001 上创建一个新的备份到磁盘文件夹来处理备份。

大问题

这里最大的问题是,在需要执行恢复操作来检索特定日期的数据时,如何设置系统以便轻松识别需要哪个磁盘?

答案1

替代答案:强制驱动器号持久性

尽管我绝对坚持我的第一个答案,但我想添加另一种方法,您可能只需付出一些初步努力就可以使它发挥作用。不过,对此有一个重大免责声明,因为我从未尝试过它,而且通常情况下,除非您完全按照预期的方式使用 Backup Exec,否则它通常会以失败告终。

通过 USBDLM 或 WMI 脚本强制

本质上,这种方法要求确保在备份作业运行之前,所有备份 USB 磁盘都具有相同的驱动器号。这可能可以通过使用 USBDLM 来实现,来自http://www.uwe-sieber.de/usbdlm_e.html。否则,您将需要查看 WMI 脚本(手动运行或计划在备份作业之前白天运行),以便通过序列/型号/设备 ID 查找有效、已连接的 USB 磁盘,并将其驱动器号分配给 RB2D 的固定驱动器号。您甚至可以在作业前命令中运行此命令,前提是在作业前运行之前未确定备份设备。

背景

我认为这种方法的问题在于 Backup Exec 对最终位于 (R)B2D 上的 IMG 文件的编号逻辑。我预计 Backup Exec 将无法跟踪哪些内容可以被覆盖,等等。如果您每次使用 RB2D 时都对其进行清点操作,则可能可以避免这种情况。同样,如果作业前命令在确定备份设备之前运行,您可能能够bemcmd.exe在分配驱动器号之后和备份作业运行之前使用它来运行已保存的清点作业。

与 WMI 交互的 VBScript 示例

下面是一个基本的 VBScript 文件,它根据允许的即插即用设备 ID 列表强制将磁盘上的第一个分区挂载到给定的驱动器号。它应该可以在 Windows Server 2003 及更高版本上运行,但目前我手头只有 XP,因此还没有亲自测试过:

Option Explicit

Const DRIVE_LETTER = "Q:"

Dim validDisks : validDisks = Array( _
    "USBSTOR\\DISK&VEN_KINGSTON&PROD_DATATRAVELER_2.0&REV_PMAP\\001D0F0C73C8B91123110031&0", _
    "USBSTOR\\DISK&VEN_TDKMEDIA&PROD_TF_150_DRIVE&REV_PMAP\\07AA0207B128CA8E&0", _
    "pnpdeviceid_of_disk_3", _
    "pnpdeviceid_of_disk_4" _
) 'REMEMBER TO ESCAPE ANY \ WITH \\

Dim wmiService : Set wmiService = GetObject("winmgmts:{impersonationLevel=Impersonate}!//.")

Dim wqlQuery : wqlQuery = "SELECT * FROM Win32_DiskDrive WHERE InterfaceType = 'USB' AND (PNPDeviceID = '" _
                         & Join(validDisks, "' OR PNPDeviceID = '") _
                         & "')"

Dim diskDrives : Set diskDrives = wmiService.ExecQuery(wqlQuery, , 48)
 
Dim diskDrive : For Each diskDrive In diskDrives
    WScript.Echo "Found disk: " & diskDrive.Caption 
    Dim deviceID : deviceID =  Replace(diskDrive.DeviceID, "\", "\\")
     
    wqlQuery = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & deviceID & """} WHERE AssocClass = Win32_DiskDriveToDiskPartition"
    Dim partitions : Set partitions = wmiService.ExecQuery(wqlQuery, , 48)
 
    Dim partition : For Each partition In partitions
        WScript.Echo "Found partition: " & partition.Caption 
    
        wqlQuery = "ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & partition.DeviceID & """} WHERE AssocClass = Win32_LogicalDiskToPartition"
        Dim logicalDisks : Set logicalDisks = wmiService.ExecQuery(wqlQuery, , 48)
 
        Dim logicalDisk : For Each logicalDisk In logicalDisks
            WScript.Echo "Found logical disk: " & logicalDisk.DeviceID 
            
            If UCase(Trim(logicalDisk.DeviceID)) <> UCase(DRIVE_LETTER) Then
                wqlQuery = "SELECT * FROM Win32_Volume WHERE Name = '" & logicalDisk.DeviceID & "\\'"
                Dim volumes : Set volumes = wmiService.ExecQuery(wqlQuery, , 48)
                
                Dim volume : For Each volume in volumes
                    WScript.Echo "Found volume: " & volume.Name
                    volume.DriveLetter = DRIVE_LETTER
                    volume.Put_
                    WScript.Echo "Changed USB disk drive letter to " & DRIVE_LETTER & "."
                    Exit For    'ONLY DO THIS TO THE FIRST ONE FOUND
                Next
            Else 
                WScript.Echo "USB disk drive letter is already " & DRIVE_LETTER & ".  No change required"
            End If
            
            Exit For    'ONLY DO THIS TO THE FIRST ONE FOUND
        Next
        
        Set logicalDisks = Nothing
        Exit For    'ONLY DO THIS TO THE FIRST ONE FOUND
    Next
    
    Set partitions = Nothing
    Exit For    'ONLY DO THIS TO THE FIRST ONE FOUND
Next

Set diskDrives = Nothing
Set wmiService = Nothing

祝你好运。

答案2

每个人都把这个问题过于复杂化了,但实际上它比最初想象的与 Backup Exec 有关的问题要简单和明显得多。

尝试使用 3 个驱动器

使用 3 个驱动器,其中一个是不会离开场所的固定驱动器(稍后会详细介绍)。

  • 您每天创建 2 个备份:MON-1MON-2. 至THURS-1THURS-2
  • 然后Friday1通过Friday5
  • 最后JAN- DEC

周一、周二、周三、周四的备份

这个想法是,备份将在夜间运行到两个驱动器。由于无法找到一个驱动器,您将遇到故障,但它将备份到另一个驱动器。

周五和月份的备份

每个星期五和每月,它都会备份到不会离开场所的固定驱动器以用于存档目的。

概述

所以您的备份应该是这样的(使用 GFS 系统和两个 USB 可移动驱动器)。

星期一1 星期一 2 星期二 1 星期二2 星期三1 星期三 2 星期四
1 星期四2 星期五1 星期五2 星期五3 星期五4 星期五 5 一月 二月 . . . 十二月














DAY1 属于 USB 驱动器 1
DAY2 属于 USB 驱动器 2

只要您记得取消失败的备份并且不重新安排它们,也能起到很好的作用!

答案3

尝试每个文件夹一个驱动器号

根据您要轮换的 USB 磁盘数量,一种选择可能是安装所有 USB 磁盘,让它们各自获得自己的驱动器号,在每个磁盘上创建一个可移动 B2D 文件夹,并将它们全部添加到设备池中。然后您的工作将以设备池为目标。

BE 将检查可移动的 RB2D 文件夹

理论上,由于它们被标记为可移动,Backup Exec 会在使用前检查每个 RB2D 文件夹是否存在/是否在线。而且,由于它们位于池中(并且作业以该池为目标),Backup Exec 将使用它能找到的第一个在线文件夹。

BE 不会检查固定的 B2D 文件夹

如果您打算轮换的 USB 磁盘数量超过您可以可靠分配的驱动器号数量,则必须在每个驱动器上创建不可移动的 B2D 文件夹。但是,BE 不会在使用前尝试检查它们是否在线,因此每次更换 USB 磁盘时您都必须重新启动 BE 服务。

KB有更多详细信息:

相关内容