17. maj 2005 - 13:47Der er
10 kommentarer og 2 løsninger
Backup af MS Virtual Server 2005
Jeg har to servere, der begge kører med MS Virtual Server 2005.
Jeg vil så gerne have lavet en form for backup-rutine, der kopierer alle de Virtuelle servere fra Server1 til Server2, og omvendt, således at de to servere hver især laver backup op imod hinanden af alle deres Virtuelle Servere, så hvis éen skulle gå ned, kan jeg altid starte dens Virtuelle Servere midlertidigt på den anden Server.
Det skulle helst kunne køres automatisk, evt. vha. Windows' planlagte opgaver, om ikke andet så kunne jeg måske lave et VB program til formålet. -Og behøves det at lukke ned for de Virtuelle servers, eller kan de tages "hot" ? - i så fald, kan de scriptes ned, og scriptes op igen efter udført backup?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
jeg kopierer forresten lige scriptet herind, i tilfælde af at linket engang går død, og nogen vil vide løsningen:
Author: Jeff Trumbull
Description: Backup files that make a Microsoft virtual server with only about 1 minute of down time. Suspends the virtual server, takes a shadow copy , starts the virtual server then copies virtual server files. This could be used to copy any open files. Requires vshadow.exe from vss sdk.
Script:
On Error Resume Next
Set objShell = CreateObject ("WScript.Shell") set objFSO=CreateObject("Scripting.FileSystemObject") Set virtualServer = CreateObject("VirtualServer.Application") DestBackupDir = "your backup path" sExCmd = "CreateVSS.cmd" Set oFileSys = CreateObject("Scripting.FileSystemObject") if oFileSys.FileExists(sExCmd) then oFileSys.DeleteFile(sExCmd) set oExCmd = oFileSys.CreateTextFile(sExCmd, CopyOverwrite)
For each objVM in virtualServer.VirtualMachines 'See if vm machine is running. If so then do backup If objVM.State = 5 then 'Save state the virtual machine set saveTask = objVM.Save 'Loop waiting for task completion - and display status while not saveTask.isComplete WScript.Sleep 1000 wend 'Copy .VMC and .VSV files MyArray = Split(objVM.File,"\") Filename = MyArray(Ubound(MyArray)) objFSO.CopyFile objVM.File,DestBackupDir & Filename MyArray = Split(objVM.SavedStateFilePath,"\") Filename = MyArray(Ubound(MyArray)) objFSO.CopyFile objVM.SavedStateFilePath,DestBackupDir & Filename End If Next Set objVM = Nothing
' Create Shadow copy of VM drive oExCmd.WriteLine "vshadow.exe -script=setvar1.cmd -p d:" oExCmd.WriteLine "call setvar1.cmd" oExCmd.WriteLine "vshadow.exe -el=%SHADOW_ID_1%,x:" oExCmd.Close Result = objShell.run(sExCmd,vbMinimized, TRUE)
' Start VM machine up from saved state For each objVM in virtualServer.VirtualMachines 'See if vm machine is Saved. If so then resume If objVM.State = 2 then 'Start virtual machine objVM.Startup End If Next Set objVM = Nothing WScript.Sleep 10000
If Result = 0 then 'Loop through all vm machines For each objVM in virtualServer.VirtualMachines 'See if vm machine is running. If so copy shadow backup of vm disk drives If objVM.State = 5 then
'Copy virtual hard disks and undo disks For each vhd in objVM.HardDiskConnections MyArray = Split(vhd.undoHardDisk.file,"\") Filename = MyArray(Ubound(MyArray)) SourceName = "x" & Right(vhd.undoHardDisk.file,Len(vhd.undoHardDisk.file)-1) wscript.echo vhd.undoHardDisk.file wscript.echo SourceName objFSO.CopyFile SourceName,DestBackupDir & Filename MyArray = Split(vhd.HardDisk.file,"\") Filename = MyArray(Ubound(MyArray)) SourceName = "x" & Right(vhd.HardDisk.file,Len(vhd.HardDisk.file)-1) objFSO.CopyFile SourceName,DestBackupDir & Filename Next
End If Next End If
' Shutdown all shadow copy instances if oFileSys.FileExists(sExCmd) then oFileSys.DeleteFile(sExCmd) set oExCmd = oFileSys.CreateTextFile(sExCmd, CopyOverwrite) oExCmd.WriteLine "Echo y | vshadow.exe -da" oExCmd.Close Result = objShell.run(sExCmd,vbMinimized, TRUE)
'Script ends wscript.echo "done"
Keywords: Open File,vss,shadow Copy,virtual Server
tror lige jeg laver en manuel backup først, det ville BARE være surt hvis allesammen røg fordi jeg ikke brugte scriptet korrekt :-) -Desværre tager det lidt tid at tage backup af 540 GB :-(
hmm jeg har lidt problemer med at den kun tager backup af *.wmc og *.vsv filerne, men ikke *.vhd (De virtuelle harddisks) - og de er lidt de vigtigste :-(
Jeg har nu prøvet scriptet på 3 forskellige servers der alle kører windows 2003 med MS virtual server 2005, og ingen af dem tager kopi af vhd filerne...
okay, jeg tror jeg har fået det til at virke nu, her er en redigeret version af scriptet, der genererer en logfil hver gang den kører, så man kan holde lidt øje med hvad der sker, eller ikke sker...
-Desuden har jeg rettet en lille små-fejl vedr, at den var hard-coded til at lave shadow-copy af drev D, hvilket ikke dur hvis ens filer ligger på drev C, hvorfor dette script ikke virkdede for mig i første omgang.
Til sidst har jeg tilføget en lille "config" del i toppen af dokumentet, det burde forklare sig selv.
----------------------------start of VSbackup.vbs----------------------------- On Error Resume Next
'settings: DestBackupDir = "c:\Images\_backup\" 'Remember the \ in the end!! SourceDriveLetter = "c" 'No : - just the drive-letter! ShadowDriveLetter = "x" 'No : - just the drive-letter! - Remember that the drive-letter must be free, otherwise the backup WILL fail!
Set objShell = CreateObject ("WScript.Shell") set objFSO=CreateObject("Scripting.FileSystemObject") Set virtualServer = CreateObject("VirtualServer.Application")
Set oFileSys = CreateObject("Scripting.FileSystemObject")
sLogFile = "BackupVS_" & Replace(date(), ".", "-") & "@" & Replace(time(), ":", "-") & ".txt" if oFileSys.FileExists(sLogFile) then oFileSys.DeleteFile(sLogFile) set oLogFile = oFileSys.CreateTextFile(sLogFile, CopyOverwrite)
sExCmd = "CreateVSS.cmd" if oFileSys.FileExists(sExCmd) then oFileSys.DeleteFile(sExCmd) set oExCmd = oFileSys.CreateTextFile(sExCmd, CopyOverwrite)
For each objVM in virtualServer.VirtualMachines 'See if vm machine is running. If so then do backup oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Checking if VM Machine is running, If so, then do backup." oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "objVM.State = " & objVM.State If objVM.State = 5 then 'Save state the virtual machine oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Save state of the Virtual Machine." set saveTask = objVM.Save 'Loop waiting for task completion - and display status oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Loop waiting for task completion." while not saveTask.isComplete WScript.Sleep 1000 wend 'Copy .VMC and .VSV files oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Copy .VMC and .VSV files."
' Start VM machine up from saved state oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Start VM machine up from saved state." For each objVM in virtualServer.VirtualMachines 'See if vm machine is Saved. If so then resume oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "See if VM Machine is Saved. If so then resume." If objVM.State = 2 then 'Starting virtual machine oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Starting virtual machine." objVM.Startup End If Next Set objVM = Nothing WScript.Sleep 10000
If Result = 0 then 'Loop through all vm machines oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Loop through all VM Machines." For each objVM in virtualServer.VirtualMachines 'See if vm machine is running. If so copy shadow backup of vm disk drives oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "See if VM Machine is running. If so make a shadow copy of VM disk drives." oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "objVM.State = " & objVM.State If objVM.State = 5 then
'Copy virtual hard disks and undo disks oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Copy virtual hard disks and undo disks." For each vhd in objVM.HardDiskConnections
' Shutdown all shadow copy instances oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Shutdown all shadow copy instances." if oFileSys.FileExists(sExCmd) then oFileSys.DeleteFile(sExCmd) set oExCmd = oFileSys.CreateTextFile(sExCmd, CopyOverwrite) oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "WriteLine: " & sExCmd & ": Echo y | vshadow.exe -da" oExCmd.WriteLine "Echo y | vshadow.exe -da" oExCmd.Close Result = objShell.run(sExCmd,vbMinimized, TRUE)
'delete the temp .cmd files: if oFileSys.FileExists(sExCmd) then oFileSys.DeleteFile(sExCmd) if oFileSys.FileExists("setvar1.cmd") then oFileSys.DeleteFile("setvar1.cmd")
jeg hugger lige lidt af points selv, da jeg trods alt har udvidet og fejl-rettet en del på scriptet, håber det er ok, ellers sig til, så får du det hele.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.