Na IT Campie vGruru w Warszawie w trakcie sesji wywiązała się dyskusja na temat, w jakim stanie zostaną przechwycone dane z dysku w trakcie migracji na żywo do maszyny wirtualnej za pomocą Virtual Machine Managera. Nie wchodząc w to dokładnie jak VMM dokonuje migracji P2V przedstawię stan danych po migracji do maszyny wirtualnej za pomocą VMM2012. Maszyna, która została zwirtualizowana to Windows Server 2008R2 SP1.

Przypadek 1

Na maszynie przed migracją został uruchomiany skrypt powershellowy:

While($true)
{
Get-Date | Out-File C:konwersja.txt –Append
Start-Sleep 2
}

Skrypt ten, co 2 sekundy zapisuję aktualną datę do pliku konwersja.txt
Poniżej log VMM z procesu migracji. Na czerwono zaznaczone Rozpoczęcie kopiowania dysku oraz wyłączenie maszyny fizycznej.

Na maszynie wirtualnej w pliku ostatni wpis jest o godzenie 21:22:23.

Na maszynie, która była źródłem ostatni wpis jest o 21:34:26.

Kopiowanie rozpoczęło się o 21:22:16. Jak widać dane zapisane po tej godzinie nie zostały przeniesione na maszynę wirtualną.

Przypadek 2

Na maszynie przed migracją został uruchomiany skrypt powershellowy:

 $file = New-Object System.IO.StreamWriter("C:\keep_konwersja.txt", $true)
While($true)
{
$file.WriteLine((Get-Date))
$file.Flush()
Start-Sleep 2
}

Skrypt ten, co 2 sekundy zapisuję aktualną datę do pliku keep_konwersja.txt. W przeciwieństwie do skryptu z przypadku pierwszego proces ten blokuję plik.
Log VMM:

Na maszynie wirtualnej w pliku ostatni wpis jest o godzenie 22:06:46.

Na maszynie, która była źródłem ostatni wpis jest o 22:18:34.

Dane są w takim stanie jak w przypadku pierwszym.

Dlaczego tak się dzieje?

Odwołując się do dokumentacji:

VMM creates a copy of local NTFS volumes and data of VSS-aware applications. VMM leverages the Volume Shadow Copy Service (VSS) to ensure that data is backed up consistently while the server continues to service user requests. VMM uses this read-only snapshot to create a VHD.
 

Czyli aby zapewnić poprawną konsystencję danych jest wykorzystywany mechanizm VSS, który tworzy snapshot w trybie read-only na początku procesu kopiowania. Przez to dane, które zostaną zmodyfikowane po starcie kopiowania nie będą już dostępne na maszynie wirtualnej.
Podsumowując należy pamiętać, aby usługi, aplikację, które zapisują coś na dysku przenoszonej maszyny były wyłączone, aby nie stracić danych. Osobiście polecam używania opcji migracji offline do maszyn wirtualnych.
Pozdrowienia dla obecnych na IT Campie :).