W jednym z ostatnich wpisów poruszałem kwestię wirtualizacji, której zrozumienie możemy potraktować jako teoretyczny wstęp do dzisiejszego artykułu. Zrozumienie idei i koncepcji stojących za wirtualizacją jest bowiem najważniejsze dla zrozumienia działania Hyper-V. W tym wpisie przejdziemy przez Hyper-V dokładnie omawiając wszystkie niezbędne elementy, które pozwolą stworzyć maszynę wirtualną dopasowaną do naszych potrzeb. Zapraszam!
Spis Treści
- Co to jest Hyper-V?
- Jak włączyć Hyper-V korzystając z Windows Server?
- Włączenie Hyper-V na klienckiej wersji Windows
- Łączenie z serwerem
- Tworzenie wirtualnego switch-a w Hyper-V
- Tworzenie wirtualnego dysku w Hyper-V
- Tworzenie maszyny wirtualnej w Hyper-V
- Dodatkowe opcje zarządzania maszyną wirtualną
- Pozostałe funkcje Hyper-V
- Checkpointy
Co to jest Hyper-V?
Nie możemy przejść do kwestii technicznych krótkiego wyjaśnienia czym w ogóle jest Hyper-V. Hyper-V jest tzw. hypervisorem czyli takim typem oprogramowania, które pozwala nam na zarządzanie procesami wirtualizacji. Mówiąc inaczej, dzięki Hyper-V możemy tworzyć oraz zarządzać maszynami wirtualnymi, o których również wspominałem w wpisie poświęconym wirtualizacji. Maszyny te mogą posłużyć nam nie tylko do celów „produkcyjnych”, aby zmaksymalizować wykorzystanie posiadanej infrastruktury. Możemy wykorzystać je również do tworzenia wirtualnych środowisk testowych, w celu testowania planowanych zmian czy nauki na symulujących realną infrastrukturę środowiskach. Maszyny wirtualne znajdują też swoje zastosowanie w bezpieczeństwie. Możemy potraktować je jako bezpieczny Sandbox, na którym możemy wykonywać niosące za sobą ryzyko testy czy operacje.
Hyper-V nie jest naturalnie jedynym hypervisorem dostępnym na rynku. Wśród innych popularnych rozwiązań należałoby wymienić przede wszystkim rozwiązania firmy VMWare czy np. Virtualbox. Hypervisory możemy podzielić na dwie grupy, w zależności od wykorzystywanego typu wirtualizacji:
- Wirtualizacja typu 1, z której korzysta min. Hyper-V. W tym typie hypervisor pracuje bezpośrednio na sprzęcie fizycznym (hardware-rze) przydzielając odpowiednie zasoby maszynom wirtualnym
- Wirtualizacja typu 2, z której korzysta np. Virtualbox. W tym typie hypervisor jest „zwykłą” aplikacją, która pracuje wewnątrz systemu operacyjnego hosta. Przydziela on zasoby maszynom wirtualnym poprzez system operacyjny.
O ile Hypervisor korzystający z wirtualizacji typu 2 sprawdzi się w przypadku stawiania prostych środowisk testowych na potrzeby własne/edukacyjne, nie zawsze będzie to idealne rozwiązanie. Dla zastosowania komercyjnego istotna jest przede wszystkim wydajność, którą na zdecydowanie wyższym poziomie zapewniają hypervisory korzystające z wirtualizacji typu 1. Z tego też względu Hyper-V czy VMWare vSphere są najpopularniejszymi rozwiązaniami przy zastosowaniach komercyjnych.
Hyper-V, jako narzędzie od Microsoftu, jest wbudowane w jego systemy operacyjne. Znajdziemy go nie tylko w systemach serwerowych (np. Windows Server 2019 czy 2022), ale także w systemach klienckich (np. Windows 10 czy Windows 11). Co jednak istotne, narzędzie to nie jest dostępne dla użytkowników korzystających z Windows w wersji Home. Niezbędne jest posiadanie Windows w wersji Pro, Enterprise lub Education (która dla studentów kierunków technicznych dostępna jest za darmo).
W kontekście wymagań warto jeszcze wspomnieć o dwóch istotnych kwestiach – nasz procesor musi obsługiwać wirtualizację, a urządzenie fizyczne musi posiadać min. 4 GB RAM. W praktyce jednak warto mieć RAM-u zdecydowanie więcej, szczególnie o ile myślimy o środowiskach złożonych z więcej niż jeden maszyny uruchomionej w tym samym momencie.
Jak włączyć Hyper-V korzystając w Windows Server?
Zarówno w przypadku systemu Windows w wersji serwerowej, jak i Klienckiej, Hyper-V nie jest dostępny zaraz po zainstalowaniu. Niezbędne jest wcześniejsze włączenie tej funkcjonalności, co nie jest szczególnie skomplikowanym procesem. W przypadku Windows Server Hyper-V możemy zainstalować jako rolę serwera, którym zarządzamy. W tym celu w Server Managerze klikamy w Add Roles and Features w jednym z zaznaczonych miejsc:
Następnie wskazujemy typ instalacji:
oraz serwer, dla którego ma zostać doinstalowana rola:
Następnie odnajdujemy i zaznaczamy rolę Hyper-V:
I dodajemy ją do serwera nie zmieniając pozostałych opcji.
Jeżeli chcielibyście dodać rolę Hyper-V w środowisku testowym, korzystając z Windows Serwera na maszynie wirtualnej, również możecie to zrobić. Niezbędne będzie jednak włączenie zagnieżdżonej wirtualizacji na Waszym urządzeniu. Szczegóły znajdziecie tutaj.
Włączenie Hyper-V na klienckiej wersji Windows
Zobaczmy teraz jak włączyć Hyper-V na wersji klienckiej, na przykładzie Windows 11. W pierwszej kolejności musimy upewnić się, czy nasz procesor obsługuje oraz ma włączoną wirtualizację. o ile chodzi o jej obsługiwanie – nie powinno być z tym większych problemów. Niemalże wszystkie procesory znanych firm, wypuszczone w ostatnich latach taką wirtualizację obsługują. Pozostaje nam więc zadbać o jej włączenie, co możemy zrobić poprzez BIOS/UEFI. Samo włączenie może wyglądać bardzo różnie, w zależności od posiadanego sprzętu. Przykładowo dla procesora Intela oraz BIOS-u może to wyglądać następująco:
Po odnalezieniu odpowiedniej opcji i włączeniu wirtualizacji czas włączyć Hyper-V w Windows. W tym celu odnajdujemy opcję Turn Windows features on or off:
A następnie odnajdujemy i zaznaczamy Hyper-V:
Pozostałą część system wykona za nas automatycznie. Po restarcie urządzenia powinniśmy mieć możliwość wyszukania i uruchomienia Hyper-V jak każdej innej aplikacji:
Łączenie z serwerem
W pierwszej kolejności po uruchomieniu Hyper-V będziemy musieli określić urządzenie, na którym będziemy utrzymywali maszyny wirtualne. W przypadku środowisk testowych czy innych wykorzystywanych na własny użytek urządzeniem takim będzie najprawdopodobniej nasz komputer, na którym uruchamiamy Hyper-V. Hyper-V daje nam również możliwość zarządzania maszynami znajdującymi się na innym komputerze czy serwerze w naszej sieci. Dzięki temu z poziomu naszego komputera możemy zarządzać wieloma urządzeniami, na których znajdują się maszyny wirtualne.
Aby wskazać urządzenie/serwer, na którym chcemy zarządzać maszynami wirtualnymi, musimy odnaleźć widoczną po prawej stronie opcję Connect to server:
A następnie wskazać interesujące nas urządzenie/serwer. W moim przypadku będzie to po prostu komputer, na którym mam zainstalowane Hyper-V:
Dodane urządzenie/serwer będzie widoczne w panelu po lewej stronie, a po kliknięciu na nie zobaczymy znajdujące się na nim maszyny wirtualne:
Tworzenie wirtualnego switch-a w Hyper-V
Aby dobrze omówić najistotniejsze możliwości Hyper-V przejdźmy przez całą drogę tworzenia maszyny wirtualnej. Choć wiele elementów można pominąć czy uprościć poprzez sam kreator tworzenia maszyny, omówmy dokładnie każdy z możliwych do stworzenia elementów.
Jednym ze składowych elementów maszyny jest wirtualny switch, który będzie odpowiadał za jej komunikację sieciową. Możliwość zarządzania wirtualnymi switchami możemy odnaleźć w panelu akcji po prawej stronie:
Samo tworzenie wirtualnego switcha jest niezwykle proste. W kreatorze, w pierwszej kolejności wybieramy typ tworzonego switcha, który wybieramy spośród 3 możliwości:
- External (Zewnętrzny) – pozwala maszynie wirtualnej na łączenie się z innymi maszynami, Hostem (urządzeniem fizycznym, na którym znajduje się maszyna) oraz interentem.
- Internal (Wewnętrzny) – pozwala maszynie wirtualnej na łączenie się z innymi maszynami na danym urządzeniu oraz z Hostem
- Private (Prywatny) – pozwala maszynie na łączenie się wyłącznie z innymi maszynami wirtualnymi
Po utworzeniu wirtualny switch będzie widoczny na liście po lewej stronie. Znajdziemy tam również domyślnie tworzony przez Hyper-V switch sieciowy, któremu najbliżej do przełącznika External. Pozwala on na komunikację z internetem czy siecią Hosta poprzez usługę NAT.
Po prawej stronie możemy zmienić nazwę switcha, a także jego typ. Oprócz tego mamy możliwość włączenia VLAN ID, o ile chcemy, aby wirtualny switch wykorzystywał dany VLAN do komunikacji sieciowej.
Oprócz tego wirtualne switche, tak jak i np. fizyczne karty sieciowe, będą miały przypisany adres MAC (fizyczny, unikalny adres przypisywany przed producentów do wszystkich urządzeń sieciowych). Klikając w Mac Address Range możemy zdefiniować zakres adresów MAC, które mogą być przydzielane do poszczególnych switchy.
Tworzenie wirtualnego dysku w Hyper-V
Po stworzeniu wirtualnego switcha czas stworzyć kolejny „element składowy” maszyny wirtualnej – wirtualny dysk twardy. W tym celu w panelu akcji po lewej stronie przechodzimy do New -> Hard Disk …
W otwartym kreatorze w pierwszej kolejności musimy wskazać format tworzonego dysku. Hyper-V oferuje nam 3 możliwe do wyboru formaty dysków:
- VHD – czyli „stary” format, który obsługuje wirtualne dyski do wielkości max. 2 TB (a dokładnie 2 040 GB). Jest on raczej przeznaczony do maszyn 1 generacji, o czym więcej w dalszej części artykułu, czy starszych systemów operacyjnych. o ile nie mam konkretnych ograniczeń czy specyficznych scenariuszy – pewnie nie będziemy korzystali z tego formatu
- VHDX – nowszy, domyślnie wybierany format obsługujący wirtualne dyski o pojemności do 64 TB. Nowszy format w tym przypadku oznacza również większą wydajność, co w przypadku dysków, często bywających wąskim gardłem maszyn, jest szczególnie istotne. Format ten nie wspiera systemów operacyjnych starszych niż Windows 8.
- VHD Set – format, który rzadko wykorzystywany jest w prywatnym czy testowym zastosowaniu. Jest dedykowany dla scenariuszy, w których wiele maszyn wirtualnych korzysta z tego samego wirtualnego dysku.
Po wyborze odpowiedniego formatu musimy wybrać typ tworzonego dysku. Tutaj również do wyboru mamy trzy typy:
- Fixed size (o stałym rozmiarze) – ten typ dysku alokuje określoną liczbę pamięci na dysku fizycznym. o ile więc chcemy, aby nasza maszyna wirtualna miała np. dysk wielkości 100 GB, na naszym dysku pojawi się „plik” z rozszerzeniem np. vhdx o rozmiarze 100 GB. Ten typ dysku jest zupełnie nieefektywny pod kątem oszczędności miejsca – blokuje je na dysku fizycznym, mimo iż przestrzeń ta jest de facto pusta. Znajduje on jednak swoje zastosowanie w przypadku aplikacji (działających na maszynach wirtualnych) generujących dużo operacji zapisu/odczytu znajdujących się na dysku danych.
- Dynamically expanding (dynamicznie powiększający się) – ten dysk działa niejako odwrotnie do dysku o stałym rozmiarze. Domyślnie, w przypadku formatu vhdx zajmuje on na dysku niewielką ilość przestrzeni i powiększa się wraz z zapisywanymi na nim przez maszynę wirtualną informacjami. o ile więc maszyna wirtualna zapisze np. 20GB danych, to dysk dynamicznie powiększający się zajmie około 20 GB na dysku fizycznym. Określając rozmiar dysku tego typu określamy de facto maksymalny rozmiar, do którego może on urosnąć. Dyski dynamicznie powiększające się są efektywne pod względem wykorzystania miejsca na dysku fizycznym. Posiadając np. dysk fizyczny o wielkości 1 TB możemy stworzyć na nim np. 10 dysków o wielkości 1 TB. Dopóki faktyczna ilość danych nie przekroczy pojemności dysku fizycznego, nie ma w tym zakresie ograniczeń. Ten typ dysku, ponownie odwrotnie do poprzednika, jest dedykowany do aplikacji nie korzystających z dysku zbyt intensywnie.
- Differencing (różnicowy) – Dostępny tylko dla formatów vhd oraz vhdx. Jest to bardzo specyficzny format dysku, który nie jest w stanie działać samodzielnie. Do działania wymaga tzw. dysku-rodzica/dysku-matki, dlatego też nie posiadając wcześniej utworzonego dysku wirtualnego nie będziemy z niego korzystać. Idea dysków różnicowych opiera się na prostym schemacie – tworzymy dysk-rodzica, na którym tworzymy „bazową” wersję systemu. Następnie dla każdej z maszyn tworzymy dyski różnicowe, które wykorzystują tą samą „bazę”, ale dla których swobodnie można wprowadzać zmiany czy zapisywać nowe dane. Dyski różnicowe są na stałę połączone z dyskiem-rodzicem i nie są w stanie działać samodzielnie. Pozwalają jednak istotnie oszczędzić miejsce na fizycznym dysku (zajmują kilkukrotnie mniej miejsca, np. dysk bazowy z czystym systemem Windows zajmuje 10-12 GB, w pełni funkcjonalny dysk różnicowy – ok. 2 GB). Dodatkowo dzięki nim możemy niezwykle gwałtownie i efektywnie stawiać kolejne maszyny wirtualne.
W następnym kroku wskazujemy ścieżkę, na której ma być przechowywany tworzony dysk:
Jeszcze dalej określamy szczegóły konfiguracji dysku. Możemy wybrać jedną spośród trzech opcji:
- Wskazać rozmiar dysku – faktyczny w przypadku dysku o stałym rozmiarze lub maksymalny w przypadku dysku dynamicznie powiększającego się. W przypadku dysku różnicowego – w tym miejscu będziemy mogli wskazać wyłącznie dysk-rodzica.
- Skopiować zawartość jednego z dysków fizycznych, co pozwoli odwzorować nasze urządzenie na maszynie wirtualnej
- Skopiować zawartość wybranego wirtualnego dysku twardego
Na potrzeby tego artykułu utworzę pusty dysk. Ze względu na to, iż jest to dysk dynamicznie powiększający możemy wskazać tutaj dowolną wartość do 64 TB:
Taki dysk zostaje utworzony i możemy zobaczyć go we wskazanym przez nas miejscu. Jak widać, mimo iż maszyna wirtualna będzie postrzegała go jako dysk o pojemności 32 TB, faktycznie zajmuje on 11 MB na moim dysku:
Taki dysk możemy teraz wykorzystać przy okazji tworzenia maszyny wirtualnej.
Tworzenie maszyny wirtualnej w Hyper-V
Czas przejść do chyba najważniejszej funkcjonalności w Hyper-V – tworzenia maszyny wirtualnej. Z kronikarskiego obowiązku warto zaznaczyć, iż poza „klasycznym” kreatorem mamy dostępną opcję Quick Create … która pozwala na bardzo szybkie utworzenie maszyny z wybranym systemem. Jedyne co musimy zrobić to wybrać interesujący nas system, a reszta (włącznie z pobraniem obrazu systemu) zadzieje się automatycznie wykorzystując domyślne ustawienia:
Rzecz jasne nie będziemy się w tym artykule koncentrowali na najprostszej formie tworzenia i skorzystamy ze zwykłego kreatora, odnajdując w menu po prawej stronie New -> Virtual Machine …
W pierwszym kroku kreatora wybieramy nazwę maszyny oraz opcjonalnie miejsce, gdzie będzie ona przechowywana:
Kolejny krok jest niezwykle istotny – wybieramy tu generację maszyny, której nie będziemy mogli później zmienić. Dostępne mamy dwie generacje:
- Generacja 1 – która jest generacją starszą, wspierającą systemy 32-bitowe, a także szereg starszych technologii takich jak BIOS czy dyskietki. Generacja ta sprawdza się w przypadku utrzymywania maszyn ze starszymi systemami, które nie wspierają UEFI. Może się również zdarzyć, iż wybór tych generacji będzie niezbędny w przypadku korzystania ze starszego urządzenia fizycznego, na którym tworzymy maszynę. Choć nie zobaczymy wtedy błędu przy tworzeniu czy wyraźnych ograniczeń, maszyny wirtualne mogą nie uruchamiać się poprawnie.
- Generacja 2 – nowsza, wydajniejsza i o ile nie mamy żadnych przeciwwskazań – zalecana. Wspiera ona wyłącznie 64-bitowe systemy operacyjne oraz działa w oparciu o UEFI. Wspiera również cały szereg nowszych technologii, takich jak Secure Boot, moduł TPM czy opcje rozruchu poprzez sieć.
Ja na potrzeby tego artykułu wybieram generację 2, do czego również Was zachęcam:
W następnym kroku określamy ilość RAM, która będzie przypisywana do maszyny. Domyślnie maszyna otrzymuje przy starcie 1 GB RAM, a także ma włączoną funkcję dynamicznej alokacji RAM-u. Opcja ta pozwala przypisywać tyle RAM-u ile dana maszyna faktycznie potrzebuje w danym momencie do płynnego działania. o ile maszyna będzie obciążona – otrzyma większą ilość RAM. o ile będzie uruchomiona, ale nic nie będzie się na niej działo – ilość przypisanego RAM-u zostanie zmniejszona. Wszystko po to, aby jak najefektywniej rozdzielić fizyczną ilość RAM pomiędzy maszynami.
Z mojego doświadczenia domyślna konfiguracja jest w zupełności wystarczająca. Choć 1GB RAM może wydawać się śmiesznie małą ilością, w połączeniu z dynamiczną alokacją RAM-u pozwala danej maszynie wystartować i płynnie działać. Z moich obserwacji (być może jest to jakoś potwierdzone?) maszyny wirtualne zużywają nieco mniej RAM niż „identyczne” urządzenie fizyczne. Wykorzystywane przeze mnie na potrzeby „labów” maszyny zużywają z reguły max 2,5 GB RAM, w skrajnych przypadkach ilość przypisywanego ramu nieznacznie przekracza 4 GB. W pełni funkcjonalna, płynnie działająca maszyna z Windows 10/11 zużywa z reguły ok. 1.5 GB RAM. Pamiętajcie jednak, iż są to moje obserwacje – być może na Waszych urządzeniach/serwerach będzie to wyglądało inaczej.
W kolejnym kroku determinujemy komunikację sieciową maszyny wybierając jeden z wcześniej przygotowanych switchy:
W kolejnym kroku określamy opcje dotyczące wirtualnego dysku twardego, który zostanie dołączony do maszyny. Możemy tutaj
- Utworzyć wirtualny dysk twardy – o ile nie zrobiliśmy tego wcześniej, dzięki omawianego w poprzedniej sekcji kreatora. Utworzony tutaj dysk będzie dyskiem vhdx dynamicznie powiększającym się, więc nasze możliwości wyboru są mocno ograniczone.
- Wykorzystać istniejący dysk twardy – o ile wcześniej utworzyliśmy już odpowiedni dysk. Dokładnie tak będzie w naszym przypadku
- Dołączyć dysk później, co pozwoli na utworzenie maszyny bez dysku, który potem będziemy mogli dołączyć w opcjach maszyny.
Jeżeli wybierzemy pierwszą opcję, czyli utworzenie dysku twardego, zobaczymy dodatkowo możliwość dołączenia pliku ISO. Jest to obraz naszego systemu, czyli „zbiór” plików niezbędnych do zainstalowania systemu. Pliki ISO możemy z reguły pobrać bezpośrednio ze stron producentów danego systemu operacyjnego. Po dołączeniu takiego pliku na tym etapie kreatora, utworzona zostanie wirtualna płyta, z której bootowany będzie system (czyli „uruchamiany” będzie instalator systemu). Tutaj ponownie do wyboru mamy trzy opcje:
- Dołączyć plik ISO później
- Wskazać odpowiedni plik
- Wybrać opcję instalacji poprzez sieć (co wprowadzi odpowiednie zmiany w kolejności bootowania w ustawnieniach maszyny)
Na tym etapie kończymy kreator. Maszyna wirtualna w ciągu kilku sekund zostaje utworzona i jest widoczna na liście dostępnych maszyn:
Instalacja systemu na maszynie wirtualnej
Jak wspominałem przed momentem, kreator maszyny wirtualnej pozwala nam na dodanie pliku ISO wyłącznie przy okazji tworzenia nowego dysku. Wtedy cała konfiguracja przebiega automatycznie, tworzone są niezbędne elementy, zmieniana jest kolejność bootowania itp. W naszym przypadku jednak dysk został utworzony wcześniej, więc taką konfigurację trzeba będzie wykonać manualnie.
Aby móc tego dokonać przejdźmy do ustawień maszyny wirtualnej, klikając na nią PPM, a następnie wybierając opcję Settings:
Znajdziemy tutaj cały szereg dodatkowych opcji związanych z wybraną maszyną wirtualną, które omówimy sobie za moment:
Teraz skoncentrujmy się na kwestii instalacji systemu. Jak wspominałem, system będziemy musieli instalować wykorzystując odpowiedni plik ISO, czyli obraz systemu. Instalując system na urządzeniu fizycznym musielibyśmy np. przygotować odpowiedni, bootowalny pendrive, aby z niego uruchomić instalator systemu. W Hyper-V jego rolę pełni wirtualna płytka, z której to będziemy korzystali na takiej samej zasadzie.
Wszystkie wirtualne nośniki pamięci w Hyper-V dodajemy poprzez tzw. SCSI Controller, ktory jak można zobaczyć na zrzucie ekranu powyżej istnieje już dla naszego dysku. Na potrzeby płytki możemy utworzyć oddzielny SCSI Controller lub skorzystać z już istniejącego. Załóżmy, iż na potrzeby tego artykułu dołożymy kolejny SCSI Controller wybierając go z listy i wykorzystując przycisk Add:
Utworzony SCSI Controller będzie widoczny po lewej stronie. W ramach niego możemy wybrać nośniki, z których chcielibyśmy skorzystać:
- Hard Drive – czyli wirtualny dysk twardy
- DVD Drive – czyli wirtualna płytka wykorzystywana do instalacji systemu
- Shared Drive – czyli dysk współdzielony (omawiany wcześniej typ VHD Set)
Po utworzeniu płytki będzie on również widoczna po lewej stronie. Do płytki musimy dodać interesujący nas obraz systemu, który znajduje się na naszym komputerze. W moim przypadku będzie to Windows 11 Enterprise jeszcze z nieoficjalnej wersji:
Czy to wszystko? Możemy już instalować system? Oczywiście nie. Na ten moment, stosując analogię do instalacji systemu na urządzeniu fizycznym przygotowaliśmy i włożyliśmy PenDrive. Standardowo musielibyśmy jeszcze wejść do BIOS/UEFI i zmienić kolejność bootowania, aby system był uruchamiany z PenDrive-a. W przypadku maszyny wirtualnej w Hyper-V tą opcję znajdziemy w zakładce Firmware. Zobaczymy tutaj, iż domyślnie system będzie próbował uruchomić system z plików, które znajdują się na dysku. A dysk jest przecież jeszcze pusty. Dlatego też musimy wskazać naszą płytkę, a następnie dzięki przycisku Move Up przesunąć ją na samą górę:
Teraz, uruchamiamy naszą maszynę i łączymy się z nią klikając prawym przyciskiem myszy na Start oraz Connect. Na tym etapie powinniśmy zobaczyć instalator systemu na ekranie:
Uruchomienie instalatora wymaga jednak wciśnięcia dowolnego klawisza w ciągu kilku sekund od startu maszyny. o ile nie zdążymy w tym czasie połączyć się z maszyną zdecydowanie szybszym rozwiązaniem niż wyłączanie i włączanie jej, a następnie ponowne połączenie jest widoczny na górze przycisk Resetu:
O samej instalacji systemu nie będę się już specjalnie rozpisywał. o ile chcecie dowiedzieć się więcej zachęcam do zapoznania się za artykułem poświęconym instalacji Windows przez interfejs graficzny lub instalacji poprze CMD (konsolę).
Dodatkowe opcje zarządzania maszyną wirtualną
Omówmy teraz nieco dokładniej możliwości zarządzania i konfiguracji maszyny, które daje nam Hyper-V. Zacznijmy od opcji, które widzimy na górnym pasku po połączeniu z maszyną, czy też po kliknięciu na nią prawym przyciskiem myszy. Zaczynając od lewej:
- Ctrl+Alt+Delete – kombinacja klawiszy potrzeba niekiedy np. do odblokowywania komputera czy uruchomienia „menu” z możliwością przelogowania się, zmiany hasła czy zablokowania komputera. Ponieważ taka kombinacja klawiszy będzie działała na nasze fizyczne urządzenie, w przypadku maszyny wirtualnej możemy skorzystać z dedykowanego przycisku.
- Start – uruchomienie maszyny wirtualnej
- Turn Off – wyłączenie maszyny. Powoduje faktyczne wyłączenie maszyny bez względu na to co się na niej dzieje, tak jakbyśmy np. odłączyli komputer od prądu. Jedyna opcja wyłączenia maszyny o ile np. nie mamy jeszcze zainstalowanego systemu, ale także w wielu innych przypadkach
- Shut Down – „miękkie” wyłączenie maszyny, w oparciu o system operacyjny. Efekt jest taki, jakbyśmy kliknęli przycisk Shut Down czy Wyłącz w naszym systemie
- Save – zapisuje aktualny stan maszyny, widać tutaj wyraźną analogię do Hibernacji, z którą możemy spotkać się na naszych fizycznych komputerach. Powoduje ona zrzut pamięci RAM do miejsca, z którego cały stan urządzenia (otwarte okna itp.) będzie można przywrócić po jego ponownym uruchomieniu.
- Pause – zawiesza działanie maszyny
- Reset – adekwatna do przycisku reset w PC-tach. Natychmiast uruchamia ponownie maszynę.
- Checkpoint – tworzy punkt kontrolny, czyli zapisuje aktualny stan maszyny. Więcej w dalszej części artykułu.
- Revert – przywraca maszynę do wcześniej utworzonego punktu kontrolnego
- Basic/Enhanced Session – przełączanie pomiędzy sesją podstawową i rozszerzoną. Rozszerzona sesja pozwala min. na współdzielenie schowka, tj. możemy kopiować dane np. na naszym urządzeniu fizycznym, a wklejać je na maszynie wirtualnej.
- Share – opcja, która pozwala wyeksportować pliki maszyny
Przejdźmy teraz ponownie do ustawień maszyny i omówmy dostępne tutaj możliwości.
Add Hardware
Wykorzystywana już możliwość dodawania wirtualnych elementów hardware’u. Spośród dostępnych opcji mamy do wyboru:
- SCSI Controller – czyli możliwość dodania kontrolera obsługującego różne nośniki pamięci
- Network adapter – wykorzystywany w przypadku, gdy chcemy, aby nasza maszyna miała np. dwie wirtualne karty sieciowe
- Fibre Channel Adapter – wykorzystywany przy połączeniach z sieciami pamięci masowej (SAN). Więcej tutaj.
Firmware
Opcja pozwalająca zmieniać kolejność bootowania, tj. wskazywać w jakim miejscu maszyna ma poszukiwać plików rozruchowych systemu w pierwszej kolejności.
Security
Możliwość konfiguracji poszczególnych rozwiązań bezpieczeństwa, które są wspierane przez maszyny 2 generacji. Wśród nich znajdziemy:
- Secure boot – funkcjonalność, która pozwala zabezpieczyć system przed „wstrzyknięciem” złośliwego kodu na etapie bootowania („uruchamiania”) systemu. Oprócz włączenia funkcjonalności Secure Boot możemy jeszcze wybrać z listy dostępny Template. Template Microsoft UEFI Certificate Authority lub Open Source Shielded VM warto wybrać, o ile korzystamy z maszyn z systemem Linux.
- Trusted Platform Module (TPM) – wsparcie dla modułu TPM, czyli specjalnego mikroprocesora na naszym urządzeniu fizycznym, który wspiera usługi kryptograficzne. W module TPM są np. przechowywane klucze BitLockera, dzięki którego możemy szyfrować dysk. Jest to bardzo dobrze zabezpieczony moduł, który pozwala bezpiecznie przechowywać np. wspomniane klucze. Monitoruje on min. wszystkie zmiany fizycznych komponentów i w przypadku wykrycia nieprawidłowości – nie ujawni klucza. W temacie TPM polecam ten materiał. Opcjonalnie możemy jeszcze zaznaczyć opcję Encrypt state and virtual machine migration traffic, które będzie wymagana o ile chcemy skorzystać z dalszych funkcjonalności.
- Security Policy (Enable Shielding) – włączenie tej opcji wymaga włączenie wszystkich poprzednich. Opcja wyłączająca część potencjalnie niebezpiecznych narzędzi administracyjnych takich jak np. PowerShell Direct, który pozwala na zarządzanie maszyną poprzez PowerShell Hosta, niezależnie od tego, czy na taki kontakt pozwala komunikacja sieciowa czy inne funkcjonalności „zdalnego” zarządzania
Memory
Zbiór ustawień dla pamięci RAM. Pozwala na:
- Określenie ilości RAM, który ma być przypisywany maszynie w momencie jej uruchomienia.
- Określenie szczegółów dynamicznego przypisywania pamięci RAM. Możemy tutaj, poza włączeniem tej funkcjonalności, określić minimalną oraz maksymalną ilość RAM, która może zostać przypisana do maszyny. Poniżej znajdziemy również opcję określenia jaki % pamięci RAM Hyper-V powinien spróbować zarezerwować jako bufor.
- Na samym dole mamy dodatkowo możliwość określenia priorytetu względem innych maszyn na tym Hoście. Naturalnie w przypadku ograniczonej ilości wolnej pamięci RAM zostanie on dodatkowo przypisany w pierwszej kolejności do maszyn o wyższym priorytecie.
Processor
W tym miejscu możemy określić liczbę wirtualnych procesorów, które będzie posiadała maszyna wirtualna. Dodatkowo możemy również ustalić rezerwację określonej ilości zasobów dla maszyny czy limit ich wykorzystania:
Rozszerzając możliwości dotyczące konfiguracji znajdziemy jeszcze dwie dodatkowe zakładki:
- Compatibility
Jego zaznaczenie ogranicza wiele nowszych możliwości procesora, po to aby mieć możliwość przenoszenia działającej czy zahibernowanej (w trybie „Save”) maszyny pomiędzy hostami wykorzystującymi różne generacje procesorów. Więcej tutaj.
- NUMA
W tym miejscu znajdziemy szereg ustawień związanych z wykorzystaniem architektury NUMA (Non-uniform memory access), która może być wykorzystywana w przypadku architekruty składające się z wielu procesorów. Więcej tutaj.
SCSI Controller
SCSI Controller, jak już wspominałem, pozwala na dołączenie różnego typu nośników danych do maszyny. Wśród możliwych do dodania typów nośników znajdziemy:
- Hard Drive – czyli standardowy, wirtualny dysk twardy
- DVD Drive – czyli płytka, którą możemy wykorzystać do instalacji systemu
- Shared Drive – dodanie współdzielonego, wirtualnego dysku twardego
W zależności od wybranego typu nośnika możemy zobaczyć inne możliwości. W przypadku dysku twardego możemy wskazać interesujący nas wirtualny lub fizyczny dysk, który ma być podłączony do maszyny:
W przypadku płytki DVD możemy wskazać interesujący nas obraz systemu:
W przypadku Dysku współdzielonego, wskazujemy dysk, który ma być wykorzystywany przez daną maszynę:
Network adapter
W kwestii dostosowywania ustawień sieciowych pod kątem wydajności i bezpieczeństwa polecam ten artykuł.
Poprzez network adapter możemy podłączać wirtualne switch-e do maszyny. o ile chcemy, żeby maszyna posiadała np. dwie wirtualne karty sieciowe, możemy wkorzystać do tego dwa adaptery oraz dwa switche. Oprócz możliwości wybrania odpowiedniego switcha, który będzie determinował warunki połączenia sieciowego, możemy jeszcze włączyć identyfikację VLAN czy określić maksymalną i minimalną przepustowość, któa będzie oferowana przez dany adapter:
„Pod” Network Adapter zajdziemy zakładkę Hardware Acceleration. Pozwala ona na włączenie VMQ (Virtual Machine queue), czyli technologii pozwalającej na wydajne przesyłanie pakietów sieciowych z i do maszyny. Żeby z niej skorzystać nasza fizyczna karta sieciowa musi wspierać tą technologię. Pozwala ona na przesyłanie pakietów bezpośrednio do pamięci współdzielonej maszyny, a także na dystrybuowanie pakietów na wiele procesorów.
Oprócz tego mamy jeszcze możliwość włączenia funkcji IPsec task offloading. W największym skrócie IPsec to protokół sieciowy, który pozwala na bezpieczne przesyłanie pakietów (zaszyfrowanych) pomiędzy dwoma urządzeniami. Jak to jednak bywa w przypadku szyfrowania – jest to obciążające i wymaga odpowiedniej ilości zasobów. Włączenie wspomnianej funkcji pozwala na przerzucenie tych procesów na fizyczną kartę sieciową, o ile jest to przez nią wspierane.
W ustawieniach zaawansowanych znajdziemy cały szereg dodatkowych elementów, które możemy skonfigurować:
- Określenie, czy maszyna ma korzystać ze statycznego, wprowadzonego przez nas adresu MAC, czy ma on być dynamicznie przypisany
- Włączenie spoofingu adresu MAC. W przypadku spoofingu mailu możemy wprowadzić zupełnie inny adres nadawcy niż rzeczywisty adres, z którego została wysłana wiadomość. Tutaj działa to podbnie – dla pakietów wychodzących możliwe będzie określenie innego adresu MAC, z którego wyszedł taki pakiet.
- DHCP guard – funkcjonalność, która pozwala odrzucać wiadomości od maszyn, które podają się za kontroler domeny. Taki scenariusz wykorzystywany jest np. przy atakach MITM (Man in the middle), gdzie atakujący wchodząc do sieci często pośredniczy w komunikacji pomiędzy serwerem DHCP, a urządzeniem, które chce uzystać adres IP, po to aby przechwytywać/kontrolować dane przesyłane drogą sieciową.
- Router guard – Bardzo podobnie jak w przypadku DHCP, funkcjonalność ta będzie zapobiegała otrzymywaniu informacji od maszyn, które próbują podawać się za router w naszej sieci.
- Protected network – funkcja ta, w przypadku korzystania z maszyny, która działa na klastrze wysokiej dostępności, pozwala na przerzucenie maszyny na inny node w sytuacju utracenia komunikacji sieciowej, tak jak w przypadku każdej innej awarii/niedostępności jednego z node’ów.
- Port mirroring – funkcjonalność, która pozwala na kopiowanie wychodzących i przychodzących pakietów sieciowych oraz przesyłanie ich na inną maszynę, w celu analizy ruchu sieciowego.
- NIC teaming – pozwala na wsparcie grupowania do 32 adapterów sieciowych (Ethernet network adapters) w jeden lub więcej wirtualnych adapterów sieciowych. Pozwala to na osiągnięcie wyższej przepustowości sieci, a także osiągnięcie odpowiendnio wysokiego poziomu jej redundancji.
- Device naming – opcja pozwalająca na rozgłaszanie nazwy adaptera, rzadko wykorzystywana opcja.
Name
Jak łatwo się domyśleć, pozwala na zmianę nazwy wybranej maszyny wirtualnej, ale także dodanie odpowiednich notatek:
Integration services
W tym miejscu mamy możliwość określenia usług, które mają być włączone dla wybranej maszyny wirtualnej:
- Operating system shutdown – możliwość kontrolowania wyłączania systemu operacyjnego z poziomu Hyper-V (czyli możliwość korzystania z opisywanej wcześniej opcji Shutdown, oprócz Turn Off).
- Time synchronization – funkcja odpowiadająca za synchronizację czasu pomiędzy maszyną wirtualną o Hostem
- Data Exchange – mechanizm wymiany podstawowych metadanych pomiędzy maszyną wirtualną a hostem
- Heartbeat – określa, czy maszyna „odpowiada” i funkcjonuje prawidłowo. o ile np. maszyna zawiesi się, będziemy mogli zobaczyć to poprzez parametr Heartbeat z poziomu Hyper-V (po wybraniu interesującej nas maszyny)
- Backup – wymagana do wykonywania kopii woluminów w tle.
- Guest services – Włączenie pozwala na kopiowanie plików z lub na maszynę wirtualną wykorzystując polecenie Copy-VMFile.
Więcej o usługach można przeczytać tutaj.
Checkpoints
Szereg ustawień dotyczących checkpointów, czyli funkcjonalności pozwalającej na zapisywanie i przywracanie maszyny do określonych punktów w czasie. Więcej o checkpointach w dalszej części artykułu.
Smart Paging FIle Location
Określenie lokalizacji pliku Smart Paging, o którym więcej możecie przeczytać tutaj.
Automatic Start Action
Opcje pozwalające na określenie zachowania maszyny wirtualnej przy uruchomieniu Hosta. Maszyna taka może:
- Nie być uruchamiana
- Być uruchamiana, o ile była uruchomiona w momencie wyłączenia Hosta
- Być zawsze uruchamiana przy starcie Hosta
- Być uruchamiana, ale z wprowadzonym w sekundach opóźnieniem
Automatic Stop Action
Adekwatnie do możliwości konfiguracji zachowania maszyny przy uruchamianiu Hosta, możemy również określić co ma się dziać w maszyną w przypadku jest wyłączenia:
- Maszyna może zostać „zapisana”, czyli przejść w stan hibernacji
- Maszyna może być wyłączana (opcja Turn Off, twarde wyłączenie maszyny jakgdyby została „odłączona od prądu”)
- System operacyjny maszyny może być wyłączany (opcja Shutdown, standardowe zamknięcie systemu operacyjnego)
Pozostałe funkcje Hyper-V
Jakie jeszcze funkcjonalności możemy znaleźć w Hyper-V? Omówmy najważniejsze z nich:
Importowanie maszyny wirtualnej
Hyper-V oferuje naturalnie możliwość importowania maszyn wirtualnych. o ile chcemy np. przenieść maszyny wirtualne pomiędzy hostami może wyeksportować wybrane maszyny, a następnie skorzystać z możliwości importowania. Znajdziemy ją w panelu akcji po prawej stronie:
Proces importowania maszyny wirtualnej do Hyper-V jest bardzo intuicyjny. Wskazujemy folder, w którym znajduje się taka maszyna, a następnie wybieramy tą, której import nas interesuje. Istotne jest jednak omówienie możliwych opcji importowania:
- Register in-place – Wyeksportowane pliki maszyny zostają zarejestrowane w Hyper-V i maszyna pozostaje we wskazanej lokalizacji. Dodana w ten sposób maszyna zachowa swój numer ID, a wyeksportowane pliki będą od dzisiaj wykorzystywane jako „normalne” pliki maszyny, a tym samym nie będą mogły zostać usunięte. Ten typ importowania zdecydowanie nie sprawdzi się w przypadku przenoszenia plików maszyny na wymiennych nośnikach pamięci.
- Restore the virtual machine – wyeksportowane pliki maszyny zostaną skopiowane i przeniesione do standardowej/wskazanej lokalizacji, gdzie przechowywane są maszyny wirtualne. Maszyna po przywróceniu/dodaniu do Hyper-V zachowa swój oryginalny numer ID.
- Copy the virtual machine – opcja działająca podobnie do poprzedniej. Różnica polega na tym, iż kopiowana maszyna otrzymuje nowy, unikalny numer ID.
Więcej o eksportowaniu i importowaniu maszyny przeczytacie tutaj.
Zarządzanie istniejącymi dyskami twardymi
Istotnymi narzędziami w Hyper-V są narzędzia służące do zarządzania istniejącymi już wirtualnymi dyskami twardymi. W panelu akcji po prawej stronie znajdziemy możliwość inspekcji oraz edycji dysków:
Opcja inspekcji dysku pozwala na uzyskanie szczegółów dotyczących wybranego przez nas wirtualnego dysku, a w przypadku dysków różnicowych, także na temat dysku-rodzica:
W narzędziu służącym do edycji dysku znajdziemy kilka różnych możliwości:
- Compact – pozwala na zmniejszenie rozmiaru wirtualnego dysku twardego i tym samym odzyskanie części miejsca na dysku fizyczym
- Convert – pozwala na zmianę typu lub formatu wirtualnego dysku twardego. Technicznie tworzony jest nowy dysk twardy o określonych parametrach, a dane są kopiowane ze starego na nowy dysk
- Expand – pozwala na zwiększenie miejsca/maksymalnej ilości miejsca wirtualnego dysku twardego
W przypadku wybrania dysku różnicowego znajdziemy tutaj jeszcze opcję Merge, która pozwala scalić dysk-dziecko z dyskiem-rodzicem. Inaczej mówiąc, do podstawy, która znajduje się na dysku-rodzicu zostaną dodane wszystkie zmiany i dodatkowe dane, które znalazły się na dysku-dziecku. Zmiany te mogą nadpisać dysk-rodzica lub zostać zapisane na zupełnie nowym dysku, który może posłużyć za kolejny dysk bazowy/dysk-rodzica.
Checkpointy
Niezwykle istotny w kontekście Hyper-V jest temat checkpointów. Tak jak już wspominałem, pozwalają one na zapisanie maszyny w danym miejscu w czasie. Oznacza to, iż checkpoint zapamięta wszystkie niezbędne dane w momencie jego tworzenia, tak aby w każdej chwili maszynę można było przywrócić do poprzedniego stanu.
Checkpoint-y pełnią w tym wypadku rolę pewnego rodzaju kopii zapasowej, choć z tej zdecydowanie nie warto w przypadku maszyn wirtualnych rezygnować. o ile wprowadzone przez nas zmiany wpłyną negatywnie na działanie systemu czy np. system zostanie zainfekowany prze malware, korzystając z checkpointu możemy przywrócić maszynę do stanu sprzed zmian i „pozbyć się problemu”.
Jak utworzyć checkpoint?
Omówmy działanie checkpointów na konkretnym przykładzie. Dla włączonej maszyny wirtualnej utwórzmy checkpoint klikając na nią PPM:
Po chwili checkpoint powinien zostać dodany do „drzewa” widocznego niżej:
W obecnym stanie maszyna posiada wyłącznie 4 widoczne na pulpicie ikony:
Na potrzeby tego przykładu doinstalujmy do maszyny dowolny program, np. notepad ++. Naturalnie dla zobrazowania przykładu tworzę dla niego skrót na pulpicie:
Oczywiście sam w sobie Notepad++ nie stanowi żadnego zagrożenia. Na potrzeby tego przykładu możemy jednak przyjąć, iż symbolizuje on jakąkolwiek niepożądaną aplikację, np. malware. Co w takim przypadku? Możemy skorzystać z utworzonego wcześniej punktu kontrolnego i przywrócić maszynę do stanu sprzed instalacji. W tym celu klikamy w Hyper-V na interesujący nas punkt kontrolny PPM, a następnie wybieramy opcję Apply…
Maszyna wirtualna jest restartowana (a konkretnie przechodzi w stan „Saved” („Hibernacji”) i jest ponownie wybudzana. Po przywróceniu maszyny do punktu kontrolnego możemy zauważyć, iż aplikacja zniknęła z naszej maszyny, a konkretnie, maszyna została przywrócona do stanu, w którym dana aplikacja nie była na niej zainstalowana:
Tak jak zaznaczałem, instalacja aplikacji to tylko przykład. Dokładnie tak samo może to zadziałać w przypadku np. różnego typu zmian w systemie – zostaną one cofnięte.
*w kontekście usuwania malware’u tą drogą należy pamiętać, iż nie daje nam to 100% gwarancji, iż malware został faktycznie w całości usunięty z maszyny.
Checkpointy od strony technicznej
Po uruchomieniu maszyny wirtualnej wszystkie nowo zapisywane na dysk dane zapisywane są na fizycznym dysku na pewnego rodzaju dodatkowym pliku – .avhdx. Technicznie możemy to porównać do dysku różnicowego, który przechowuje niezbędne mu informacje i zapisuje nowe dane, ale przez cały czas korzysta z danych zapisanych na „zwykłym” dysku.
Taki sposób działania pozwala na łatwe wyodrębnienie zmian, które pojawiły się na dysku np. od ostatnio tworzonego checkpointu.
Dopiero przy wyłączeniu maszyny tymczasowy plik z danymi jest scalany z istniejącym plikiem .vhdx:
Utworzenie checkpointu powoduje zapisanie odrębnego pliku dla dysku, na którym zapisywane są wszystkie niezbędne dane. Na poniższym zrzucie ekranu widać plik .avhdx, który przechowuje dane z checkpoint-u oraz .avhdx, na którym znajdują się bieżące zmiany. Co istotne, w przypadku utworzenia jednego lub więcej checkpointów, po wyłączeniu maszyny dane nie są z oczywistych względów scalane.
Przywrócenie maszyny do określonego punktu kontrolnego będzie de facto oznaczało wyczyszczenie danych z pliku .avhdx, na którym zapisane zostały dane po utworzeniu checkpointu. Dzięki temu wszystkie wprowadzone zmiany zostają „cofnięte”.
Usuwając utworzony punkt kontrolny Hyper-V scala zapisane na pliku .avhdx dane z, w tym przypadku, głównym dyskiem:
Słowo końcowe
Możliwości Hyper-V to naprawdę obszerny temat, co możecie zauważyć po długości tego artykułu. Jest to zdecydowanie najdłuższy wpis na Blogu, a pewnie i tak znalazło by się jeszcze co najmniej kilka tematów, które można by dodatkowo poruszyć.
Powyższe informacja stanowią z mojej opinii bardzo dobrą bazę pod zrozumienie zdecydowanej większości funkcjonalności, jakie są dostępne w tym narzędziu. o ile jednak czujesz, iż czegoś zabrakło i chciałbyś dowiedzieć się więcej na temat związanej z Hyper-V funkcjonalności, daj mi o tym znać w komentarzu, a postaram się zaktualizować artykuł w najbliższym możliwym czasie.