Saltar al contenido

Cómo utilizar una instantánea de volumen para realizar copias de seguridad

Solución:

Solución 1:

Entonces, con el espíritu de reinventar la rueda, les presento el excelente guión de Tomalak (ver arriba) pero completamente reescrito en Potencia Shell!!! La razón principal por la que hice esto fue para evangelizar los asombrosos poderes de Powershell, pero también porque desprecio vbscript con todo mi ser.

En su mayoría, es una característica idéntica, pero implementé algunas cosas de manera un poco diferente por varias razones. La salida de depuración es definitivamente más detallada.

Una cosa muy importante a tener en cuenta es que esta versión detecta la versión del sistema operativo y el bitness y llama a la versión apropiada de vshadow.exe. Incluí un cuadro a continuación para mostrar qué versiones de vshadow.exe usar, dónde obtenerlas y cómo nombrarlas.


Aquí está la información de uso:

VssSnapshot.ps1

Description:
  Create, mount or delete a Volume Shadow Copy Service (VSS) Shadow Copy (snapshot)

Usage:
  VssSnapshot.ps1 Create -Target  -Volume  [-Debug]
  VssSnapshot.ps1 Delete -Target  [-Debug]

Paremeters:
  Create  - Create a snapshot for the specified volume and mount it at the specified target
  Delete  - Unmount and delete the snapshot mounted at the specified target
  -Target - The path (quoted string) of the snapshot mount point
  -Volume - The volume (drive letter) to snapshot
  -Debug  - Enable debug output (optional)

Examples:
  VssSnapshot.ps1 Create -Target D:BackupDriveC -Volume C
  - Create a snapshot of volume C and mount it at "D:BackupDriveC"

  VssSnapshot.ps1 Delete -Target D:BackupDriveC
  - Unmount and delete a snapshot mounted at "D:BackupDriveC"

Advanced:
  VssSnapshot.ps1 create -t "c:vss mountc" -v C -d
  - Create a snapshot of volume C and mount it at "C:Vss MountC"
  - example mounts snapshot on source volume (C: --> C:)
  - example uses shortform parameter names
  - example uses quoted paths with whitespace
  - example includes debug output

Aquí está el guión:

# VssSnapshot.ps1
# http://serverfault.com/questions/119120/how-to-use-a-volume-shadow-copy-to-make-backups/119592#119592

Param ([String]$Action, [String]$Target, [String]$Volume, [Switch]$Debug)
$ScriptCommandLine = $MyInvocation.Line
$vshadowPath = "."

# Functions
Function Check-Environment 
  Write-Dbg "Checking environment..."

  $UsageMsg = @'
VssSnapshot

Description:
  Create, mount or delete a Volume Shadow Copy Service (VSS) Shadow Copy (snapshot)

Usage:
  VssSnapshot.ps1 Create -Target  -Volume  [-Debug]
  VssSnapshot.ps1 Delete -Target  [-Debug]

Paremeters:
  Create  - Create a snapshot for the specified volume and mount it at the specified target
  Delete  - Unmount and delete the snapshot mounted at the specified target
  -Target - The path (quoted string) of the snapshot mount point
  -Volume - The volume (drive letter) to snapshot
  -Debug  - Enable debug output (optional)

Examples:
  VssSnapshot.ps1 Create -Target D:BackupDriveC -Volume C
  - Create a snapshot of volume C and mount it at "D:BackupDriveC"

  VssSnapshot.ps1 Delete -Target D:BackupDriveC
  - Unmount and delete a snapshot mounted at "D:BackupDriveC"

Advanced:
  VssSnapshot.ps1 create -t "c:vss mountc" -v C -d
  - Create a snapshot of volume C and mount it at "C:Vss MountC"
  - example mounts snapshot on source volume (C: --> C:)
  - example uses shortform parameter names
  - example uses quoted paths with whitespace
  - example includes debug output
'@

  If ($Action -eq "Create" -And ($Target -And $Volume))  Where-Object $_.Name -eq ($Volume).Substring(0,1)).Root
    If ($Volume -ne "") 
      Write-Dbg "Verified volume: $Volume"
     Else 
      Write-Dbg "Cannot find the specified volume"
      Exit-Script "Cannot find the specified volume"
    
    Write-Dbg "Argument check passed"
   ElseIf ($Action -eq "Delete" -And $Target ) 
    Write-Dbg "Argument check passed"
   Else 
    Write-Dbg "Invalid arguments: $ScriptCommandLine"
    Exit-Script "Invalid arguments`n`n$UsageMsg"
  


  $WinVer = ((Get-WmiObject Win32_OperatingSystem).Version).Substring(0,3)
    Switch ($WinVer) 
    "5.2" 
      $vshadowExe = "vshadow_2003"
      $WinBit = ((Get-WmiObject Win32_Processor)[0]).AddressWidth
    
    "6.0" 
      $vshadowExe = "vshadow_2008"
      $WinBit = (Get-WmiObject Win32_OperatingSystem).OSArchitecture
    
    "6.1" 
      $vshadowExe = "vshadow_2008R2"
      $WinBit = (Get-WmiObject Win32_OperatingSystem).OSArchitecture
    
    Default 
      Write-Dbg "Unable to determine OS version"
      Exit-Script "Unable to determine OS version"
    
  

  Switch ($WinBit) 
    ($_ -eq "32") -or ($_ -eq "32-bit") $vshadowExe += "_x86.exe"
    ($_ -eq "64") -or ($_ -eq "64-bit") $vshadowExe += "_x64.exe"
    Default 
      Write-Dbg "Unable to determine OS bitness"
      Exit-Script "Unable to determine OS bitness"
    
  

  $Script:vshadowExePath = Join-Path $vshadowPath $vshadowExe
  If (Test-Path $vshadowExePath) 
    Write-Dbg "Verified vshadow.exe: $vshadowExePath"
   Else 
    Write-Dbg "Cannot find vshadow.exe: $vshadowExePath"
    Exit-Script "Cannot find vshadow.exe"
  

  Write-Dbg "Environment ready"


Function Prepare-Target 
  Write-Log "Preparing target..."
  Write-Dbg "Preparing target $Target"


  If (!(Test-Path (Split-Path $Target -Parent))) 
  Write-Dbg "Target parent does not exist"
  Exit-Script "Invalid target $Target"
  
  If ((Test-Path $Target)) 
    Write-Dbg "Target already exists"
    If (@(Get-ChildItem $Target).Count -eq 0) 
      Write-Dbg "Target is empty"
     Else 
      Write-Dbg "Target is not empty"
      Exit-Script "Target contains files/folders"
    
   Else 
    Write-Dbg "Target does not exist. Prompting user..."
    $PromptYes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Create target folder"
    $PromptNo = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "Do not create target folder"
    $PromptOptions = [System.Management.Automation.Host.ChoiceDescription[]]($PromptYes, $PromptNo)
    $PromptResult = $Host.UI.PromptForChoice("Create folder", "The target folder `"$target`" does not exist.`nWould you like to create the folder?", $PromptOptions, 0) 
    Switch ($PromptResult) 
      0 
        Write-Dbg "User Accepted. Creating target..."
        $Null = New-Item -Path (Split-Path $Target -Parent) -Name (Split-Path $Target -Leaf) -ItemType "Directory"
      
      1 
        Write-Dbg "User declined. Exiting..."
        Exit-Script "Target does not exist"
      
    
  
  Write-Log "Target ""$Target"" ready"
  Write-Dbg """$Target"" ready"


Function Create-Snapshot 
  Write-Log "Creating snapshot..."
  Write-Dbg "Creating snapshot of $Volume"
  $Cmd = "$vshadowExePath -p $Volume"
  $CmdResult = Run-Command $Cmd -AsString

  Write-Dbg "Snapshot created successfully"

  $SnapshotID = $CmdResult -Match 'SNAPSHOT ID = ([^]36)'
  If ($SnapshotID) 
    $SnapshotID = $Matches[1]
    Write-Dbg "SnapshotID: $SnapshotID"
    Write-Log "Snapshot $SnapshotID created"
   Else 
    Write-Dbg "Unable to determine SnapshotID"
    Exit-Script "Unable to determine SnapshotID"
  

  Return $SnapshotID
}

Function Mount-Snapshot ($SnapshotID) 
  Write-Log "Mounting snapshot..."
  Write-Dbg "Mounting $SnapshotID at ""$Target"""

  $Cmd = "$vshadowExePath `"-el=$SnapshotId,$Target`"" #Must use escaped quotes because Invoke-Expression gets all weird about curly braces
  $CmdResult = Run-Command $Cmd

  Write-Log "Snapshot $SnapshotID mounted at target ""$Target"""
  Write-Dbg "$SnapshotID mounted at ""$Target"""


Function Delete-Snapshot 
  Write-Log "Deleting snapshot..."
  Write-Dbg "Deleting snapshot at target ""$Target"""

  $SnapshotID = Get-SnapshotIdbyTarget

  $Cmd = "$vshadowExePath `"-ds=$SnapshotId`""
  $CmdResult = Run-Command $Cmd

  Write-Log "Snapshot $SnapshotID deleted at target ""$Target"""
  Write-Dbg "$SnapshotID deleted at ""$Target"""


Function Get-SnapshotIdbyTarget  Out-String

  If ($Snapshots) 
    $Null = $Snapshots -Match '([^]36)'
    $SnapshotID = $Matches[0]
   Else 
    Write-Dbg "Unable to determine SnapshotID for target $Target"
    Exit-Script "Unable to determine SnapshotID"
    

  Write-Dbg "SnapshotID: $SnapshotID"

  Return $SnapshotID
}

Function Run-Command ([String]$Cmd, [Switch]$AsString=$False, [Switch]$AsArray=$False)  Out-String
  $CmdErrorCode = $LASTEXITCODE

  If ($CmdErrorCode -eq 0 ) 
    Write-Dbg "Command successful. Exit code: $CmdErrorCode"
    Write-Dbg $CmdOutputString
   Else 
    Write-Dbg "Command failed. Exit code: $CmdErrorCode"
    Write-Dbg $CmdOutputString
    Exit-Script "Command failed. Exit code: $CmdErrorCode"
  

  If (!($AsString -or $AsArray)) 
    Return $CmdErrorCode
   ElseIf ($AsString) 
    Return $CmdOutputString
   ElseIf ($AsArray) 
    Return $CmdOutputArray
  


Function Write-Msg ([String]$Message) 
  If ($Message -ne "") 
    Write-Host $Message
  


Function Write-Log ([String]$Message) 
  Write-Msg "[$(Get-Date -Format G)] $Message"


Function Write-Dbg ([String]$Message) 
  If ($Debug) 
    Write-Msg ("-" * 80)
    Write-Msg "[DEBUG] $Message"
    Write-Msg ("-" * 80)
  


Function Exit-Script ([String]$Message) 
  If ($Message -ne "") 
    Write-Msg "`n[FATAL ERROR] $Message`n"
  
  Exit 1


# Main
Write-Log "VssSnapshot started"
Check-Environment

Switch ($Action) 
  "Create" 
    Prepare-Target
    $SnapshotID = Create-Snapshot
    Mount-Snapshot $SnapshotID
  
  "Delete" 
    Delete-Snapshot
  


Write-Log "VssSnapshot finished"

Aquí están las versiones de vshadow.exe para usar:

  1. Windows 2003 / 2003R2
    • SDK 7.2 del servicio de instantáneas de volumen
    • x86: C: Archivos de programa Microsoft VSSSDK72 TestApps vshadow bin release-server vshadow.exe
      • Cambiar nombre a: vshadow_2003_x86.exe
    • x64: no he podido localizar una versión x64 de vshadow.exe para Windows 2003 x64
  2. Windows 2008
    • SDK de Windows para Windows Server 2008 y .NET Framework 3.5
    • x86: C: Archivos de programa Microsoft SDKs Windows v6.1 Bin vsstools vshadow.exe
      • Cambiar nombre a: vshadow_2008_x86.exe
    • x64: C: Archivos de programa Microsoft SDKs Windows v6.1 Bin x64 vsstools vshadow.exe
      • Cambiar nombre a: vshadow_2008_x64.exe
  3. Windows 2008R2
    • SDK de Microsoft Windows para Windows 7 y .NET Framework 4
    • x86: C: Archivos de programa (x86) Microsoft SDKs Windows v7.0A Bin vsstools vshadow.exe
      • Cambiar nombre a: vshadow_2008R2_x86.exe
    • x64: C: Archivos de programa (x86) Microsoft SDKs Windows v7.0A Bin x64 vsstools vshadow.exe
      • Cambiar nombre a: vshadow_2008R2_x64.exe

Solucion 2:

Entonces … he estado trabajando en un pequeño VBScript que puede:

  • tomar instantáneas de VSS persistentes
  • móntelos en una carpeta (desde la cual puede hacer una copia de seguridad de los archivos)
  • desmontar instantáneas de VSS

Se basa en vshadow.exe (documentación), que forma parte del SDK 7.2 del Servicio de instantáneas de volumen, disponible en Microsoft. He estado trabajando con esta versión: “VSHADOW.EXE 2.2 – Cliente de muestra de instantáneas de volumen, Copyright (C) 2005 Microsoft Corporation.

Básicamente, es un pequeño envoltorio ordenado alrededor de estos cuatro comandos vshadow:

vshadow.exe -q                - List all shadow copies in the system
vshadow.exe -p volume list  - Manages persistent shadow copies
vshadow.exe -el=SnapID,dir  - Expose the shadow copy as a mount point
vshadow.exe -ds=SnapID      - Deletes this shadow copy

Aquí está su pantalla de ayuda:

VSS Snapshot Create/Mount Tool

Usage:
cscript /nologo VssSnapshot.vbs /target:path  /volume:X  [/debug]

/volume  - drive letter of the volume to snapshot
/target  - the path (absolute or relative) to mount the snapshot to
/debug   - swich on debug output

Examples:
cscript /nologo VssSnapshot.vbs /target:C:BackupDriveD /volume:D
cscript /nologo VssSnapshot.vbs /target:C:BackupDriveD /unmount

Hint: No need to unmount before taking a new snapshot.

Aquí algunos resultados de muestra:

C:VssSnapshot>cscript /nologo VssSnapshot.vbs /target:MountPointsE /volume:E
05/03/2010 17:13:04 preparing VSS mount point...
05/03/2010 17:13:04 mount point prepared at: C:VssSnapshotMountPointsE
05/03/2010 17:13:04 creating VSS snapshot for volume: E
05/03/2010 17:13:08 snapshot created with ID: 4ed3a907-c66f-4b20-bda0-9dcda3b667ec
05/03/2010 17:13:08 VSS snapshot mounted sucessfully
05/03/2010 17:13:08 finished

C:VssSnapshot>cscript /nologo VssSnapshot.vbs /target:MountPointsE /unmount
05/03/2010 17:13:35 preparing VSS mount point...
05/03/2010 17:13:36 nothing else to do
05/03/2010 17:13:36 finished

Y aquí está el guión en sí. Se aplica el descargo de responsabilidad habitual: el software se proporciona tal cual, no doy garantías, utilícelo bajo su propio riesgo, si algo se rompe, el único culpable es usted mismo. Sin embargo, lo he probado bastante a fondo y me funciona bien. No dude en notificarme de cualquier error a través de los comentarios a continuación.

''# VssSnapshot.vbs
''# http://serverfault.com/questions/119120/how-to-use-a-volume-shadow-copy-to-make-backups/119592#119592
Option Explicit

Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")

''# -- MAIN SCRIPT -------------------------------------------
Dim args, snapshotId, targetPath, success
Set args = WScript.Arguments.Named
CheckEnvironment

Log "preparing VSS mount point..."
targetPath = PrepareVssMountPoint(args("target"))

If args.Exists("unmount") Then
  Log "nothing else to do"
ElseIf targetPath <> vbEmpty Then
  Log "mount point prepared at: " & targetPath
  Log "creating VSS snapshot for volume: " & args("volume")
  snapshotId = CreateVssSnapshot(args("volume"))

  If snapshotId <> vbEmpty Then
    Log "snapshot created with ID: " & snapshotId
    success = MountVssSnapshot(snapshotId, targetPath)
    If success Then
      Log "VSS snapshot mounted sucessfully"
    Else
      Die "failed to mount snapshot"
    End If
  Else
    Die "failed to create snapshot"
  End If
Else
  Die "failed to prepare mount point"
End If

Log "finished"

''# -- FUNCTIONS ---------------------------------------------
Function PrepareVssMountPoint(target) ''# As String
  Dim cmd, result, outArray
  Dim path, snapshot, snapshotId
  Dim re, matches, match

  PrepareVssMountPoint = VbEmpty
  target = fso.GetAbsolutePathName(target)

  If Not fso.FolderExists(fso.GetParentFolderName(target)) Then 
    Die "Invalid mount point: " & target
  End If

  ''# create or unmount (=delete existing snapshot) mountpoint
  If Not fso.FolderExists(target) Then
    If Not args.Exists("unmount") Then fso.CreateFolder target
  Else
    Set re = New RegExp
    re.MultiLine = False
    re.Pattern = "- Exposed locally as: ([^rn]*)"

    cmd = "vshadow -q"
    result = RunCommand(cmd, false)
    outarray = Split(result, "*")

    For Each snapshot In outArray
      snapshotId = ParseSnapshotId(snapshot)
      If snapshotId <> vbEmpty Then
        Set matches = re.Execute(snapshot)
        If matches.Count = 1 Then
          path = Trim(matches(0).SubMatches(0))
          If fso.GetAbsolutePathName(path) = target Then
            cmd = "vshadow -ds=" & snapshotId
            RunCommand cmd, true
            Exit For
          End If
        End If
      End If
    Next

    If args.Exists("unmount") Then fso.DeleteFolder target
  End If

  PrepareVssMountPoint = target
End Function

Function CreateVssSnapshot(volume) ''# As String
  Dim cmd, result

  If Not fso.DriveExists(volume) Then
    Die "Drive " & volume & " does not exist."
  End If

  cmd = "vshadow -p " & Replace(UCase(volume), ":", "") & ":"
  result = RunCommand(cmd, false)
  CreateVssSnapshot = ParseSnapshotId(result)
End Function

Function MountVssSnapshot(snapshotId, target) ''# As Boolean
  Dim cmd, result

  If fso.FolderExists(targetPath) Then
    cmd = "vshadow -el=" & snapshotId & "," & targetPath
    result = RunCommand(cmd, true)
  Else
    Die "Mountpoint does not exist: " & target
  End If

  MountVssSnapshot = (result = "0")
End Function

Function ParseSnapshotId(output) ''# As String
  Dim re, matches, match

  Set re = New RegExp
  re.Pattern = "SNAPSHOT ID = ([^]36})"
  Set matches = re.Execute(output)

  If matches.Count = 1 Then
    ParseSnapshotId = matches(0).SubMatches(0)
  Else
    ParseSnapshotId = vbEmpty
  End If
End Function

Function RunCommand(cmd, exitCodeOnly) ''# As String
  Dim shell, process, output

  Dbg "Running: " & cmd

  Set shell = CreateObject("WScript.Shell")

  On Error Resume Next
  Set process = Shell.Exec(cmd)
  If Err.Number <> 0 Then
    Die Hex(Err.Number) & " - " & Err.Description
  End If
  On Error GoTo 0

  Do While process.Status = 0
    WScript.Sleep 100
  Loop
  output = Process.StdOut.ReadAll

  If process.ExitCode = 0 Then 
    Dbg "OK"
    Dbg output
  Else
    Dbg "Failed with ERRORLEVEL " & process.ExitCode
    Dbg output
    If Not process.StdErr.AtEndOfStream Then 
      Dbg process.StdErr.ReadAll
    End If
  End If  

  If exitCodeOnly Then
    Runcommand = process.ExitCode
  Else
    RunCommand = output
  End If
End Function

Sub CheckEnvironment
  Dim argsOk

  If LCase(fso.GetFileName(WScript.FullName)) <> "cscript.exe" Then
    Say "Please execute me on the command line via cscript.exe!"
    Die ""
  End If

  argsOk = args.Exists("target")
  argsOk = argsOk And (args.Exists("volume") Or args.Exists("unmount"))

  If Not argsOk Then
    Say "VSS Snapshot Create/Mount Tool" & vbNewLine & _
        vbNewLine & _
        "Usage: " & vbNewLine & _
        "cscript /nologo " & fso.GetFileName(WScript.ScriptFullName) & _
          " /target:path  /volume:X  [/debug]" & _
        vbNewLine & vbNewLine & _
        "/volume  - drive letter of the volume to snapshot" & _
        vbNewLine & _
        "/target  - the path (absolute or relative) to mount the snapshot to" & _
        vbNewLine & _
        "/debug   - swich on debug output" & _
        vbNewLine & vbNewLine & _
        "Examples: " & vbNewLine & _
        "cscript /nologo " & fso.GetFileName(WScript.ScriptFullName) & _
          " /target:C:BackupDriveD /volume:D" &  vbNewLine & _
        "cscript /nologo " & fso.GetFileName(WScript.ScriptFullName) & _
          " /target:C:BackupDriveD /unmount" & _
        vbNewLine & vbNewLine & _
        "Hint: No need to unmount before taking a new snapshot." & vbNewLine

    Die ""
  End If
End Sub

Sub Say(message)
  If message <> "" Then WScript.Echo message
End Sub

Sub Log(message)
  Say FormatDateTime(Now()) & " " & message
End Sub

Sub Dbg(message)
  If args.Exists("debug") Then 
    Say String(75, "-")
    Say "DEBUG: " & message
  End If
End Sub

Sub Die(message)
  If message <> "" Then Say "FATAL ERROR: " & message
  WScript.Quit 1
End Sub

Espero que esto ayude a alguien. Siéntase libre de usarlo de acuerdo con cc-by-sa. Todo lo que le pido es que deje intacto el enlace que apunta aquí.


Solución 3:

  1. Usa el comando vssadmin list shadows para enumerar todas las instantáneas disponibles. Obtendrá un resultado como este …
C:> vssadmin list shadows
vssadmin 1.1 - Volume Shadow Copy Service administrative command-line tool
(C) Copyright 2001 Microsoft Corp.

Contents of shadow copy set ID: b6f6fb45-bedd-4b77-8f51-14292ee921f3
   Contained 1 shadow copies at creation time: 9/25/2016 12:14:23 PM
      Shadow Copy ID: 321930d4-0442-4cc6-b2aa-ec47f21d0eb1
         Original Volume: (C:)\?Volumead1dd231-1200-11de-b1df-806e6f6e6963
         Shadow Copy Volume: \?GLOBALROOTDeviceHarddiskVolumeShadowCopy68
         Originating Machine: joshweb.josh.com
         Service Machine: joshweb.josh.com
         Provider: 'Microsoft Software Shadow Copy provider 1.0'
         Type: ClientAccessible
         Attributes: Persistent, Client-accessible, No auto release, No writers, Differential

Contents of shadow copy set ID: c4fd8646-57b3-4b39-be75-47dc8e7f881d
   Contained 1 shadow copies at creation time: 8/25/2016 7:00:18 AM
      Shadow Copy ID: fa5da100-5d90-493c-89b1-5c27874a23c6
         Original Volume: (E:)\?Volume4ec17949-12b6-11de-8872-00235428b661
         Shadow Copy Volume: \?GLOBALROOTDeviceHarddiskVolumeShadowCopy3
         Originating Machine: joshweb.josh.com
         Service Machine: joshweb.josh.com
         Provider: 'Microsoft Software Shadow Copy provider 1.0'
         Type: ClientAccessible
         Attributes: Persistent, Client-accessible, No auto release, No writers, Differential

C:
  1. Nota la Shadow Copy Volume nombre de la instantánea que desea (más fácil para el portapapeles).

  2. Monte la copia de sombra

En Windows 2003 …

Deberá descargar las herramientas del kit de recursos para 2003 si aún no las tiene.

Ingrese el comando …

linkd c:shadow \?GLOBALROOTDeviceHarddiskVolumeShadowCopy69

…dónde c:shadow es la ruta donde desea que aparezca la instantánea y \?GLOBALROOTDeviceHarddiskVolumeShadowCopy69 es el nombre que copiaste arriba. Tenga en cuenta que debe ¡agregue una barra invertida al final del nombre de la instantánea!

En Windows 2008 y posteriores …

Ingrese el comando …

mklink c:shadow \?GLOBALROOTDeviceHarddiskVolumeShadowCopy69

…dónde c:shadow es la ruta donde desea que aparezca la instantánea y \?GLOBALROOTDeviceHarddiskVolumeShadowCopy69 es el nombre que copiaste arriba. Tenga en cuenta que debe ¡agregue una barra invertida al final del nombre de la instantánea!

  1. Utilice la herramienta que desee (incluido el explorador de Windows o XCOPY) para acceder a los archivos desde c:shadow.

Solución 4:

Está malinterpretando cómo funciona VSS con el sistema de archivos (cómo funciona con las bases de datos es completamente diferente). En el sistema de archivos, VSS se utiliza para implementar la función “Versiones anteriores”, que se utiliza únicamente para realizar instantáneas. cambios a archivos y carpetas en puntos predefinidos en el tiempo para la recuperación a través de la pestaña Versiones anteriores en los clientes. Estos cambios luego se fusionan con los datos del volumen para crear el conjunto de recuperación. Por lo tanto, depende de que el volumen original aún esté allí para realizar la recuperación, lo que, en otras palabras, es inútil para los fines de una copia de seguridad y restauración adecuadas.

Creo que debes alejarte de cómo quieres hacer esto y pensar de nuevo en lo que quieres hacer.

350 GB de datos no es mucho realmente, y estoy dispuesto a apostar a que el porcentaje de los que se utilizan activamente en el día a día es bastante bajo. ¿Ha considerado realizar copias de seguridad diferenciales nocturnas con copias de seguridad completas solo los fines de semana? ¿O utilizar la replicación DFS programada en un almacenamiento alternativo para obtener una “instantánea” (que luego se respalda)?


Solución 5:

Espero que esto sea lo que quieres:

diskshadow -s vssbackup.cfg

vssbackup.cfg:

set context persistent
set metadata E:backupresult.cab
set verbose on
begin backup
     add volume C: alias ConfigVolume
     create
     EXPOSE %ConfigVolume% Y:
     # Y is your VSS drive
     # run your backup script here
     delete shadows exposed Y:
end backup

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *