Eida.cz - Bootování Windows z USB pořád dokola

Bootování Windows z USB pořád dokola

Eida

Venku je horko, nejistota, paranoia a teoretická beznaděj a ještě ke všemu žijeme už dávno v post-PC době všech těch moderních EFIček a nagelovaných osmiček, takže když znenadání služební dodávkou přijede divoký čiperník s tím, že má jeho žena zničený starý notebook a jde po něm kvůli tomu policie, udělat božsky čistou repliku už najednou není žádná legrace, podobně jako zkoušet znovu ručně nastavovat všechna IRQ na 386ce.

Když optické mechaniky už vymřely a prostě nejsou, případně prostě z principu nefungují, je dalším logickým krokem zkoušení USB a příprava bootovacího flashdisku se sedmičkovým instalátorem. Jenže, hehe, najednou ani tohle už nikdo zas neumí udělat. Dalo by se polemizovat, ze kterého konce je nejvhodnější začít, ale nějak neexistuje žádný plně optimální systém pro takovou přímočarou přípravu. Samozřejmě třeba dd, přímá bitová kopie DVDčka/ISO obrazu na flasku je naivně úplně jasná věc. Bohužel se ale může stát, že několikero BIOSů nemusí být úplně spokojeno s médiem a jeho prezentováním se jako CDčko, takže se stejně nic zázračného nestane. A udělat to ručně… To jako když tu byl během jara Zdenda a taky si nevěděl rady.

Aby bylo možné instalační DVDčko z ne-DVDčkového média vůbec přímo nastartovat, musí být zařízení formátované jako MBR s NTFS oddílem. Z nějakých podivných důvodů ale najednou není žádný přímočarý nástroj, který by uměl s NTFS jako takovým pracovat, případně sám vytvořil odpovídající dodatečné FATkové rutiny, takže třeba flashky vyrobené v Boot Camp Assistantu 5.1.2 a novějších, nebo třeba z UNetbootinu, nechtějí a vlastně ani nemohou pracovat.

V normální rodině funguje MBR tak, že je jeho zavaděč vyvolán BIOSem na adrese 0x7c00 (a registr DL nese číslo daného zařízení) a je zkrátka spuštěn. Obyčejně se pak nějakým vzdáleným skokem přemístí z 0x7c00 někam do pryč (typicky o něco dopředu, 0x0000:0x0600) a začne na 0x1be, 0x1ce, 0x1de a 0x1ee chrlit a zjišťovat, které diskové oddíly na jeho zařízení jsou označeny jako aktivní (testuje se jim flag asi na 0x80). Stejně případně vybere jen ten první nalezený. Magie volání BIOSu INT 13h pak nařídí načtení bootsektoru vybraného oddílu a uloží jeho začátek do DS:SI. Když se to povede, s celkově nezměněným DL a nově CS nastaveným na nulu se skočí zpět na 0x7c00, kde je už očekáván aktivní bootsektor, kterému se předává řizení a je v tu chvíli vymalováno. Tady je krásně vidět, proč to tedy nemůže fungovat s běžnou FATkou bez úprav. Bootsektor NTFS oddílu má svoji popisnou rutinu pro ntldr uloženou přibližně na offsetu 0x54 a při něm pak z 0x0b-0x53, což jsou BPB a Extended BPB (popisky fyzické struktury oddílu pro BIOS), si přečte aktuální polohu MFT. Kromě toho, že se díky tomuhle mechanismu dá s MFT volně pohybovat a činit ji tak chráněnou proti poškození, to taky umožňuje předat řízení už přímo kódu konkrétních startovacích souborů na souborovém systému tohoto oddílu. Bezva.

Uvědomit si tenhle triviální základ otevírá hypotézu kompletní nezávislosti výchozího systému, na němž by se měla bootovací flashka připravovat. Důležité je vytvořit na ní především správnou strukturu MBR a pak už jde vše samo. Nejlepší je zbavit se pro jistotu hned na začátku stávajících zbytků MBRka třeba přes dd if=/dev/zero of=/dev/rdiskX bs=512 count=1, kde X je číslo připojené flashky a krom grafické diskové utility se dá zjistit pomocí diskutil list a zrovna všechny aktuálně připojené oddíly odmountovat (použití /dev/rdsik# namísto /dev/disk# tady zrovna v tomhle případě není podmínkou, ale varianta s r umožňuje low-level sekvenční přístup k blokovým zařízením, který je velmi vhodný právě třeba pro kopie ISO obrazů, kdežto /dev/disk# jsou bufferované varianty pro random-access poskytované BSD). 

FDisk, původní velitel standardu MBR, v BSD variantě inicializuje tabulku fdisk -i /dev/rdiskX, nebo ji udělá sám v interaktivním režimu fdisk -e /dev/rdiskX, kde p slouží pro výpis aktuální tabulky a pokud bylo vše smazané, dá se prostě použít auto dos, bude vytvořena ta první a stačí ji jen označit jako aktivní nějakým f 1, změny se následně uloží pomocí w a OS X by měl v tu chvíli už graficky zahlásit, že nerozpoznal disk a co má jako dělat. A to lze s úspěchem ignorovat a přikročit ke druhé části, vytvoření NTFS na novém /dev/rdiskXs1 pomocí NTFS-3G poskytujícího mkfs.ntfs -Q -L WIN7_INSTALL -c 4096 /dev/diskXs1. Na Linuxu bude postup dost podobný, jen je při ručním dělení potřeba ohlídat, aby byl nový oddíl zarovnaný na 4096.

Na běžících Windows to funguje naštěstí dost obdobně, stačí nahodit příkazový řádek jako správce a spustit program diskpart, který pak zobrazí všechny jednotky v list disk a flashka se vybere odpovídajícím číslem select disk X. Pomocí clean se její obsah dá zcela zrušit, nová tabulka se vytvoří pomocí convert mbr a oddíl rovnou jako create partition primary align=4096, přičemž se hned označí pomocí active jako startovatelný a souborový systém jakbysmet, totiž format fs=NTFS label=“WIN7_INSTALL” quick override a je hotovo. Připojení jednotky zpět provede příkaz assign a program se může ukončit.

Poslední část přípravy spočívá už jen v překopírování obsahu původního instalačního média, ať už DVD nebo obsahu ISO obrazu, na tento oddíl. Ačkoliv to není ve všech případech nezbytné, může pomoci po dokončení ještě z adresáře sources vymazat soubor ei.cfg, který může v některých obrazech blokovat výslednou instalaci. Pak už by měl cílový počítač instalátor Windows z USB disku nastartovat úplně normálně a vše by mělo být krásné a radostné. Všechno koneckonců tkví v přípravách a opakování je, zdá se, zcela zásadní pro úspěch a nezapomínání.

Tento článek přečetlo již 399 čtenářů (0 dnes).

Komentáře

Nový komentář