Zálohování MS Windows 2008 a naše zálohovací skripty ObsahÚvod o Windowsbackup Nevýhody Co umí grafické rozhraní CLI rozhraní (commandline) Použití System restore Zálohovací skripty Záloha více serverů na síťový disk Podrobnější popis nastavení remotingu: Skript pro remoting Skript vypadá takto : Monitoring a kontrola průběhu záloh Skript check_backup2K8.vbs Ověření funkčnosti Skript WSBtest.vbs Úvod o Windowsbackup Server 2008 obsahuje vlastní zálohovací software - Windows server backup WSB zálohuje diskové oddíly, volitelně dodatečné informace. Dodatečné informace zahrnují System state, bare metal recovery, podporované aplikace (Sharepoint, SQL, od exchange 2007 SP2 i exchange 2007) Zálohy probíhají na místní disk nebo síťový share, místní disky přístupná jako bloková zařízení uchovávají historii pomocí VSS, data jsou přístupná přes vytvořený VHD soubor. Zálohy provedené na síťová umístění nebo do souboru nepodporují VSS, mají pouze poslední zálohu. Pokud zazálohujete na síť obsah záložního disku, máte k dispozici všechny předchozí zálohy – obnovený disk pak má kompletní historii. Je možné i přímo připojit VHD se zazálohovaným diskem a z namontovanoé jednotky obnovovat historii. Nevýhody - nelze zálohovat samostatně jednotlivé soubory, jen celé partišny - připojíme-li zálohovací médium ke starší verzi OS (Win XP, Win 2003), zmizí snapshoty a tedy přijdeme o historii, zůstane jen poslední záloha - lze zálohovat jen to co je lokálně na stroji na kterém windowsbackup spouštíme. Nelze spravovat na dálku (ve smyslu nějakou konzolí ze své stanice.. přes RDP samozřejmě lze) Co umí grafické rozhraní – Vytvořit plán zálohování - umožňuje pouze jednu konfiguraci zálohování, naplánovanou vícekrát denně. – Zdroj zálohování – výběr mezi všemi disky v počítači, nebo vybrané oddíly. – Cíl zálohování – umožňuje pouze výběr místních disků, při výběru vice disků neumožňuje specifikovat rotační schéma, výběr se děje automaticky, zálohuje se na posledně použitý disk, pokud není k dispozici, tak na další dostupný disk, který se tak stává výchozím pro další zálohy. – Ručně spustit jednorázovou zálohu – buď ručně spustit zálohu v konfiguraci která je nastavena pro naplánované zálohy, nebo spustit zálohu se specifikací zdroje zálohování a výběrem cíle zálohování, je možno vybrat i síťové umístění. – Obnova ze zálohy – zobrazuje dostupnost záloh, umožňuje obnovu jednotlivých souborů nebo diskových oddílů, je možné obnovovat ze záloh vytvořených na jiných počítačích. – Inkrementální zálohy – pokud je třeba minimalizovat přenos dat po síti a není důležitá rychlost zálohovaného disku je možné zapnout inkrementální zálohy, což ponechá VSS kopie na zdrojovém disku a při zálohách se přenáší jen změny vypočítané z diferencí . Ukládání diferencí do VSS ale zpomaluje zápis na disk. CLI rozhraní (commandline) Wbadmin.exe – je třeba spouštět z administrátorského CMD, nebo vypnout UAC Umožňuje vše co GUI, naví c umožňuje specifikovat konkrétní disk jako cíl zálohy (nejjednodušeji pomocí přiřazeného písmene, jinak přes Volume ID, které je možné získat z příkazu wbadmin get disks Za zdroj zálohy lze vybrat konkrétní disky (opět pomocí písmene či ID) nebo automaticky systémové disky ( přepínač –allcritical) Lze provádět zálohy a obnovení systém state. Subcommand Description Wbadmin enable backup Configures and enables a daily backup schedule. Wbadmin disable backup Disables your daily backups. Wbadmin start backup Runs a one-time backup. If used with no parameters, uses the settings from the daily backup schedule. Wbadmin stop job Stops the currently running backup or recovery operation. Wbadmin get versions Lists details of backups recoverable from the local computer or, if another location is specified, from another computer. Wbadmin get items Lists the items included in a specific backup. Wbadmin start recovery Runs a recovery of the volumes, applications, files, or folders specified. Wbadmin get status Shows the status of the currently running backup or recovery operation. Wbadmin get disks Lists disks that are currently online. Wbadmin start systemstaterecovery Runs a system state recovery. Wbadmin start systemstatebackup Runs a system state backup. Wbadmin delete systemstatebackup Deletes one or more system state backups. Wbadmin start sysrecovery Runs a recovery of the full system (at least all the volumes that contain the operating system's state). This subcommand applies only to Windows Server 2008, and it is only available if you are using the Windows Recovery Environment. Wbadmin restore catalog Recovers a backup catalog from a specified storage location in the case where the backup catalog on the local computer has been corrupted. Wbadmin delete catalog Deletes the backup catalog on the local computer. Use this subcommand only if the backup catalog on this computer is corrupted and you have no backups stored at another location that you can use to restore the catalog. Použití Bez použití příkazového řádku lze naplánovat zálohování na lokální zálohovací disk (může být SCSI, USB, či interní), přepínání mezi cíli je možné pouze ručně odebíráním disků či přepnutí do offline režimu pomocí nástroje pro správu disků Pomocí příkazového řádku a plánovače úloh lze naplánovat více rozdílných úloh zálohování, každá úloha může směrovat na jiný cíl, ale nefunguje tu automatické přepínání cílů – pokud je cíl offline, záloha neproběhne. Stejně tak není možné pustit více úloh souběžně, pokud běží zálohování (jedno jestli z GUI nebo CLI) další úloha zálohování se nespustí. V serveru 2008 R2 je nová verze zálohování, která přináší navíc možnost zálohovat jednotlivé soubory, adresáře a zálohu do síťového úložiště z GUI. Normálním způsobem je možné naplánovat pouze jednu zálohu, s jedním výběrem zálohovaných dat a jednou denně. Častější nebo jinak pravidelné zálohování se dá nastavit v task scheduleru - Backup udělá naplánovanou úlohu v sekci Microsoft\windows\windowsBackup kde se dá modifikovat schedule. Pokud je potřeba více různých záloh, je třeba použít naskriptovaný wbadmin. System restore System si sam vyhodnocuje ktere disky zahrne do System restore zalohy, pridat dalsi disky se daji, odebrat vyzadovane ne Pokud do system restore zalohy vyzaduje i jiny nez systemovy disk je treba overit bcdedit - ze zavadeci soubory jsou na C nebo System reserved Active partition Services na jinem disku nez C - Pokud je registrovana sluzba v registrech Services na jinem disku nez C prida ho taky (maja - overeno v Sauteru, po nakopirovani a uprave v registrech Eset konzole z disku C na D a restartu uz vyzaduje jen disk C, predtim i E) Udajne problem muze delat i presmerovani Dokumentu ci Plochy Zálohovací skripty Záloha více serverů na síťový disk Vyžaduje Server 2008 R2, povolené Remoting v powershellu – Enable-psremoting příkaz Podrobnější popis nastavení remotingu:[+] Install WinRm? Enable PowerShell? Remoting Set TrustedHosts? * Create a Remote Session with PSSession Goal - To Install the WinRm? Service The problem in explaining how to install WinRm? is that each operating system has a different requirement. Windows 7 and Server 2008 R2 already have WinRm?, so there is no need worry about installing this service. However, for Vista, XP and Windows Server 2008 you need to download the files from Microsoft and install WinRm?. Any doubts on what your machine already has installed either check the Services mmc, or better still use PowerShell? and try: Get-Service? winrm. Goal - To Enable PowerShell? Remoting Launch PowerShell? v 2.0 as an administrator then try this: Enable-PSRemoting Note that unlike PSSession commands, this function only has one 'S' - PSRemoting. Actually, the underling cmdlet is Enable-PSSessionConfiguration. Running Enable-PSRemoting cmdlet achieves the following: Starts the WinRM service and sets the startup type to Automatic. Enables a firewall exception for WS-Management communications. Creates a listener to accept requests on any IP address. Goal - To Check TrustedHosts? for * (All) First let us digress and check for PowerShell? 'providers'. Get-PsProvider? The point of the other command is to show the existence of the WSMan namespace which maps to WinRm?. Next we can check its config settings in general and TrustedHosts? in particular. PowerShell? Remoting cd wsman: cd localhost\client dir Note 1: Beware, plain 'cd wsman' fails, we need that colon. Note 2: You can usually omit the line 'cd localhost\client'. Crucial Goal - Set TrustedHosts? * The concept is straightforward; on the 'Victim' machine, the one you are connecting to, you must specify which servers are allowed to connect, these are known as the trusted hosts. Thus if you are on a server called 'BigServe', before you can remote to 'LittleComputer' you must set TrustedHosts? on LittleComputer?. Important: this script will not work unless you are in the localhost\client folder of the WSMan namespace, see above instruction. This method comes into its own in non-domain situation. If you have an Active Directory domain then you can configure TrustedHosts? via Group Policy. Remote PowerShell? Set TrustedHosts? cd wsman: set-Item TrustedHosts? * Please remove the # from the next line restart-Service winrm Note 3: You could simplify the above command to: Set-Item? WSMan:\localhost\Client\TrustedHosts * Note 4: For PowerShell? to recognise the new TrustedHosts? settings you need to restart the WinRm? service. It's satisfying to use PowerShell? itself to achieve this with: Restart-Service? winrm Note 5: Here is a rare plural - TrustedHosts?. All the PowerShell? cmdlets are singular, but TrustedHosts? is plural. Note 6: If this command gives trouble, revert to DOS! Run winrm -? in a CMD box As Administrator, specifically: winrm get winrm/config/client or winrm set winrm/config/client/ @{TrustedHosts="*"} Skript pro remoting Windows server backup při zálohách na síťové úložiště zálohy přepisuje! Zálohování na lokální usb disk je nejjednodušší, pokud disku přiřadíme písmeno, pak stačí udělat naplánovanou úlohu, která spouští příkaz NaV\system32\wbadmin.exe start backup -backupTarget:g: -allCritical -include:c:,d:,e: -quiet Kde backuptarget:G zálohuje se na disk G allCritical zálohují se všechny disky pro BMR include specifikuje které svazky se ještě mají zálohovat. Pokud je třeba určit jako cíl zálohování místní disk který nemá písmeno , musí se požít volumeid ve tvaru \\?\Volume{38f37612-2491-11e0-b369-001517f8b250}\ Nejjednodušeji se získá ve správci disků, ve vlastnostech disku na záložce Shadow Copies Skript má seznam serverů, na které se připojuje a síťovou cestu, kam se ulkádají zálohy. Zálohy se pouští postupně na jednotlivých serverech v tom pořadí, jak jsou uvedeny. Skript vypadá takto :[+] $pwd=convertto-securestring "kkklima" -asplaintext -force $server="PKDOMAIN" $user="Administrator" $cred = new-object -typename system.management.automation.pscredential -argumentlist "$server\$user",$pwd $Servers=@('DSB','DSD','DSE','DSG','DSQ','TSA') ('DSA','DSB','DSD','DSE','DSG','DSQ','TSA') foreach($i in $Servers) { $r = New-PSSession ($i + '.praha.puroklima.cz') -cred $cred icm $r { add-pssnapin Windows.ServerBackup $policy = New-WBPolicy $backdir=("\\BSA\E") $vol = Get-WBVolume -AllVolumes #| Where {$_.Mountpath -eq "C:"} Add-WBVolume -Policy $policy -Volume $vol Add-WBBareMetalRecovery $policy $pwd=convertto-securestring "kkklima" -asplaintext -force $server="PKDOMAIN" $user="Administrator" $cred = new-object -typename system.management.automation.pscredential -argumentlist "$server\$user",$pwd $backupLocation = New-WBBackupTarget -network $backdir -Credential $cred Add-WBBackupTarget -Policy $policy -Target $backupLocation write-host "Backing up $files to $backdir" -foregroundcolor Green $policy Start-WBBackup -Policy $policy -Verbose:$false } } Monitoring a kontrola průběhu záloh V Centreonu máme check, který kontroluje stav záloh, v podstatě spustí wbadmin get versions, což vypíše všechny úspěšné zálohy a podle toho ohlásí kdy byla poslední úspěšná záloha. Skript check_backup2K8.vbs[+] strCommand = "wbadmin get versions -backuptarget:\\?\Volume{38f37612-2491-11e0-b369-001517f8b250}" Set objShell = wscript.createobject("wscript.shell") Set objExecObject = objShell.Exec(strCommand) Do Until objExecObject.Stdout.AtEndOfStream strOutput = objExecObject.Stdout.ReadLine() If Left(strOutput,12) = "Backup time:" Then strdate=Mid(strOutput,13,11) strtoparse = split(strdate) LastBackDate? = Datevalue1? end if loop daysold = DateDiff("d", LastBackDate?, Date()) Result = 3 Select case daysold case 0 Result = 0 case 1 Result = 0 Case 2 Result = 1 case 3 Result = 2 Case 4 Result = 2 Case Else Result = 2 end select Select Case Result Case 0 WScript.echo("OK: Zaloha "& LastBackDate & " uspesna") Case 1 WScript.echo("WARNING: Posledni zaloha "& LastBackDate ) Case 2 WScript.echo("ERROR: Posledni zaloha "& LastBackDate) Case 3 WScript.echo("UNKNOWN: " + objExecObject.StdErr.ReadLine) End Select WScript.Quit(Result) Ověření funkčnosti Poslední skript ověřuje funkčnost zálohování, hlavně bezchybnost stínových kopii tím, že náhodně vybere starší zálohu a zkusí obnovit jeden soubor Skript WSBtest.vbs[+] Dim WshShell?, oExec Set WshShell? = CreateObject("WScript.Shell") versioncount=0 Diskcount=0 filetorestore = "c:\windows\system32\winevt\Logs\application.evtx" wheretorestore = "c:\windows\TEMP" 'The tool is launched Set oExec = WshShell?.Exec("wbadmin get disks") 'We wait for the end of process Do While oExec.Status = 0 WScript.Sleep 100 Loop 'We scan and display the command output flow Do While oExec.StdOut.AtEndOfStream <> True strOut = oExec.StdOut.ReadLine if Left(strOut,18) = "Volumes : " then Diskcount = Diskcount + 1 strDisks = strDisks & mid(strOut,19) & vbcrlf end if Loop set oExec = nothing Set oExec = WshShell?.Exec("wbadmin get versions") 'We wait for the end of process 'Do While oExec.Status = 0 ' WScript.Sleep 100 'Loop 'We scan and display the command output flow Do While oExec.StdOut.AtEndOfStream <> True strOut = oExec.StdOut.ReadLine if strOut,"labeled"? > 5 then lblstart=instr(strOut,"labeled") + 7 if strDisks,(mid(strOut,lblstart+1,(instr(strOut,"(")-(lblstart+1?))) > 0) then strOut = oExec.StdOut.ReadLine versioncount = versioncount + 1 strVersions = strVersions & mid(strOut,21) & vbcrlf end if end if Loop If versioncount > 1 then arrVersions = Split(strVersions,vbCrLf) Randomize Set oExec = WshShell?.Exec("wbadmin start recovery -version:"& arrVersions(Intversioncount-1)*Rnd+1? & " -itemType:File -items:" & filetorestore & " -recoverytarget:" & wheretorestore & " -overwrite:Overwrite -quiet") Do While oExec.Status = 0 WScript.Sleep 100 Loop Do While oExec.StdOut.AtEndOfStream <> True strOut = oExec.StdOut.ReadLine TEXT=TEXT & strOut & vbcrlf Loop If instr(TEXT,"ERROR") = 0) and (instr(TEXT, "success") > 0? then result=0 wscript.echo "Obnova uspesna" else result= 2 wscript.echo "Obnova selhala" end if else result= 3 wscript.echo "Neni dost záloh na test" end if WScript.Quit(result)