Virtual Disk Precompactor

VirtualPC zdecydowanie próbuje sie rozpychac w tym blogu... ale cóz mozna na to poradzic, skoro to jedno z najwazniejszych narzedzi w mojej pracy. Od eksperymentów, poprzez madre i mniej madre zabawy az po rozwiazywanie faktycznych problemów klientów. Przykladowo, ostatnio zdarzylo sie, ze klient uzywal aplikacji ASP.NET korzystajacych z dzialajacego w domenie serwera SQL ale zainstalowanego na lokalnym koncie uzytkownika. Ot jedno z dziesiatek srodowisk, które odwiedzam. U klienta na zywo nie zawsze da sie poeksperymentowac, a zasymulowanie tego na VirtualPC zajelo mi znacznie mniej czasu niz sam dojazd na drugi koniec Polski. Pomijam juz to, ze mam undo, calosc moge zepsuc i postawic od nowa w krótkim czasie a restarty SQLa nie wiaza sie z rozgrzaniem telefonu administratora do czerwonosci. Gotowe rozwiazanie mozna przedstawic klientowi, który nie dosc, ze sie ucieszy z usuniecia problemu, to jeszcze pokiwa glowa jaki ten konsultant madry, ze tak skutecznie doradzil.
Ubocznym efektem wielkiej milosci do VirtualPC jest zajecie przez pliki VHD ponad 60GB na dedykowanym, drugim twardym dysku w laptopie. Tak u mnie, jak i w wiekszosci wirtualnych srodowisk, zdecydowana wiekszosc wirtualnych dysków twardych, to dyski dynamiczne. Dysk taki ma okreslona pojemnosc maksymalna, ale rozmiar jest stopniowo zwiekszany w miare jak zapisywane sa na nim dane. Ma to zazwyczaj sens, choc powinno byc swiadomym wyborem, podjetym z wiedza o konsekwencjach takich jak na przyklad fragmentacja.
Jak powszechnie wiadomo, Windows kasujac pliki z dysku wcale nie czysci miejsca, które zajmuja. Co wiecej, tworzac nowe pliki, stara sie zazwyczaj omijac miejsca, w których wczesniej cos bylo zapisane i skasowane. Ma to wiele zalet, ale w przypadku dysków wirtualnych konsekwencje sa nieuniknione: dysk, na którym duzo sie dzieje bedzie coraz wiekszym plikiem. Nawet, jezeli danych na dysku jest "tylko" 4GB, plik moze miec 30GB. Twórcy VirtualPC przewidzieli taka sytuacje i z konsoli VirtualPC wybrac mozna File, Virtual Disk Wizard, Edit an existing virtual disk, Compact it. Funkcja ta usuwa z pliku VHD nieuzywane miejsce, dzieki czemu plik robi sie troche mniejszy. Warto przy tym wiedziec, ze usuwanie polega na stworzeniu nowego pliku, przegraniu wszystkiego do nowego i skasowaniu starego. Tak wiec w trakcie tej operacji, wolne miejsce na dysku sie przyda.
Wszystko byloby proste i piekne, gdyby mechanizm usuwania pustego miejsca z wirtualnych dysków potrafil naprawde niewykorzystane miejsce rozpoznac. A nie potrafi. W efekcie, usuwa tylko te sektory, które cale zapisane sa zerami. Czyli niestety nie miejsce po skasowanych plikach. Tak wiec, zeby usunac zbedne miejsce zajmowane przez skasowane pliki, nalezy najpierw zapisac ich sektory zerami. Tego nie robi sie zadnym "wizardem", tylko wykonac nalezy z poziomu dzialajacego systemu wirtualnego. Pare takich narzedzi istnieje, ale ich uzycie jest zwykle na tyle karkolomne, ze nie oplaca sie, nawet dla kilku gigabajtów.
No ale mamy VirtualPC ServicePack 1! Jedna z nowosci w nim jest narzedzie "Virtual Disk Precompactor". Zapelnia ono zerami nieuzywane miejsce, dzieki czemu pózniejsze uzycie opcji "Compact it", jest naprawde skuteczne.
Co ciekawe, Virtual Disk Precompactor nie jest dostepny razem z Virtual PC Additions. Aby go uzyc, nalezy zamapowac jako CD plik \Program Files\Microsoft Virtual PC\Virtual Machine Additions\Virtual Disk Precompactor.iso Dzieki temu, w napedzie CD pojawi sie wirtualna plyta zawierajaca trzy pliki: Autorun.inf, filler.txt i precompact.exe. Precompact.exe jest narzedziem uruchamianym z linii polecen, ale bez parametrów po prostu wypelni zerami cale nieuzywane miejsce na wszystkich wirtualnych dyskach w wirtualnym systemie. Pózniej wystarczy wylaczyc wirtualna maszyne i uruchomic wspomniany wyzej kreator.
Na koniec warto jeszcze wspomniec, ze tak naprawde, jako wypelniacz miejsca, wcale niekoniecznie musza byc uzyte zera. Ale to juz dla uzytkownika zupelnie nieistotne.

Autor: Grzegorz Tworek