Artykuły

A A A
Drukuj Ekportuj do PDF
Opublikowane: 2007.05.26 15:20 | Marek Kulczyk | Aktualizacja: 2011.10.07 12:13

Kopia zapasowa wybranych komputerów (stacji roboczych) domeny przy użyciu narzędzia Robocopy.

Zabezpieczanie danych w przedsiębiorstwie, które nie posiada profesjonalnych systemów kopii zapasowych jest zadaniem bardzo trudnym i wymagającym dużego nakładu pracy "traconego" przez osoby odpowiedzialne za wykonanie tego zadania. W celu ułatwienia wykonywania tego zadania polecam użycie skryptów powłoki i narzędzia Microsoft Robocopy. Oczywiście wykonywanie w ten sposób kopii wszystkich komputerów w przedsiębiorstwie wiązałoby się z pewnymi nakładami finansowymi, których zwykle małe przedsięb

Kopia zapasowa wybranych komputerów (stacji roboczych) domeny przy użyciu narzędzia Robocopy.

Wstęp

Zabezpieczanie danych w przedsiębiorstwie, które nie posiada profesjonalnych systemów kopii zapasowych jest zadaniem bardzo trudnym i wymagającym dużego nakładu pracy "traconego" przez osoby odpowiedzialne za wykonanie tego zadania. W celu ułatwienia wykonywania tego zadania polecam użycie skryptów powłoki i narzędzia Microsoft Robocopy. Oczywiście wykonywanie w ten sposób kopii wszystkich komputerów w przedsiębiorstwie wiązałoby się z pewnymi nakładami finansowymi, których zwykle małe przedsiębiorstwa unikają, jednak jeśli organizacja posiada pewne niewykorzystane zasoby, można znacznie ułatwić zadanie wykonywania kopii zapasowej. W artykule opisano jeden z wielu możliwych sposobów rozwiązania problemu kopii zapasowej w małym przedsiębiorstwie.

Założenia projektu

  • główne serwery przedsiębiorstwa posiadają system kopii zapasowych,
  • większość ważnych danych znajduje się na serwerach plików, które regularnie wykonują kopię zapasową na nośnikach wymiennych,
  • serwery przedsiębiorstwa posiadają: wystarczającą ilość wolnej przestrzeni dyskowej oraz wystarczająco pojemne urządzenia pamięci masowej do pomieszczenia dodatkowych danych,
  • kluczowe stacje robocze są podłączone do domeny (łatwiejsze zarządzanie) oraz wspierają technologię Wake-On-Lan (zdalne uruchamianie komputerów o określonej godzinie w celu wykonania kopii zapasowej).

Plan działania

  1. wybranie serwera, który będzie pełnił rolę systemu do wykonywania kopii zapasowej (w moim przypadku Windows 2003 Server z narzędziem NTBACKUP i skonfigurowaną usługą zaplanowanych zadań)
  2. wybranie stacji roboczych, które powinny mieć wykonywaną kopię zapasową danych, zebranie informacji o lokalizacji cennych danych (najlepiej ustalić politykę odnoszącą się do umiejscowienia ważnych danych i na każdym komputerze tak skonfigurować aplikacje by korzystały danych zawartych w odpowiednich folderach)
  3. przygotowanie stacji roboczych do wspierania technologii Wake-On-Lan (większość aktualnie produkowanego sprzętu komputerowego wspiera tą technologię, w razie problemów należy sprawdzić czy sprzęt obsługuje WOL),
  4. przygotowanie skryptów wykonujących kopię zapasową,
  5. skonfigurowanie zaplanowanego zadania kopii zapasowej.

Konfiguracja BIOSU stacji roboczej obsługującej WOL

Aby możliwe było korzystanie z funkcjonalności WOL należy uaktywnić odpowiednie opcje w BIOSIE. Poniżej przykładowe ustawienia dla stacji roboczych różnych producentów

Dell OptiFlex 210L

Należy uaktywnić następujące opcje:
"On Bard devices" / "Integrated NIC" / "On w/PXE"
"Power Management" / "Remote Wake Up" / "ON"

Intel D865GLC

Należy uaktywnić następujące opcje:
"Power" / "Wake On PCI PME"
"Power" / "ACPI" / "Wake on LAN From S5"

Maxdata (ASUS P4S800-MX)

Należy uaktywnić następujące opcje:
"Power" / "APM Configurator" / "Power On By Internal MAC LAN"

Darmowe narzędzie "Wake On Lan Command Line"

Narzędzie należy pobrać ze strony producenta i skopiować na serwer http://www.depicus.com/wake-on-lan/wake-on-lan-cmd.aspx
Po skopiowaniu narządzie można przetestować jego działanie, przykład użycia:
wolcmd [mac address] [ipaddress] [subnet mask] [port number]
wolcmd xxxxxxxxxxxx 255.255.255.0 255.255.255.0 7
Na stronie http://www.depicus.com dostępne jest też narzędzie z GUI.

Konfiguracja zasad grupy w domenie

Aby możliwe było wykorzystanie zaproponowanego rozwiązania należy skonfigurować stacje robocze w domenie tak, aby serwer odpowiedzialny za wykonanie kopii zapasowych miał dostęp do odpowiednich zasobów stacji roboczych (udostępnione foldery lub dyski stacji roboczych).

Konfiguracja zapory sieciowej dla wybranego OU

W zasadach grupy należy utworzyć nową zasadę dotyczącą udostępniania plików i drukarek dla OU (jednostki organizacyjnej), w której znajdują się stacje robocze, dla których będzie wykonywana kopia zapasowa.

Rysunek 1 Nowa zasada grupy - udostępnianie plików

Rysunek 1 Nowa zasada grupy - udostępnianie plików

Następnie należy zdefiniować w tej zasadzie wyjątek zapory sieciowej, który będzie definiował dostęp poprzez udostępnione foldery tylko dla wybranych komputerów (serwerów wykonujących kopię zapasową). Wykonuje się to w opcji: "Konfiguracja komputera" / "Szablony administracyjne" / "Sieć" / "Połączenia sieciowe" / "Zapora systemu windows" / "Profil domenowy" / "Zapora systemu Windows Zezwalaj na wyjątek udostępniania plików i drukarek". Należy przypisać adresy IP komputerów, które mają mieć dostęp do udostępnionych folderów na komputerach w wybranym OU.

Rysunek 2 Udostępnione pliki dla komputerów o określonych adresach IP

Rysunek 2 Udostępnione pliki dla komputerów o określonych adresach IP

W związku z tym, że często w małych przedsiębiorstwach nie ma potrzeby udostępniania zasobów stacji roboczych dla innych użytkowników, polecam udostępnianie danych komputerów tylko dla wybranych stacji roboczych lub serwerów.

Przygotowanie folderów na kopię zapasową

Na serwerze, na którym będą przechowywane dane kopii zapasowej (i który będzie kopiował te dane na nośniki wymienne) należy utworzyć folder, który będzie zawierał podfoldery dla każdej kopiowanej stacji roboczej. Należy założyć tylko folder główny. Skrypt wykonujący kopię zapasową będzie sam automatycznie zakładał katalogi dla kopiowanych stacji roboczych. Przykładowo:

O:\Kopie_Zapasowe

  • Oper-167
    • Partycja Rozruchowa (profile)
    • Partycja z danymi (data)
  • Oper-100
    • Partycja Rozruchowa (profile)
    • Partycja z danymi (data)

Instalacja Robocopy

Robocopy można pobrać ze strony:
http://www.microsoft.com/technet/technetmag/issues/2006/11/UtilitySpotlight/
lub:
http://www.microsoft.com/downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&displaylang=en
jako część pakietu Windows Server 2003 Resource Kit Tools.
Instalacja narzędzia (narzędzi) nie sprawia problemów, kolejne ekrany kreatora opisują dokładnie proces instalacyjny. Nie ma potrzeby konfiguracji narzędzia robocopy. Konfiguracja odbywa się poprzez odpowiednie podanie parametrów przy uruchamianiu narzędzia. Na potrzeby opisywanego problemu wykonywania kopii zapasowej, narzędzie robocopy będzie używane jako część skryptu PowerShell (PS). Przykładowe polecenie uruchamiające narzędzie to:
robocopy "katalog_źródłowy" "miejsce_przeznaczania" /MIR /R:3 /W:5 /XD "folder wyłączony z kopiowania" /LOG:Log_kopiowania_danych

Skrypty i zaplanowane zadania

Komputery w przedsiębiorstwie wyłączając komputery używane przy produkcji (nie potrzebna kopia zapasowa) są każdej nocy wyłączane. Kopia zapasowa tych komputerów będzie wykonywana w czasie weekendów (nie ma potrzeby wykonywania kopii codziennie). Robocopy umożliwia wykonanie kopii różnicowej, dzięki czemu wykonanie następnych kopii będzie trwało krócej. Po wykonaniu kopii komputerów należy wykonać kopię zapasową danych na nośniku wymiennym. Schemat działania skryptu:

Rysunek 3 Schemat działania skryptu wykonującego kopię zapasową.

Rysunek 3 Schemat działania skryptu wykonującego kopię zapasową.

Skrypt PS

Poniżej zamieściłem skrypt PS, którym wykonuje zadanie kopii zapasowej. Skrypt ten jest uruchamiany prze plik robocopy.cmd, który został zaplanowany do uruchamiania poprzez "Zaplanowane Zadania" na serwerze odpowiedzialnym za kopię zapasową.
Pliki logów tworzone przez narzędzie robocopy są zapisywane w folderze c:\backup\log\ (uwaga folder do przechowywania plików log należy utworzyć przed uruchomieniem skryptu).

Skrypt PS (wykonywanie kopii zapasowej jednej stacji roboczej)

#Stałe skryptu
$rcInf='Information'
$rcWrn='Warning'
$rcErr='Error'

#Pobierz argumenty

$cmpName = $Args[0]
$cmpMAC = $Args[1]
$cmpProfilePartition = $Args[2]
$cmpDataPartition = $Args[3]
$cmpUser = $Args[4]
$cmpExcludeDir = $Args[5]

#Test Parametrów
if ( ($cmpName -eq $() ) -or ($cmpMAC -eq $()) -or ($cmpProfilePartition -eq $() ) -or ($cmpDataPartition -eq $())-or ($cmpUser -eq $()))
{
Write-Host "Nie podano wszystkich parametrów. Użycie skryptu:"
Write-Host "robocopy.ps1 cmpName cmpMac cmpProfilePartition cmpDataPartition cmpUser cmpExcludeDir"
} else {

#Wykonanie skryptu

#Przygotowanie dostępu do dziennika zdarzen systemu, błędy będą zapisywane w dzienniku PS_BackupComputers
if(![System.Diagnostics.EventLog]::SourceExists('PS_BackupComputers'))
{
[System.Diagnostics.EventLog]::CreateEventSource('PS_BackupComputers','PS_BackupComputers')
}
if(![System.Diagnostics.EventLog]::SourceExists($cmpName))
{
[System.Diagnostics.EventLog]::CreateEventSource($cmpName,'PS_BackupComputers')
}

$rcLog = New-Object System.Diagnostics.EventLog
$rcLog.set_log('PS_BackupComputers')
$rcLog.set_source($cmpName)
$rcLog.WriteEntry('Uruchamianie kopii stacji roboczej:'+$cmpName,$rcInf,0)

#Dane komputera

$cmpPartProfile = '\\'+$cmpName+'\'+$cmpProfilePartition+'$\Documents and Settings\'+$cmpUser
$cmpPartData = '\\'+$cmpName+'\'+$cmpDataPartition+'$'

#Sprawdzenie czy komputer jest uruchomiony
$testhost = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$cmpName'"
$statushost = $testhost.StatusCode

if ( $statushost -eq 0 ) {
#Jeśli działa wymuszenie restartu - upewnienie się, że wszytskie otwarte pliki zostaną zamknięte

$comp = gwmi win32_operatingsystem -computer $cmpName
$rst = $comp.Win32Shutdown(6)

#oczekiwanie na wyłączenie komputera
$cnt = 0
while (1)
{
$testhost = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$cmpName'"
$statushost = $testhost.StatusCode

if ($statushost -ne 0)
{
break;
}
$cnt = $cnt + 1
Write-Host Czekam-na-wyłaczenie-komputera - próba: $cnt
Start-Sleep –s 10

#Jesli komputer nie wylaczy sie w ciagu 5 minut przerywa wykonanie skryptu
if ( $cnt -gt 30 ) {
#Zapis informacji o błedzie do logu
$rcLog.WriteEntry('Komputer nie wyłączył się w przewidywanym czasie, kopia zapasowa nie została wykonana',$rcERR,1001)
exit
}
}
} else {
#urochomienie komputera WOL
c:\backup\wolcmd.exe $cmpMAC 255.255.255.0 255.255.255.0 7
}

#uruchomienie komputera
$cnt = 0
while (1)
{
$testhost = Get-WmiObject -Class Win32_PingStatus -Filter "Address='$cmpName'"
$statushost = $testhost.StatusCode

if ($statushost -eq 0)
{
break
}
Start-Sleep –s 10
$cnt = $cnt + 1

Write-Host Czekam-na-właczenie-komputera - próba: $cnt

#Jesli komputer nie wlaczy sie w ciagu 5 minut przerywa wykonanie skryptu
if ( $cnt -gt 30 ) {
#Zapis informacji o błedzie do logu
$rcLog.WriteEntry('Komputer nie włączył się w przewidywanym czasie, kopia zapasowa nie została wykonana',$rcERR,1002)
exit
}
}

Write-Host Komputer-wlaczony

#utworzenie katalogów jesli nie byly utworzone wczesniej
$tstdir="o:\kopie_zapasowe\"+$cmpName
$dirinfo = new-object System.Io.DirectoryInfo $tstdir
if (! $dirinfo.exists ) { $dirinfo.create() }

$tstdir="o:\kopie_zapasowe\"+$cmpName+"\profile"
$dirinfo = new-object System.Io.DirectoryInfo $tstdir
if (! $dirinfo.exists ) { $dirinfo.create() }

$tstdir="o:\kopie_zapasowe\"+$cmpName+"\data"
$dirinfo = new-object System.Io.DirectoryInfo $tstdir
if (! $dirinfo.exists ) { $dirinfo.create() }

#wykonanie synchronizacji plików przy użyciu robocopy

$sync1 = '"\\'+$cmpName+'\'+$cmpProfilePartition+'$\Documents and Settings\'+$cmpUser+'" "O:\Kopie_zapasowe\'+$cmpName+'\profile" /MIR /R:3 /W:5 /XA:ST /XD "System Volume Information" "Temporary Internet Files" "RECYCLER" "TEMP" /LOG:C:\backup\log\'+$cmpName+'_1.txt'
robocopy.exe $sync1

if ($cmpExcludeDir -eq $() )
{
$sync2 = '"\\'+$cmpName+'\'+$cmpDataPartition+'$" "O:\Kopie_zapasowe\'+$cmpName+'\data" /MIR /R:3 /W:5 /XA:ST /XD "System Volume Information" "RECYCLER" "TEMP" /LOG:C:\backup\log\'+$cmpName+'_2.txt'
} else
{
$sync2 = '"\\'+$cmpName+'\'+$cmpDataPartition+'$" "O:\Kopie_zapasowe\'+$cmpName+'\data" /MIR /R:3 /W:5 /XA:ST /XD "System Volume Information" "RECYCLER" "TEMP" "'+$cmpExcludeDir+'" /LOG:C:\backup\log\'+$cmpName+'_2.txt'
}

robocopy.exe $sync2

#Zapis informacji do logu
$rcLog.WriteEntry('Kopia została wykonana. Dokładne informacje znajdują się w plikach C:\backup\Log\'+$cmpName+'_1.txt i c:\backup\log\'+$cmpName+'_2.txt',$rcInf,0)

#Wyłączenie komputera
$comp = gwmi win32_operatingsystem -computer $cmpName
$rst = $comp.Win32Shutdown(5)
}

Skrypt CMD do zaplanowanych zadań - kopia wybranych stacji roboczych

powershell.exe c:\backup\robocopy.ps1 OPER-167 xx-xx-xx-xx-xx-xx C E testuser
powershell.exe c:\backup\robocopy.ps1 OPER-100 xx-xx-xx-xx-xx-xx C D testuser2

Podsumowanie

Artykuł przedstawia jedną z wielu możliwości wykonania kopii wybranych komputerów w przedsiębiorstwie. Przy wykorzystaniu narzędzi Robocopy i PowerShell można wykonać dużo bardziej zaawansowane zadania, jednak ze względu na brak czasu w artykule przestawiłem tylko przykład możliwości wyżej wymienionych narzędzi. W przyszłości zamierzam poprawić skrypt tak by wymagał tylko podania nazwy komputera a cała reszta operacji zostanie wykonana automatycznie.
Jeśli mają Państwo pytania lub uwagi proszę o maila lub komentarz do artykułu.

Autor: Marek Kulczyk
email: marekk79@vp.pl
użytkownik: kulczykm

Spis Treści
Wstęp
Założenia projektu
Plan działania
Konfiguracja BIOSU stacji roboczej obsługującej WOL
-Dell OptiFlex 210L
-Intel D865GLC
-Maxdata (ASUS P4S800-MX)
Darmowe narzędzie "Wake On Lan Command Line"
Konfiguracja zasad grupy w domenie
-Konfiguracja zapory sieciowej dla wybranego OU
-Przygotowanie folderów na kopię zapasową
Instalacja Robocopy
Skrypty i zaplanowane zadania
-Skrypt PS (wykonywanie kopii zapasowej jednej stacji roboczej)
-Skrypt CMD do zaplanowanych zadań - kopia wybranych stacji roboczych
Podsumowanie
PS. Podziękowania dla AaaA za uwagi podczas przygotowywania artykułu.


Komentarze 15 Masz uwagi do tej strony? Napisz

voytass 2007.06.11 23:45
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
w artykule pojawia sie nazwa modelu 'OptiFlex' komputera Dell - jest to błąd ponieważ poprawna nazwa to 'OptiPlex'.

________________________________________________
1841 | PIX 525 | FS PRIMERGY RX600 S2 | gx620
Komputer przewyższy człowieka, kiedy sam ułoży dowcip!

Wojtek @ WGUiSWhttp://voytas.net

KulczykM 2007.06.12 7:54
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
masz racje ;)
mala literówka przepraszam

KulczykM
KulczykM
noise 2007.06.12 9:43
0 oceń pozytywnie   oceń negatywnie 0
avatar VIP
 
kawal dobrej roboty. Dzieki za lakture :)

--
Robert Stuczynski (Noise) - MVP
Blog - http://noiserobert.spaces.live.com
http://www.8080.pl

Robert Stuczynski (Noise) - Microsoft MVP

PiotrLabaziewicz 2007.06.12 15:39
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
Bardzo ciekawy tekst... :) Pozdrowionka
swilczew 2007.06.12 18:47
0 oceń pozytywnie   oceń negatywnie 0
avatar VIP
 
KulczykM 2007.06.13 8:13
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
dwie przyczyny ;) po pierwsze nie chciało mi się ;)
a po drugie nie było kiedy ;)


KulczykM
KulczykM
przemik 2007.06.13 10:23
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
Bardzo przydatny tekst.
Interesuje mnie czy mozna by wykorzystac ten skrytp do bezposredniego backupu PC - czyli podchodze do stacji - wrzucam skryop i .. poszło .. efekt : backup wybranej stacji roboczej.

pozdr

Przemek
____
MCP

Przemek 

MCP

KulczykM 2007.06.13 10:56
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
w tym momencie nie potrzebujesz takiego dużego skryptu (większa część skryptu zajmuje się tworzeniem logów, tworzeniem katalogów i uruchamianiem i wyłączeniem kompa).

jeśli chcesz robić backup ręcznie to wystarczy, że zainstalujesz na stacji i wywołasz z odpowiednimi parametrami robocopy (możesz sobie napisać krótkiego batcha, który uruchomi to narzędzie).
w tym przypadku możesz też się zainteresować narzędziem synctoy ;) ma interfejs graficzny i pokazuje ładnie co się dzieje (po instalacji musiałbyś tylko skonfigurować ale temat jest prosty).
SyncToy też robi kopię przyrostową.

pozdrawiam


KulczykM
KulczykM
AaaA 2007.06.15 19:45
0 oceń pozytywnie   oceń negatywnie 0
avatar Redaktor
 
Jest też przygotowana wersja artykułu właśnie dla synctoy. Uzgodnimy czy umieścić go tu czy zrobić z tego osobny artykuł.

Karol Stilger MCP
http://aaaa.4.pl/

Karol Stilger Microsoft MVP

Redakcja Portalu WSS.pl

wss_marecki 2007.06.20 15:44
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
i jedno wazne, nie zawsze wolcmd podniesie kompa. warto o tym pamietac :)


Pozdrawiam,
Marek Lubiński
Pozdrawiam,
Marek Lubiński

Jeżeli moja odpowiedź pomogła w rozwiązaniu Twojego problemu, kliknij [Pomógł mi]
KulczykM 2007.06.20 21:10
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
;)
masz racje moze byc np. nie włączony prąd ;)

a tak serio dlatego, że nie można być tego pewnym oskryptowałem to i dorzuciłem odpowiednie logi do dziennika systemowego. skrypt chodzi u mnie juz jakis czas, i musze przyznac ze podoba mi sie ;)
np w poniedzialek loguje sie do firmy, patrze w logach a jeden z kompow nie wlaczyl sie w oczekiwanym czasie
dzwonie do panienki a tu sie okazalo, ze wziela kompa do domu na weekend.

pozdrawiam



KulczykM
KulczykM
KidLoco 2007.06.22 16:36
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
Bardzo przydatny artykuł!
Dziękuję i pozdrawiam.

Witold Kondracki
http://www.wi-tech.pl

Witold Kondracki http://www.wi-tech.pl

uzytkownik usuniety 2007.07.11 8:19
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
No jak miło, a swego czasu pytałem o podobne rozwiazanie n a forum 8) . Dobry tekst, Pozdrawiam.

Gg: 1621238
Świętochłowice, Śląsk
marcin.szary 2007.09.04 14:53
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
Fajny i przydatny artykuł i pewnie kiedyś skorzystam z informacji które są w nim zawarte.
Zastanawia mnie czy nie łatwiej ustawić użytkownikom aby dane które generują były zapisywane do moich dokumentów czy podfolderu tego folderu i za pomocą Polis Grupowych ustawić przekierwoanie Moich Dokumentów na serwer.

Pozdrawiam
Pozdrawiam Marcin Szary MCP
maly-78 2007.12.28 22:54
0 oceń pozytywnie   oceń negatywnie 0
avatar
 
bardzo przydatny tekst, konkretnie i co wazne dziala :)

pozdrawiam
maly-78

Dodaj komentarz

avatar

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Autor Marek Kulczyk
avatar
 

Załóż konto
WSS to serwis, który łączy dziesiątki tysięcy specjalistów IT w Polsce, zajmujących się szeroko pojętymi technologiami Microsoft. Portal działa od 2003 roku, i oprócz setek publikacji technicznych, rozwijającego się forum - portal to ludzie, którzy go tworzą. To właśnie z myślą o nich warto codziennie nas odwiedzać.

Dowiedz się więcej o WSS