Przedstawiamy trzecią część artykułu Dariusza Porowskiego (MVP, MCT) opisujący migrację serwerów fizycznych do wirtualnych w System Center Virtual Machine Manager 2008 R2 (SCVMM). Tym razem jak wygląda konwersja P2V w trybie Offline.
W drugiej części Konwersja P2V w trybie Online serii Migracja serwerów fizycznych do wirtualnych w SCVMM 2008 R2 zostały zaprezentowane sposoby konwersji P2V w trybie Online za pomocą narzędzia SCVMM 2008 R2. Została zaprezentowana procedura za pomocą konsoli administracyjnej SCVMM oraz skrypt PowerShell. Szczególnie dobrze było zwrócić uwagę na skrypt ze względu na możliwość automatyzacji tego procesu na większa skalę.
W tej części zostanie omówiony proces konwersji P2V w trybie Offline oraz zostanie on zaprezentowany krok po kroku z poziomu konsoli administratora SCVMM. Również będzie on przedstawiony za pomocą skryptu PowerShell. Skrypt PowerShell będzie opierał się na bazie z części drugiej.
Seria składa się z następujących artykułów:
Jak przebiega P2V w trybie Offline?
Poniżej na Rysunek 1 przedstawiony jest schemat przebiegu procesu P2V w trybie Offline w System Center Virtual Machine Manager 2008 R2 (SCVMM).

Rysunek 1. P2V w SCVMM w trybie Offline
Konwersja P2V w trybie Offline w SCVMM składa się z pięciu faz, które opisane są poniżej.
Faza 1 – Instalacja agenta SCVMM na serwerze źródłowym – w tej fazie serwer SCVMM instaluje agenta na serwerze źródłowym, który ma posłużyć do instalacji WinPE.
Faza 2 – Instalacja WinPE oraz modyfikacja sektora rozruchowego – w tej fazie agent SCVMM instaluje obraz Windows PE na serwerze źródłowy, zmienia rekordy rozruchowe oraz na zakończenie restartuje serwer ładując Windows PE jako system bazowy.
Faza 3 – Tworzenie obrazu – w tej fazie strumieniowana jest zawartość fizycznych dysków twardych. Nie są wykonywane żadne migawki typu Volume Shadow Copy Service (VSS).
Faza 4 – Przygotowanie na serwerze wirtualizacji nowej maszyny wirtualnej – w tej fazie serwer SCVMM przygotowuje system operacyjny i wirtualne dyski twarde do utworzenia nowej maszyny wirtualnej.
Faza 5 – Tworzenie maszyny wirtualnej – w tej fazie tworzona jest nowa maszyna wirtualna, podpinane są VHD, karty sieciowe, napęd CD-ROM oraz pamięć.
Offline P2V w konsoli SCVMM
Poniżej zaprezentowany jest przykład konwersji P2V w trybie Offline za pomocą konsoli administracyjnej SCVMM.
- Uruchom konsolę administracyjną SCVMM.
- Wybierz Convert physical server z menu Actions - Rysunek 2.

Rysunek 2. Convert physical server w menu Actions
- Na stronie Select Source wprowadź nazwę serwera źródłowego, który chcesz przekonwertować w polu Computer name or IP address, następnie podaj poświadczenia użytkownika który ma uprawnienia administracyjne na serwerze źródłowym. Kliknij przycisk Next - Rysunek 3.

Rysunek 3. Strona Select Source
- Na stronie Virtual Machine Identity wprowadź nazwę maszyny wirtualnej (nie będzie miało to wpływu na nazwę konta komputera) w polu Virtual machine name, opis w polu Description oraz ewentualnie zmień właściciela maszyny wirtualnej w polu Owner. Następnie kliknij przycisk Next - Rysunek 4.

Rysunek 4. Strona Virtual Machine Identity
- Na stronie System Information kliknij Scan System i poczekaj aż zostanie zainstalowany agent na serwerze źródłowym i pobierze on informacje o systemie. Po kilku chwilach jak agent prześle dane przejrzyj je w polu System Information. Kliknij przycisk Next - Rysunek 5.

Rysunek 5. Strona System Information
- Na stronie Volume Configuration dostosuj wielkość wirtualnych dysków twardych (może być ona jedynie zwiększona lub pozostać domyślna) w kolumnie VHD Size, wybierz typ plików VHD w kolumnie VHD Type oraz wskaż w kolumnie Channel podłączenie wirtualnych dysków twardych do odpowiedniego kanału w wirtualnym kontrolerze (VHD z systemem nie może być podpięty do kontrolera SCSI). Klikając poniżej Conversion Options rozwiniesz dodatkowe opcje. Zaznacz wartość Offline conversion i jeżeli chcesz aby serwer źródłowy został wyłączony automatycznie po udanej konwersji P2V zaznacz opcję Turn off source computer after creation. Kliknij przycisk Next - Rysunek 6.

Rysunek 6. Strona Volume Configuration
- Na stronie Offline Convertion Options możesz dostosować ustawienia adresacji IP. Domyślnie pobierany jest adres MAC kart sieciowych oraz konfiguracja IP z maszyny źródłowej o ile jest ustawiona. Jeżeli maszyna źródłowa pobiera adresację dynamicznie to domyślnie zaznaczona będzie pozycja Obtain an IP address automatically. Kliknij przycisk Next – Rysunek 7.

Rysunek 7. Strona Offline Conversion Options
- Na stronie Virtual Machine Configuration ustaw liczbę procesorów w polu Numer of processors i ilość pamięci w polu Memory, a następnie kliknij przycisk Next - Rysunek 8.

Rysunek 8. Strona Virtual Machine Configuration
- Na stronie Select Host wybierz zalecany host jako cel lub wybierz własny preferowany z listy dostępnych hostów (niektóre hosty mogą nie być dostępne do wyboru, jeśli nie spełniają wymogów nowej maszyny wirtualnej), a następnie kliknij przycisk Next - Rysunek 9.

Rysunek 9. Strona Select Host
- Jeśli host docelowy jest częścią klastra Hyper-V będzie wyświetlony komunikat ostrzegawczy You have selected a clustered host for placing a non-highly available virtual machine. Non-highly available virtual machines cannot be placed on a clustered host. Do you want to continue and make this virtual machine highly available?, informujący, że maszyna wirtualna będzie wysoko dostępna. Jeśli klikniesz przycisk Yes, nowa maszyna wirtualna zostanie automatycznie oznaczona jako wysoko dostępna i umieszczona w klastrze. Jeśli wybierzesz No, musiał wrócić krok wstecz i wybrać nieklastrowany host Hyper-V.
- Na stronie Select Path wybierz miejsce na dysku do przechowywania plików maszyny wirtualnej w polu Virtual machine path, a następnie kliknij przycisk Next - Rysunek 10.

Rysunek 10. Strona Select Path
- Na stronie Select Networks wybierz odpowiednie sieci wirtualne w kolumnie Virtual Network, a następnie kliknij przycisk Next - Rysunek 11.

Rysunek 11. Strona Select Networks
- Na stronie Additional Properties wybierz ustawienia akcji podczas uruchomiania i zamykania fizycznego serwera wirtualizacji. W polu Action when physical server starts ustaw opcję dotyczącą uruchamiania - dostępne opcje:
- Never automatically automatically turn on the virtual machine - nigdy nie uruchamiaj automatycznie maszyny wirtualnej
- Always automatically turn on the virtual machine - zawsze uruchamiaj automatycznie maszynę wirtualną - przy tej opcji dodatkowo możesz ustawić w polu Delay start ile ma sekund minąć od uruchomienia serwera fizycznego do właściwego stary maszyny wirtualnej, przy czym maksymalne limity są następujące:
- Hyper-V - 1000000000 sekund (277777 godzin)
- Virtual Server - 86400 sekund (24 godziny)
- VMware ESX - 65535 sekund (18 godziny)
- Automatically turn on the virtual machine if it was running when physical server stopped - uruchom automatycznie maszynę wirtualną, jeżeli działała w momencie kiedy serwer fizyczny został zatrzymany
W polu Action when physical server stops ustaw opcję dotyczącą zamykania - dostępne opcje:
- Save State - zapisz stan, czyli zapisanie na dysk pamięci maszyny wirtualnej i wyłączenie jej
- Turn off virtual machine - wyłącz maszynę wirtualną, czyli szybkie odcięcie zasilania
- Shut down guest OS - zamknij system operacyjny gościa, czyli standardowe ładne zamykanie systemu
Następnie kliknij przycisk Next - Rysunek 12.

Rysunek 12. Strona Additional Properties
- Na stronie Conversion Information przejrzyj wszelkie wykryte problemy. Jeżeli jakiekolwiek problemy zostały wykryte pozstępuj zgodnie z procedurami aby je rozwiązać, a następnie kliknij przycisk Check Again. Kiedy nie będzie już żadnych problemów wyświetli się komunikat No issues detected. Następnie kliknij przycisk Next - Rysunek 13.

Rysunek 13. Strona Conversion Information
- Na stronie Summary przejrzyj informacje podsumowania. Dodatkowo z tej operacji możesz wygenerować skrypt PowerShell klikając przycisk View Script. Jeżeli chcesz aby po zakończeniu konwersji nowa maszyna wirtualna została automatycznie uruchomiona zaznacz pole Start the virtual machine after deploying it on the host. Kliknij przycisk Create - Rysunek 14.

Rysunek 14. Strona Summary
- Właśnie trwa proces P2V w trybie Offline. W zależności kilku czynników np. szybkość i obciążenia sieci, łącznej ilości danych, docelowego magazynu danych, obciążenia serwera docelowego, itp. operacja może potrwać dłuższy kawałek czasu – Rysunek 15. W tym czasie można podglądać na serwerze źródłowym (o ile mamy taka możliwość) jak ładowany jest WinPE – Rysunek 16. .

Rysunek 15. Przebieg konwersji P2V w trybie Offline

Rysunek 16. WinPE na serwerze źródłowym
- Po pomyślnym zakończeniu konwersji w Jobs powinieneś zobaczyć zakończony proces wraz z podpunktami na zielono. W tym przykładzie wybrane zostały opcje które wyłączą serwer źródłowy oraz uruchomią maszynę wirtualną - jak widać na Rysunek 17 maszyna została uruchomiona i świadczy dalej swoje usługi.

Rysunek 17. Uruchomiona maszyna wirtualna po konwersji P2V
Offline P2V w PowerShell
Poniższy skrypt zrealizuje dokładnie taką samą konwersję P2V jak procedura wykonana za pomocą konsoli SCVMM. Nie jest on również skryptem, który domyślnie generuje serwer SCVMM.
Skrypty PowerShell mają pomóc w automatyzacji procesów, lecz w przypadku konwersji P2V w SCVMM potrzebne jest podanie poświadczeń użytkownika, który ma uprawnienia lokalnego administratora na serwerze źródłowym. Podawanie za każdym razem poświadczeń mija się z koncepcją automatyzacji – na pewno podwyższa bezpieczeństwo całej operacji. Aby ją jednak zrealizować najpierw utworzymy plik z poświadczeniami również za pomocą PowerShell, który będzie użyty do właściwego skryptu z procesem P2V. Tworzenie pliku poświadczeń poznaliśmy już w poprzedniej części serii. Składnia skryptu New-SecureFile.ps1 znajduje się poniżej.
New-SecureFile.ps1 [PowerShell]
# Pobieranie poświadczń
$Credential = Get-Credential
# Tworzenie nazwy pliku z hasłem na podstawie podanego użytkownika
$SecureFileName = $Credential.UserName + '.cred'
$SecureFileName = $SecureFileName.Replace('\', '_')
# Zapisywanie hasła w pliku
$Credential.Password | ConvertFrom-SecureString | Set-Content $SecureFileName
|
Przykładowo dla konta domenowego CORP\A-DP zostanie utworzony plik CORP_A-DP.cred.
Mając już zapisane poświadczenia możemy przejść do właściwego skryptu P2V o nazwie Do-P2VOffline.ps1. W sekcji Zmienne do uzupełnienia należy wprowadzić własne wartości.
Do-P2VOffline.ps1 [PowerShell]
$UserName = 'CORP\A-DP' # Użytkownik z uprawnieniami administratora lokalnego na serwerze źródłowym
$VMMServer = 'SVMM001.Corp.Merago.Com' # Serwer SCVMM
$SourceServer = 'SAPP02.Corp.Merago.Com' # Serwer źródłowy
$DestinationHost = 'SVMH003.Corp.Merago.Com' # Serwer wirtualizacji, na którym ma się znaleźć tworzona maszyna wirtualna
$Name = 'SAPP02' # Nazwa maszyny wirtualnej
$Description = 'Serwer aplikacyjny 2 pochodzący z konwersji P2V' # Opis maszyny wirtualnej
$VirtualNetwork = 'External LAN' # Nazwa wirtualnej sieci przeznaczonej dla maszyny wirtualnej
$Owner = 'CORP\A-DP' # Właściciel maszyny wirtualnej
$CPUCount = 4 # Ilość procesorów wirtualnych w maszynie wirtualnej
$MemoryMB = 4096 # Ilość MB pamięci RAM
$Path = 'D:\VMs' # Ścieżka na serwerze wirtualizacji, gdzie mają być stworzone pliki maszyny wirtualnej
$StartAction = 'AlwaysAutoTurnOnVM' # Akcja maszyny wirtualnej na start serwera wirtualizacji - możliwe wartości: AlwaysAutoTurnOnVM, NeverAutoTurnOnVM, TurnOnVMIfRunningWhenVSStopped
$DelayStartSecounds = 240 # Ilość sekund opóźnienia do startu maszyny wirtualnej
$StopAction = 'ShutdownGuestOS' # Akcja maszyny wirtualnej na zatrzymanie serwera wirtualizacji - możliwe wartości: SaveVM, TurnOffVM, ShutdownGuestOS
$OfflineIPAddress = '192.168.69.20' # Adres IP
$OfflineNICMACAddress = 'B8:AC:6F:93:BF:DA' # MAC
$OfflineDefaultGateway = '192.168.69.1' # Brama domyślna
$OfflineSubnetMask = '255.255.255.0' # Maska podsieci
# Tworzenie nazwy pliku z hasłem na podstawie podanego użytkownika
$SecureFileName = $UserName.Replace('\', '_') + '.cred'
# Pobieranie hasła z pliku dla podanego użytkownika
$Password = Get-Content $SecureFileName | ConvertTo-SecureString
# Tworzenie poświadczenia z podanej nazwy użytkownika oraz pliku
$Credential = New-Object System.Management.Automation.PsCredential($UserName, $Password)
# Ładowanie snapinu PowerShell od SCVMM
Add-PSSnapin Microsoft.SystemCenter.VirtualMachineManager
# Pobieranie obiektu serwera SCVMM
$objVMMServer = Get-VMMServer -ComputerName $VMMServer
# Pobieranie obiektu serwera wirtualizacji
$objVMHost = Get-VMHost -ComputerName $DestinationHost -VMMServer $objVMMServer
# Pobieranie obiektu konfiguracji serwera źródłowego
$objMachineConfig = New-MachineConfig -SourceComputerName $SourceServer -VMMServer $objVMMServer -Credential $Credential
# Pobieranie obiektu wirtualnej sieci
$objVirtualNetwork = Get-VirtualNetwork -VMMServer $objVMMServer | where {$_.Name -eq $VirtualNetwork -and $_.VMHost -eq $DestinationHost}
# Tworzenie nowego GUID dla JobGroup
$JobGroupID = [Guid]::NewGuid().ToString()
# Pętla przypinająca wirtualne dyski twarde do kontrolerów kontrolery
$LUNIndex = 0
foreach ($Volume in $objMachineConfig.Volumes) {
if (($Volume.IsBoot -and $Volume.IsSystem) -or ($Volume.IsBoot -and !$Volume.IsSystem)) {
# Dla VHD, który jest bootowaly oraz ma lub nie ma systemu - kontroler IDE
New-P2V -RunAsynchronously -JobGroup $JobGroupID -VMMServer $objVMMServer -VMHost $DestinationHost -MachineConfig $objMachineConfig -VolumeDeviceID $Volume.DeviceID -Dynamic -IDE -Bus 0 -LUN 0
}
elseif (!$Volume.IsBoot -and $Volume.IsSystem) {
# Dla VHD, który nie jest bootowaly oraz ma system - kontroler IDE
New-P2V -RunAsynchronously -JobGroup $JobGroupID -VMMServer $objVMMServer -VMHost $DestinationHost -MachineConfig $objMachineConfig -VolumeDeviceID $Volume.DeviceID -Dynamic -IDE -Bus 0 -LUN 1
}
else {
# Dla pozostałych VHD - kontroler SCSI
New-P2V -RunAsynchronously -JobGroup $JobGroupID -VMMServer $objVMMServer -VMHost $DestinationHost -MachineConfig $objMachineConfig -VolumeDeviceID $Volume.DeviceID -Fixed -SCSI -Bus 0 -LUN $LUNIndex
$LUNIndex++
}
}
# Finalne wywołanie konwersji P2V w trybei Offline
New-P2V -RunAsynchronously -JobGroup $JobGroupID -VMHost $DestinationHost -VMMServer $objVMMServer -MachineConfig $objMachineConfig -CPUCount $CPUCount -DelayStart $DelayStartSecounds -Description $Description -MemoryMB $MemoryMB -Name $Name -Credential $Credential -Owner $Owner -Path $Path -StartAction $StartAction -StopAction $StopAction -Offline -Shutdown -OfflineIPAddress $OfflineIPAddress -OfflineNICMACAddress $OfflineNICMACAddress -OfflineDefaultGateway $OfflineDefaultGateway -OfflineSubnetMask $OfflineSubnetMask -RunAsSystem -StartVM -Shutdown -Trigger
|
Powyższy skrypt jest bazowym dla procesu P2V i nie zawiera pełnej kontroli możliwych błędów oraz sprawdzania możliwych warunków. Nie zawiera również wszelkich możliwych atrybutów dla cmdletu New-P2V. Zachęcam do zapoznania się z dokumentem System Center Virtual Machine Manager 2008 R2 Cmdlet Reference (link znajduje się w sekcji Odnośniki) i rozbudowanie i dostosowania skryptu do własnych potrzeb.
Odnośniki
Podsumowanie
Po przeczytaniu tego artykułu, który jest trzecią częścią serii Migracja serwerów fizycznych do wirtualnych w SCVMM 2008 R2 powinieneś być w stanie starannie zrealizować migrację P2V w trybie Offline z poziomu konsoli SCVMM oraz napisać własne skrypty automatyzujące proces za pomocą cmdlet-ów PowerShell dostarczonych wraz z SCVMM.
Niniejszy artykuł jest ostatnim z cyklu omawiającego proces konwersji P2V w SCVMM 2008 R2 zarówno od strony teoretycznej jak i praktycznej.

Dariusz Porowski
(MVP, MCT, MCITP, MCTS, MCSA, MCP)
blog.porowski.pro
Veek.PL
Microsoft MVP w kategorii Virtual Machine. Konsultant, Inżynier Systemowy i Trener w obszarze technologii serwerowych, infrastruktury oraz wirtualizacji opartej o rozwiązania firmy Microsoft.
Artykuł w wersji: