*.vhd

Pliki VHD spotkal chyba kazdy. Poza kopiami zapasowymi (o których jeszcze kiedys napisze wiecej) znane sa glównie z wirtualnych srodowisk VirtualPC, Virtual Server oraz Hyper-V. Postanowilem z ciekawosci podlubac w zawartosci takich plików i sprawdzic co tez w nich w srodku siedzi. Okazuje sie, ze zawartosc zalezy (jest to w sumie oczywiste) od tego czy dysk ma staly rozmiar czy tez rozrasta sie w miare potrzeby oraz od tego czy to samodzielny dysk, czy dysk róznicowy.
W srodku w pliku VHD spotkac mozna:

  • identyfikator aplikacji (równy conectix dla wszystkich rozwiazan wlacznie z Hyper-V)
  • wersje formatu (1.0)
  • nazwe aplikacji (vpc dla Virtual PC, wsv dla Hyper-V)
  • wersje aplikacji (na przyklad 5.3 dla Virtual PC 2005, 1.0 dla Hyper-V z Windows 2008)
  • znacznik czasu (z dokladnoscia do 1s)
  • wersje systemu hosta (zawsze Wi2k w systemach Windows)
  • rozmiar w bajtach
  • typ dysku (staly, dynamiczny, przyrostowy)
  • geometrie (ilosc cylindrów, glowic i sektorów)
  • sume kontrolna
  • UUID czyli 128 bitowy unikalny identyfikator
  • informacje czy maszyna ma zapisany stan (jezeli tak, to nie mozna utworzyc dysku róznicowego)

Te pola sa wspólne dla kazdego typu dysku i mimo, ze istnieje jeszcze kilka innych – te sa najciekawsze.

Jezeli dysk jest dynamicznie rozszerzalny, to jego dane uzupelnione sa dodatkowo o:

  • identyfikator aplikacji (równy dla odmiany cxsparse)
  • wersja naglówka (caly czas 1.0)
  • ilosc wpisów w tabeli BAT
  • rozmiar bloku

Ostatnie dwie pozycje dotycza sytuacji, w której dysk musi sie rozszerzyc. Skoro sie rozszerza, to przyrasta o pewna ilosc bloków o okreslonym rozmiarze. Bloki te zapisywane sa w specjalnej tablicy zwanej BAT. Iloczyn ilosci wpisów i rozmiaru bloku powinien byc z oczywistych powodów równy rozmiarowi dysku. Microsoft uzywa bloków 2MB (w Virtual PC) oraz 512KB (w Hyper-V). Inne rozmiary sa dopuszczalne ale nie sprawdzone i nie wspierane. Ciekawostka jest zmniejszenie rozmiaru bloku w Hyper-V, ale w ogóle poza zastosowaniami typowo domowymi, dyski o dynamicznym rozmiarze nie powinny byc stosowane, wiec nie warto sie tym nadmiernie przejmowac.

 

Dyski róznicowe sa dyskami, które wystepuja wylacznie w parze z rodzicem czyli dyskiem bazowym. Ich zawartosc zawiera wylacznie róznice pomiedzy dyskiem bazowym a dyskiem widzianym jako efekt koncowy. Dyski róznicowe mozna tworzyc swiadomie i samodzielnie lub poprzez wlaczenie „Undo disk” w Virtual PC. W pierwszym przypadku maja standardowe rozszerzenie *.vhd, w drugim - *.vud. Format jednak pozostaje w obu przypadkach taki sam. W dyskach róznicowych zapisane sa pewne dodatkowe informacje na temat dysku-rodzica:

  • nazwe pliku dysku-rodzica
  • UUID pliku rodzica
  • znacznik czasu pliku rodzica

Wszystkie te pola musza byc takie same w pliku dysku-rodzica i w pliku dysku róznicowego. Oznacza to, ze jezeli stworzymy dysk róznicowy, a nastepnie zmodyfikujemy cos w dysku bazowym, w efekcie zmieni sie znacznik czasu rodzica i plik róznicowy przestanie dzialac!

Poza tym, dysk róznicowy zawiera informacje na temat polozenia dysku-rodzica. Zeby ulatwic jego znajdowanie, informacje te zapisywane sa w kilku róznych standardach. Teoretycznie format przewiduje 8 slotów na takie dane, jednak w praktyce, w swiecie Windows wykorzystywane sa 4. Sciezka do rodzica zapisywana jest w unicode oraz w ASCII, a w kazdym z tych formatów w postaci wzglednej i bezwzglednej. Dzieki temu mozliwe jest odnalezienie rodzica nawet, gdy plik róznicowy przeniesiony zostanie do innego katalogu lub w sytuacji, gdy plik wraz z rodzicem zostanie przeniesiony w zupelnie inne miejsce.

Same informacje z plików VHD sa tylko niewielkim kawalkiem zabawy z mozliwosciami. Naprawde ciekawie robi sie w sytuacji, gdy niezaleznie od mozliwosci srodowisk wirtualnych próbujemy modyfikowac zawartosc plików. Rozmiar bloku danych, mozliwosc resynchronizacji plików róznicowych, zmiana polozenia pliku-rodzica i tym podobne edycje zostana opisane w miare mojego wolnego czasu.

Autor: Grzegorz Tworek