Instalacja Windows z poziomu Linuksa

Data: 2018-04-10, autor: Michał Misztal

Klonując ostatnio dysk z Windowsem zadałem sobie pytanie czy jest możliwa instalacja Windowsa z poziomu Linuksa. Postanowiłem więc przeprowadzić mały eksperyment.

Instalacja możliwa jest przez zaaplikowanie obrazu wim dla partycji. Partycja musi być sformatowana jako ntfs. Zaaplikowanie obrazu systemu nie sprawi, że system się uruchomi (że co?). A no tak Microsoft lubi komplikować proste rzeczy i jego sposób uruchamiania jest odrobinę przekombinowany (o tym trochę niżej).

Przedstawię tutaj sposób instalacji w dwóch fazach - gdy kasujemy wszystkie partycje i gdy tego nie robimy.

Gdy kasujemy cały dysk albo przenosimy dane z jednego dysku na drugi to ingerujemy w układ partycji. Zasada jest taka - nowy system musi zastać takie same warunki jak stary system. Tzn. jeśli pierwszą partycją była mini partycja (ok 100MB) a na drugiej stał system to na drugim dysku też musi istnieć taki sam układ. Tego typu dane + GUID maszyny zapisany jest w Boot/BCD i ten plik jest solą w oku sysadminów na całym świecie. Jest to plik nieprzenośny. Aktualizacja pliku BCD jest możliwa windowsowym poleceniem bcdedit. Na Linuksa na razie brak narzędzi. Gdy system był zainstalowany na pierwszej partycji a katalog Boot był w root dysku to tak ma być na drugim dysku.

Należy zrobić sobie kopię plików z mini partycji - folder Boot + pliki bootmgr i BOOTSECT.BAK gdyż one nie zostaną skopiowane. Do tego kopia sektora rozruchowego

[root@komputer]# dd if=dysk of=bootloader.bin bs=446 count=1

Ok, mamy teraz wszystko. Tworzymy (lub nie) mini partycję odzyskiwania i partycję na system. Pierwsza partycja ma mieć flagę boot (wszystko można sobie wyklikać ładnie w GParted). Odtwarzamy kopię bootsektora, przykładowo dla dysku sda

[root@komputer]# dd if=bootloader.bin of=/dev/sda bs=446 count=1

Odtwarzamy przygotowaną wcześniej kopię plików. Teraz potrzebny nam będzie plik install.wim. Znajduje się w katalogu sources/install.wim na nośniku z systemem. Kolejna rzecz jaka będzie potrzebna to program wimlib-imagex. Dostępny jest w każdej dystrybucji. W Archu jako wimlib, w GParted jako wimtools. Dla wygody obraz z wimem sobie montujemy i sprawdzamy jakie wersje systemu mamy do wyboru poleceniem

[user@komputer ~]$ wimlib-imagex info "ścieżka do install.wim"

Powinno się pokazać coś takiego

Szukamy pożądanej wersji systemu i zapamiętujemy jego indeks. Tutaj mamy Home Premium o indeksie 2. Przykładowo główną partycją systemową jest /dev/sda2 to aplikujemy obraz komendą

[root@komputer]# wimlib-imagex apply "ścieżka do install.wim" 2 /dev/sda2

Instalacja się rozpocznie (u mnie akurat waliłem na sdc).

No i na tą chwilę to wszystko. Teraz wystarczy tylko zbootować się do Windowsa i dokończyć instalację.

OK, może nie do końca wszystko. Fajnie byłoby gdyby instalacja sama się zakończyła przedstawiając gotowy pulpit. Jest to tzw instalacja nienadzorowana. Aby taką instalację przeprowadzić potrzebny jest plik odpowiedzi. Oczywiście taki plik odpowiedzi można przygotować według prawideł Microsoftu (narzędzia WAIK + ADK + mozolne brnięcie przez nieintuicyjny interfejs i musicie wyedytować każdy obraz oddzielnie, co dla jednego pliku install.wim może oznaczać nawet kilka lub kilkanaście niepotrzebnych operacji) ale czasu nikt nie zwróci więc nie będziemy się w tym babrać. Wystarczy skorzystać ze strony która taki plik wygeneruje. Oczywiście to nie tak, że wrzucimy plik do roota i całość ruszy. Tutaj każdy pisze inaczej, ale sprawdzona przeze mnie wersja to ta z plikem odpowiedzi jako Windows\Panther\Unattend\unattend.xml. Czyli trzeba zamontować partycję z nowym systemem i tak ten plik wrzucić.

A teraz najważniejsze pytanie - "dlaczego nie można od A do Z zainstalować systemu z poziomu Linuksa". Microsoft wymyślił swój własny sposób bootowania. Miał być (chyba?) odpowiedzią na cuda jakie potrafi GRUB czy Syslinux ale coś nie wyszło (na forach pełno choćby żalów na instalację via TFTF przez WDS, gdyby tylko przeczytali to i to). Zawartość BCD każdy może sobie obczaić podglądając go w edytorze rejestru (tak to gałąź tego paskudnego tworu), a znajduje się w HKLM. Nie ma linuksowych narzędzi aby automtycznie przystosować ten plik do aktualnej konfiguracji maszyny więc pełnej instalacji raczej nie będzie. Niemniej jeszcze powalczę.

Dlaczego instalacja Windows z poziomu Linuksa była by fajna? Po pierwsze - nie jesteśmy przywiązani do konkretnej maszyny. System można zainstalować i dopiero włożyć dysk do komputera. Oszczędność czasu - można przygotować kilka gotowych pustych dysków by w razie potrzebny je zamontować. Do tego można opracować skrypt który automatycznie wrzuci potrzebne programy czy sterowniki. Bezproblemowość - czasem instalując z PXE zdarzało mi się, że środowisko Windows PE nie posiadało sterowników do karty sieciowej i klops. Do tego możliwość instalacji po WiFi (no może zbyt optymistycznie bo pobieranie kilku GB po WiFi to niezbyt przyjemna rzecz ale gdy potrzeba). No i wreszcie wszystkie narzędzia były by w jednym miejscu.

No i na koniec drobna uwaga - powyższy opis dotyczy systemu partycji mbr. Z GPT nie testowałem ale zakładam, że aplikacja obrazu będzie wyglądać identycznie. Motyw z backupem plików systemowych będzie inny. No i robicie na własną odpowiedzialność, żeby nie było "robiłem według opisu i teraz jest w Bejrucie i nie wiem jak do domu".

Komentarze (2)

[2018-04-10 21:03:00] Szach i Ajatollah pisze: Bliski Fzhut
Jechałem po opisie i jestem w Teheranie. Wiem jak do domu, ale chyba zostanę.
[2018-04-11 07:15:59] csk(admin) pisze: Re: Bliski Fzhut
Byle dalej od brzóz. Ty wiesz co się w kraju działo...

Skomentuj lub zgłoś błąd

© Michał Misztal 2018