*.vhd

*.vhd

  • Comments 3
  • Likes

Pliki VHD spotkał chyba każdy. Poza kopiami zapasowymi (o których jeszcze kiedyś napiszę więcej) znane są głównie z wirtualnych środowisk VirtualPC, Virtual Server oraz Hyper-V. Postanowiłem z ciekawości podłubać w zawartości takich plików i sprawdzić co też w nich w środku siedzi. Okazuje się, że zawartość zależy (jest to w sumie oczywiste) od tego czy dysk ma stały rozmiar czy też rozrasta się w miarę potrzeby oraz od tego czy to samodzielny dysk, czy dysk różnicowy.
W środku w pliku VHD spotkać można:

  • identyfikator aplikacji (równy conectix dla wszystkich rozwiązań włącznie z Hyper-V)
  • wersję formatu (1.0)
  • nazwę aplikacji (vpc dla Virtual PC, wsv dla Hyper-V)
  • wersję aplikacji (na przykład 5.3 dla Virtual PC 2005, 1.0 dla Hyper-V z Windows 2008)
  • znacznik czasu (z dokładnością do 1s)
  • wersję systemu hosta (zawsze Wi2k w systemach Windows)
  • rozmiar w bajtach
  • typ dysku (stały, dynamiczny, przyrostowy)
  • geometrię (ilość cylindrów, głowic i sektorów)
  • sumę kontrolna
  • UUID czyli 128 bitowy unikalny identyfikator
  • informację czy maszyna ma zapisany stan (jeżeli tak, to nie można utworzyć dysku różnicowego)

Te pola są wspólne dla każdego typu dysku i mimo, że istnieje jeszcze kilka innych – te są najciekawsze.


Jeżeli dysk jest dynamicznie rozszerzalny, to jego dane uzupełnione są dodatkowo o:

  • identyfikator aplikacji (równy dla odmiany cxsparse)
  • wersja nagłówka (cały czas 1.0)
  • ilość wpisów w tabeli BAT
  • rozmiar bloku

Ostatnie dwie pozycje dotyczą sytuacji, w której dysk musi się rozszerzyć. Skoro się rozszerza, to przyrasta o pewną ilość bloków o określonym rozmiarze. Bloki te zapisywane są w specjalnej tablicy zwanej BAT. Iloczyn ilości wpisów i rozmiaru bloku powinien być z oczywistych powodów równy rozmiarowi dysku. Microsoft używa bloków 2MB (w Virtual PC) oraz 512KB (w Hyper-V). Inne rozmiary są dopuszczalne ale nie sprawdzone i nie wspierane. Ciekawostką jest zmniejszenie rozmiaru bloku w Hyper-V, ale w ogóle poza zastosowaniami typowo domowymi, dyski o dynamicznym rozmiarze nie powinny być stosowane, więc nie warto się tym nadmiernie przejmować.

 

Dyski różnicowe są dyskami, które występują wyłącznie w parze z rodzicem czyli dyskiem bazowym. Ich zawartość zawiera wyłącznie różnice pomiędzy dyskiem bazowym a dyskiem widzianym jako efekt końcowy. Dyski różnicowe można tworzyć świadomie i samodzielnie lub poprzez włączenie „Undo disk” w Virtual PC. W pierwszym przypadku mają standardowe rozszerzenie *.vhd, w drugim - *.vud. Format jednak pozostaje w obu przypadkach taki sam. W dyskach różnicowych zapisane są pewne dodatkowe informacje na temat dysku-rodzica:

  • nazwę pliku dysku-rodzica
  • UUID pliku rodzica
  • znacznik czasu pliku rodzica

Wszystkie te pola muszą być takie same w pliku dysku-rodzica i w pliku dysku różnicowego. Oznacza to, że jeżeli stworzymy dysk różnicowy, a następnie zmodyfikujemy coś w dysku bazowym, w efekcie zmieni się znacznik czasu rodzica i plik różnicowy przestanie działać!

Poza tym, dysk różnicowy zawiera informacje na temat położenia dysku-rodzica. Żeby ułatwić jego znajdowanie, informacje te zapisywane są w kilku różnych standardach. Teoretycznie format przewiduje 8 slotów na takie dane, jednak w praktyce, w świecie Windows wykorzystywane są 4. Ścieżka do rodzica zapisywana jest w unicode oraz w ASCII, a w każdym z tych formatów w postaci względnej i bezwzględnej. Dzięki temu możliwe jest odnalezienie rodzica nawet, gdy plik różnicowy przeniesiony zostanie do innego katalogu lub w sytuacji, gdy plik wraz z rodzicem zostanie przeniesiony w zupełnie inne miejsce.

Same informacje z plików VHD są tylko niewielkim kawałkiem zabawy z możliwościami. Naprawdę ciekawie robi się w sytuacji, gdy niezależnie od możliwości środowisk wirtualnych próbujemy modyfikować zawartość plików. Rozmiar bloku danych, możliwość resynchronizacji plików różnicowych, zmiana położenia pliku-rodzica i tym podobne edycje zostaną opisane w miarę mojego wolnego czasu.

Autor: Grzegorz Tworek

Comments
  • skad mozna wziac to narzedzie vhdinfo.exe? to jest gdzies dostepne?

  • hmm.... ;)

    Sam sobie napisałem jakiś czas temu. Ale specyfikacja formatu jest powszechnie dostępna i naprawdę to nie jest skomplikowane. Do odczytania danych wystarczy jakikolwiek program, który umie otworzyć plik o rozmiarach typowych dla VHD.

  • VHD staje sie w systemach coraz bardziej powszechne. Jednak dla mnie najwieksza wartosc zostala pokazana wraz z mozliwoscia bootowania systemow Windows 7 i Windows Server 2008 R2 z plikow VHD. Chetnych serdecznie zapraszam do zapoznanaia sie z moim artem na ten temat: http://wss.pl/Articles/10516.aspx

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment