Steady State Disk Protection for Windows 7?

Disk Protection jest jedna z najciekawszych funkcjonalnosci pakietu Steady State. W najwiekszym skrócie, jego dzialanie polega na tym, ze stan dysku zapisywany jest w bezpiecznym (niedostepnym dla uzytkownika) miejscu i przy kazdym restarcie - odtwarzany. W efekcie, niezaleznie od tego co uzytkownik namiesza, zainstaluje albo popsuje, po restarcie systemu wszystko i tak powróci do stanu wyjsciowego. W wielu scenariuszach to bardzo kuszaca funkcjonalnosc. Problem jednak w tym, ze Steady State (niezaleznie od tego, ze i tak nie jest juz wspierany) dziala tylko w Windows XP i w Windows Vista. W Windows 7 zadzialac nie chce. Microsoft mówi, ze czesc funkcjonalnosci mozna zastapic przez mechanizmy Group Policy. Ale Disk Protection jako taki, dla Windows 7 nie istnieje. Dlatego, zainspirowany pytaniami sluchaczy sesji online na temat Steady State zaczalem kombinowac.

Ogólne zalozenie jest proste: skorzystac z faktu, ze Windows 7 moze startowac z dysku VHD i polaczyc to z dobrodziejstwami dysków róznicowych. Recznie sterowany proof of concept zadzialal zgodnie z oczekiwaniami, wiec  spróbowalem z czyms bardziej zautomatyzowanym. Teraz wyglada to mniej wiecej tak:

  • System startuje z czystego (pustego) dysku róznicowego, którego rodzic jest wzorcowym dyskiem z systemem.
  • Odpowiedni skrypt automatycznie uruchamia bcdedit tak, aby po kolejnym restarcie uruchomil sie Windows PE .
  • Uzytkownik pracuje i jak to uzytkownik - cos czasem popsuje.
  • Uzytkownik konczy prace i komputer jest restartowany.
  • Startuje Windows PE a w nim skrypt, który:
  • Uruchamia bcdedit tak, aby po restarcie wstal normalny system Windows
  • Kasuje dysk róznicowy (del)
  • Tworzy nowy dysk róznicowy (diskpart i create vdisk)
  • Restartuje komputer (wpeutil reboot)

I jestesmy w punkcie wyjscia.

Poniewaz przywrócenie wzorcowego systemu sprowadza sie do usuniecia pliku i zalozenia go od nowa, calosc operacji trwa ulamek sekundy. Nawet uwzgledniajac czas potrzebny na uruchomienie Windows PE, wszystko jest znacznie szybsze od operacji polegajacych na odtwarzaniu pelnych backupów.
Poza tym, wszystko daje sie zrobic standardowymi mechanizmami systemu Windows, bez dodatkowych czarów i dziwnych aplikacji. Jezeli ktos chce sam odtworzyc takie srodowisko, powinien miec:

  • System uruchamiany z róznicowego VHD - nalezy zainstalowac system na dysku VHD, potem zmienic nazwe pliku i utworzyc VHD róznicowy. Choc ladniej byloby zmienic nazwe w BCD, to jednak operacja na plikach jest prostsza.
  • Dual boot Windows7 / Windows PE - do zrobienia z wykorzystaniem WAIK, jednak WAIK nie musi byc zainstalowany na gotowym komputerze.
  • Kilka naprawde prostych skryptów (pod Windows PE uruchamia sie je automatycznie przez Startnet.cmd )

I dziala!

Jako samodzielne cwiczenie polecam utworzenie skryptu, który tymczasowo podlacza oryginalny dysk VHD. Bedzie to uzyteczne w sytuacji, gdy administrator zechce zainstalowac poprawki. W takiej sytuacji, automatyczne przywrócenie stanu sprzed zmian moze byc nie miec sensu.

Warto zastanowic sie, czy wirtualny dysk-wzorzec powinien byc dynamiczny czy statyczny. W przypadku dysku dynamicznego, system i tak "udaje", ze jest on statyczny, aby zagwarantowac, ze nie zabraknie mu miejsca. Jezeli w czasie startu systemu taka rezerwacja sie nie uda, to system wyswietli BSOD o kodzie 0x136. Warto wtedy wiedziec w czym problem, poniewaz w dokumentacji dosc trudno o takim bledzie znalezc choc slowo.

Autor: Grzegorz Tworek [MVP]