Prosty backup maszyn wirtualnych Hyper-V z wykorzystaniem PowerShell

Jak wiadomo, ludzie w IT dzielą się na 2 grupy – Ci co robią backup i Ci co zaczną go robić. Doświadczeni obserwatorzy środowiska wyodrębniają jeszcze dwie podgrupy spośród tych co robią backup – bowiem Ci co robią backup dzielą się na tych co go sprawdzają, oraz na tych co myślą, że go mają. Tak czy inaczej – wiadomo, że backup jest podstawą do zapewnienia choćby minimalnego poziomu bezpieczeństwa dla organizacji po jakiejś bardziej lub mniej poważnej awarii. Nie będziemy tu jednak rozważać strategii backupu, tylko skupimy się na prostym rozwiązaniu – jak backupować wirtualne maszyny na Hyper-V bez udziału oprogramowania zewnętrznego (płatnego 😉 ).

Jak można się domyśleć – skorzystamy z dobrodziejstw PowerShell i modułów do obsługi Hyper-V przez PowerShell. Oczywiście zakładamy, że rola Hyper-V lub Hyper-V Server już są zainstalowane i jakieś wirtualne maszyny tam już działają. Może się jednak zdarzyć, że podczas instalacji pominięto moduły PowerShell do zarządzania Hyper-V. Aby to zrobić, wystarczy wykonać jedną z dwóch komend:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Management-PowerShell

lub:

Install-Module Hyper-V

Na serwerze, wystarczy utworzyć katalog na dysku C: o nazwie powiedzmy – scripts. Tam umieścić należy skrypt pobrany z gitlaba (tak ,tak mam już swoje repozytorium 😉 może i pojawi się wpis jak pożenic github/gitlab z VSCode 😉 ) https://gitlab.com/pberent/hyperv_backup . Zdaję sobie sprawę, że nie jest to narzędzie idealne, oraz, że są lepsze rozwiązania – szczególnie komercyjne. Jednak to nie wymaga zbyt wielkich nakładów (poza zapewnieniem jakiegoś zewnętrznego miejsca na kopie plików konfiguracyjnych i plików vhd/vhdx.

Co robi skrypt? W prostych słowach – kopiuje te pliki które pozwolą odtworzyć w całości i bezproblemowo maszyny na innym hoście Hyper-V. W podanym w parametrach wykonywania skryptu folderze – zakłada katalogi z nazwą maszyny wirtualnej, a w nich zakłada foldery ze znacznikiem czasowym określającym dzień wykonania kopii.

Więcej od autora
1 z 175

Skrypt działa na każdym systemie Windows z zainstalowanymi w/w funkcjami. Działa w całości w PowerShell, więc działa także na serwerach „Core” może być startowany na życzenie z następującymi przykładowymi parametrami:

corebackup.ps1 -Keep 8 -TargetDir \\serwer\udzial -L C:\temp -Subject 'HYPERV Backup' -Smtp 192.168.0.5 -SendTo ja@mail.com -From hyperv@domena

Wszystkie parametry opisane są w skrypcie, ale przypomnę co oznaczają i jak je używać. Warto zaznaczyć, że tylko jeden parametr jest wymagany i jest to parametr:

  • TargetDir – określa miejsce przechowywania backupów – może być to ścieżka UNC jak \\serwer\udzial, może to być też litera dysku i ścieżka do folderu np: B:\backup
  • Keep (parametr opcjonalny) – określa ile ostatnich kopii ma być przechowywanych (należy liczyć się z tym, że kolejne kopie nie są kopiami przyrostowymi, więc jeśli nie stosuje się do przechowywania tych kopii jakiegoś systemu z bardzo porządną deduplikacją miejsce może się szybko skończyć)
  • L (parametr opcjonalny) – miejsce przechowywania plików log dla skryptu
  • Subject, Smtp, SendTo, From (parametry opcjonalne) – określają czy wysłać powiadomienie mailowe o skończonej pracy skryptu, gdzie, z jakim tematem i kto ma być określony jako „nadawca”
  • NoBanner (parametr opcjonalny) – nie wyświetla wspaniałego logo widocznego na oczątku tego wpisu 😉 zalecany gdy chcemy dodać skrypt do Task Schedulera / Harmonogramu Zadań

Wywołanie skryptu przez Task Scheduler / Harmonogram zadań to już formalność. Wystarczy utworzyć nowe zadanie startujące o wyznaczonej godzinie i jako akcję ustawić „Start a program” / „Uruchom Program” gdzie startujemy powershell.exe i jako paramtery podajemy parametry skryptu poprzedzone chwilowym wyłączenie sprawdzania wykonywania skryptów ;). Skrypt oczywiście należy wykonywać z poziomu użytkownika domenowego lub lokalnego, który ma dostęp do katalogu docelowego określonego przez parametr TargetDir.-ExecutionPolicy Bypass c:\scripts\corebackup.ps1 -Nobanner -Keep 8 -TargetDir \\serwer\udzial -L C:\temp -Subject 'HYPERV Backup’ -Smtp 192.168.0.5 -SendTo ja@mail.com -From hyperv@domena

Skrypt ma także funkcję radzenia sobie z klastrami i auto-balancerem zasobów (wyłącza go na czas trwania), ale domyślnie jest to zakomentowane w skrypcie, gdyż jeszcze pracuje nad sposobem synchronizacji backupów pomiędzy nodami klastra. Problem stanowią takie maszyny, które hyper-v postanowi przenieść podczas backupu, dlatego skrypt włącza tą funkcję, niestety – skrypt musi startować na każdym nodzie klastra osobno, co powoduje problemy w momencie gdy jeden skrypt skończy szybciej niż inny. W chwili obecnej można to traktować jako opcję eksperymentalną, nad którą pracuję i pewnie niebawem coś wymyślę 😉

Oczywiście nie jest to rozwiązanie pozbawione wad i zdaję sobie z tego sprawę – jednak zawsze warto mieć jakiś mechanizm backupu. Nawet taki najprostszy może uratować odrobinę stresu gdy świat się zawali.

Źródło: speceit
Komentarz