Tuesday, June 10, 2008 2:23 PM
plitpro@microsoft.com
Virtual Disk Precompactor
VirtualPC zdecydowanie próbuje się rozpychać w tym blogu... ale cóż można na to poradzić, skoro to jedno z najważniejszych narzędzi w mojej pracy. Od eksperymentów, poprzez mądre i mniej mądre zabawy aż po rozwiązywanie faktycznych problemów klientów. Przykładowo, ostatnio zdarzyło się, że klient używał aplikacji ASP.NET korzystających z działającego w domenie serwera SQL ale zainstalowanego na lokalnym koncie użytkownika. Ot jedno z dziesiątek środowisk, które odwiedzam. U klienta na żywo nie zawsze da się poeksperymentować, a zasymulowanie tego na VirtualPC zajęło mi znacznie mniej czasu niż sam dojazd na drugi koniec Polski. Pomijam już to, że mam undo, całość mogę zepsuć i postawić od nowa w krótkim czasie a restarty SQLa nie wiążą się z rozgrzaniem telefonu administratora do czerwoności. Gotowe rozwiązanie można przedstawić klientowi, który nie dość, że się ucieszy z usunięcia problemu, to jeszcze pokiwa głową jaki ten konsultant mądry, że tak skutecznie doradził.
Ubocznym efektem wielkiej miłości do VirtualPC jest zajęcie przez pliki VHD ponad 60GB na dedykowanym, drugim twardym dysku w laptopie. Tak u mnie, jak i w większości wirtualnych środowisk, zdecydowana większość wirtualnych dysków twardych, to dyski dynamiczne. Dysk taki ma określoną pojemność maksymalną, ale rozmiar jest stopniowo zwiększany w miarę jak zapisywane są na nim dane. Ma to zazwyczaj sens, choć powinno być świadomym wyborem, podjętym z wiedzą o konsekwencjach takich jak na przykład fragmentacja.
Jak powszechnie wiadomo, Windows kasując pliki z dysku wcale nie czyści miejsca, które zajmują. Co więcej, tworząc nowe pliki, stara się zazwyczaj omijać miejsca, w których wcześniej coś było zapisane i skasowane. Ma to wiele zalet, ale w przypadku dysków wirtualnych konsekwencje są nieuniknione: dysk, na którym dużo się dzieje będzie coraz większym plikiem. Nawet, jeżeli danych na dysku jest "tylko" 4GB, plik może mieć 30GB. Twórcy VirtualPC przewidzieli taką sytuację i z konsoli VirtualPC wybrać można File, Virtual Disk Wizard, Edit an existing virtual disk, Compact it. Funkcja ta usuwa z pliku VHD nieużywane miejsce, dzięki czemu plik robi się trochę mniejszy. Warto przy tym wiedzieć, że usuwanie polega na stworzeniu nowego pliku, przegraniu wszystkiego do nowego i skasowaniu starego. Tak więc w trakcie tej operacji, wolne miejsce na dysku się przyda.
Wszystko byłoby proste i piękne, gdyby mechanizm usuwania pustego miejsca z wirtualnych dysków potrafił naprawdę niewykorzystane miejsce rozpoznać. A nie potrafi. W efekcie, usuwa tylko te sektory, które całe zapisane są zerami. Czyli niestety nie miejsce po skasowanych plikach. Tak więc, żeby usunąć zbędne miejsce zajmowane przez skasowane pliki, należy najpierw zapisać ich sektory zerami. Tego nie robi się żadnym "wizardem", tylko wykonać należy z poziomu działającego systemu wirtualnego. Parę takich narzędzi istnieje, ale ich użycie jest zwykle na tyle karkołomne, że nie opłaca się, nawet dla kilku gigabajtów.
No ale mamy VirtualPC ServicePack 1! Jedną z nowości w nim jest narzędzie "Virtual Disk Precompactor". Zapełnia ono zerami nieużywane miejsce, dzięki czemu późniejsze użycie opcji "Compact it", jest naprawdę skuteczne.
Co ciekawe, Virtual Disk Precompactor nie jest dostępny razem z Virtual PC Additions. Aby go użyć, należy zamapować jako CD plik \Program Files\Microsoft Virtual PC\Virtual Machine Additions\Virtual Disk Precompactor.iso Dzięki temu, w napędzie CD pojawi się wirtualna płyta zawierająca trzy pliki: Autorun.inf, filler.txt i precompact.exe. Precompact.exe jest narzędziem uruchamianym z linii poleceń, ale bez parametrów po prostu wypełni zerami całe nieużywane miejsce na wszystkich wirtualnych dyskach w wirtualnym systemie. Później wystarczy wyłączyć wirtualną maszynę i uruchomić wspomniany wyżej kreator.
Na koniec warto jeszcze wspomnieć, że tak naprawdę, jako wypełniacz miejsca, wcale niekoniecznie muszą być użyte zera. Ale to już dla użytkownika zupełnie nieistotne.
Autor: Grzegorz Tworek