Avatar billede angelenglen Nybegynder
17. maj 2005 - 13:47 Der 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?
Avatar billede drukkenbolden Nybegynder
17. maj 2005 - 20:55 #1
Hejsa

Denne artikel skulle gerne kunne hjælpe dig:
http://cwashington.netreach.net/depo/view.asp?Index=1049
Avatar billede angelenglen Nybegynder
17. maj 2005 - 22:45 #2
Det ser rigtigt spænnende ud, det må jeg lige teste på imorgen.
-Jeg tager ikke helt fejl, hvis jeg går ud fra det er vb-script, vel?

Til at starte med kan du da lægge et svar, hvis det virker og der ikke kommer bedere løsninger, ser du da ud som en vinder :-)
Avatar billede angelenglen Nybegynder
17. maj 2005 - 22:46 #3
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
Avatar billede drukkenbolden Nybegynder
18. maj 2005 - 09:00 #4
Svar :) håber at det er det du søgte !
Avatar billede angelenglen Nybegynder
18. maj 2005 - 10:44 #5
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 :-(
Avatar billede angelenglen Nybegynder
18. maj 2005 - 14:55 #6
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 :-(

Er det mig der gør noget forkert mon?
Avatar billede drukkenbolden Nybegynder
18. maj 2005 - 15:13 #7
har du tjekket at du møder de requirements der er sat for scriptet ?
Requires vshadow.exe from vss sdk.

Jeg har lige testet det på min server og det fungere umiddelbart uden problemer.
Avatar billede angelenglen Nybegynder
18. maj 2005 - 15:20 #8
jeg har godt nok vshadow.exe fra vss sdk, jeg har lagt den i samme mappe som scriptet, skulle den ligge et andet sted?

-jeg har ikke installeret SDK'en på serveren, kun kopieret exe filen ind...
Avatar billede angelenglen Nybegynder
18. maj 2005 - 15:30 #9
-den pauser og resumer forresten fint serverne, blot tager den ikke de dér vhd'er med.
Avatar billede angelenglen Nybegynder
20. maj 2005 - 18:22 #10
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...

nogen forslag til hvad der kan være galt?
Avatar billede angelenglen Nybegynder
01. juni 2005 - 11:42 #11
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)

                                            oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Backup started."
                                            oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "--------------------------------------------"


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."

        MyArray = Split(objVM.File,"\")
            Filename = MyArray(Ubound(MyArray))
                                                oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Settings:  " & MyArray(Ubound(MyArray))
            objFSO.CopyFile objVM.File,DestBackupDir & Filename

            MyArray = Split(objVM.SavedStateFilePath,"\")
            Filename = MyArray(Ubound(MyArray))
                                                oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "SavedState: " & MyArray(Ubound(MyArray))
            objFSO.CopyFile objVM.SavedStateFilePath,DestBackupDir & Filename
    End If
Next
Set objVM = Nothing

' Create Shadow copy of VM drive
                                            oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Create Shadow copy of VM drive."
                                            oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "WriteLine: " & sExCmd & ": vshadow.exe -script=setvar1.cmd -p " & SourceDriveLetter & ":"
                                            oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "WriteLine: " & sExCmd & ": call setvar1.cmd"
                                            oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "WriteLine: " & sExCmd & ": vshadow.exe -el=%SHADOW_ID_1%," & ShadowDriveLetter & ":"
oExCmd.WriteLine "vshadow.exe -script=setvar1.cmd -p " & SourceDriveLetter & ":"
oExCmd.WriteLine "call setvar1.cmd"
oExCmd.WriteLine "vshadow.exe -el=%SHADOW_ID_1%," & ShadowDriveLetter & ":"
oExCmd.Close
'Result = objShell.run(sExCmd,vbMinimized, TRUE)
Result = objShell.run(sExCmd,vbMaxmized, TRUE)

' 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

                MyArray = Split(vhd.undoHardDisk.file,"\")
                Filename = MyArray(Ubound(MyArray))
                                            oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "UndoHardDiskFile:  " & MyArray(Ubound(MyArray))
                SourceName = "x" & Right(vhd.undoHardDisk.file,Len(vhd.undoHardDisk.file)-1)
                                                    oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "UndoHardDisk File: " & vhd.undoHardDisk.file
                                                      oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "SourceName:        " & SourceName
                objFSO.CopyFile SourceName,DestBackupDir & Filename

                MyArray = Split(vhd.HardDisk.file,"\")
                Filename = MyArray(Ubound(MyArray))
                                            oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "HardDiskFile:  " & MyArray(Ubound(MyArray))
                SourceName = "x" & Right(vhd.HardDisk.file,Len(vhd.HardDisk.file)-1)
                                                    oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "HardDisk file: " & vhd.undoHardDisk.file
                                                    oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "SourceName:    " & SourceName
                objFSO.CopyFile SourceName,DestBackupDir & Filename
            Next

        End If
    Next
End If

' 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")

'Script ends
                                            oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "--------------------------------------------"
                                            oLogFile.WriteLine "[" & date() & "@" & time() & "] " & "Backup done."
msgbox "Backup done." & vbCrLf & "Date: " & date() & "." & vbCrLf & "Time: " & time() & "."
                                            oLogFile.Close

set oFileSys = nothing



----------------------------end of file-----------------------------
Avatar billede angelenglen Nybegynder
01. juni 2005 - 11:44 #12
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester