ALTE DOCUMENTE
|
|||||||||
Typickým příkladem, kde vyuzít znalost vytvoření bootovacího CD s Windows 2000 je vytvoření nového bootovacího (a tím pádem instalačního) CD s novým service packem. Service packy pro Windows 2000 narozdíl od předchozích NT systémů (typicky NT4) umozňují aplikaci na instalační sadu. Takto aktualizovaná instalační sada má tu výhodu, ze pokud z ní nainstalujete Windows 2000, bude jiz instalace obsahovat onen service pack, který byl na instalační sadu aplikován. Zkrátka a stručně: Nainstalujete si z CDčka Windows 2000 a uz tam bude např. Service Pack 2.
Pokud budete chtít aplikovat na instalačku Win2000 např. SP2, musíte vsechny soubory z CD zkopírovat na disk a potom určitým způsobem aplikovat SP. Pak musíte vsechny soubory vypálit na nové CD. A kdyz to provedete bězným způsobem, nebudete moci instalovat Windows přímým nabootováním z CD - protoze CD nebude bootovací. Jak tento problém vyřesit, to se vám pokusím v následujících odstavcích popsat.
U Win9x (přesněji řečeno Windows 98 a Windows Millennium Edition) je bootovací část udělána větsině z vás známou emulací bootovací diskety. Vytvoření takto bootvacího CD je poměrně jednoduché - vytvoříte bootovací (systémovou) disketu, z té pak uděláte image a tento image předhodíte vypalovacímu programu jako image pro bootovací část CD (nebo mu předhodíte jen disketu a on si image z diskety udělá sám). Takové CD pak funguje tak, ze z něj nabootujete a ono se tváří jako disketa A:. A na té disketě by měly být ovladače pro CD-ROM mechaniky, jinak se na zbytek CD prakticky nedostanete. Původní disketová mechanika A: se pak tváří jako B:.
V případě systému, zalozeného na WinNT (tedy Windows NT4, Windows 2000 a Windows XP) je bootovací část udělaná bez emulace. To znamená, ze po nabootování jsou přístupné vsechny soubory na CD stejně tak, jako kdyz se na obsah CD podíváte v jiz nainstalovaném operačním systému. Rozdíl je také v bootovací image. Zatímco v případě Win9x dáváte vypalovacímu softwaru disketu (nebo její image), v případě WinNT/2K/XP dáváte vypalovacímu softwaru jeden bootovací sektor. A jen tak pro zajímavost - image bootovací diskety má zpravidla velikost 1 474 560 bajtů, image bootovacího sektoru pro NTčka má velikost 2 048 bajtů - tedy přesně 2 kila.
Jestlize víte, jak vytvořit bootovací CD pomocí emulace diskety, pak vás asi bude zajímat, jak je to s těmi NT-based systémy. Kde tedy vzít image bootovacího sektoru a co kde a jak nastavit, aby to fungovalo. Předně vás upozorňuji, ze ten image si budete muset sehnat sami. Ovsem povím vám odkud a jak ho vydloubnout. A abych uz zbytečně neplýtval slovy, zkusím udělat tento návod asi jako kuchařku.
Stručný důvod, proč je potřeba CDRWin: Je to jeden z mála programů, který umí při vytváření image nepřidávat k názvům souborů čísla verze formátu ISO9660 - o co jde, dozvíte se později.
Bootovací sektor získáte z originálního CD následujícím způsobem:
Pokud vse proběhne v pořádku, CDRWin zobrazí průběh načítání CD a skončí s oznámením Operation Successfully Completed !. Pak můzete CDRWin zavřít (zatím ho nebudete potřebovat). Můzete také vyndat z mechaniky to originální CD (to uz nebudete vůbec potřebovat - ovsem pokud z něj nechcete vzít soubory pro budoucí bootovací CD).
Pokročilejsím uzivatelům místo celé této řady kroků stačilo říci jen Udělejte z CD na pevný disk CUE/BIN nebo prostě jen Zgrabněte CDRWinem CD.
Pokud proběhlo vse v pořádku, meli byste mít v tuto chvíli na disku ten bootovací sektor, o který nám celou dobu v tomto odstavci slo. Dle výse pouzitého příkladu byste tedy měli mít na disku C: soubor boot.img, který by měl mít velikost 2 048 bajtů. Od této chvíle jiz nebudete CDmage potřebovat, takze ho můzete bez obav zavřít ;-). Stejně tak můzete smazat stazený obraz CD a uvolnit tím místo na disku.
Pro pokročilejsí uzivatele: Tento bootovací sektor je mozné získat i jinak - bez nutnosti ukládat celé CD na disk. Ovsem musíte mít buďto program, který toto dokáze, anebo vědět, který sektor na CD je ten bootovací - a jednoduse ho např. CDRWinem vyextrahovat.
Na zádosti některých čtenářů zveřejňuji zatím nejjednodussí postup, jak vyextrahovat Bootovací sektor z CDčka:
Vidíte, jak jednoduse to také jde. Kdybych pouzíval IsoBuster dříve, mohl jsem to zakomponovat do tohoto článku napoprvé. Opravdu nikdo není dokonalý :-). Předchozí návod na extrakci bootovacího sektoru samozřejmě funguje také, ale je o poznání slozitějsí (a časově náročnějsí - a navíc vyzaduje vyextrahovat celé CD - ovsem proč extrahovat celé CD, kdyz potřebujeme jeden sektor, ze :-) ).
Nyní, kdyz uz máte ten správný bootovací sektor, je velice jednoduché pouzít jej pro vytvoření bootovacího CD. Opět pouzijte CDRWin.
V tuto chíli by mělo být vse připraveno k vypálení. Nezbývá tedy, nez vlozit do vypalovačky prázdné CD a stisknout v CDRWinu START. CDRWin by měl oznámit něco jako kolik souborů budete vypalovat, kolik adresářů a tak podobně. Po stisku tlačítka Continue se začne vytvářet image CD nebo se začne rovnou vypalovat na CD (to závisí na tom, co jste vybrali v kolonce Backup/Tool Operation). Kazdopádně by pálení mělo skončit s oznámením Operation Successfully Completed.
Pokud se na CD podíváte např. průzkumníkem, měli byste vidět přímo v kořeni CD zejména slozku I386. A pokud v ní kromě spousty dalsích souborů uvidíte také SETUPLDR.BIN, měli byste mít vyhráno. A jestli máte skutečně vyhráno - to poznáte, az se pokusíte z CD nabootovat.
Tato část je jiz jen technickým popisem vlastního startu počítače z CD a také vysvětlením čísel, které bylo třeba zadat v předchozích odstavcích v programu CDRWIN. Předpokládá se čtenářova znalost rozdělení disků a architektury procesorů Intel x86 - adresování paměti v reálném módu (segmentování).
Nejprve si popíseme "klasický" boot počítače:
Poté, co zapnete počítač, předá procesor, který se v tu chvíli nachází v reálném módu, řízení na adresu 0F000h:0FFF0h, kde začíná inicializační kód BIOSu. Poté, co BIOS inicializuje vsechna zařízení v počítači (dnes hlavně Plug and Play karty, či zařízení integrovaná na základní desce), načte první sektor pevného disku (sektor má v lineárním adresování sektorů číslo 0) do paměti na adresu 07C0h:0000h. Do registru DL ulozí BIOS číslo pevného disku, ze kterého sektor pochází (tato hodnota je obvykle 80h - první disk v systému, proto ji mnoho programátorů ignoruje a v zavaděčích hlavního sektoru disku - MBR - raději pouzívá hodnotu bytu, určujícího bootovatelný oddíl, která je také 80h; vyuzití číslo, předané v registru DL, ale přesto má, ale o tom az dále). Kód, obsazený v tomto sektoru, se nejdříve sám přesune na adresu 0600h:0000h (platí pro standardní bootovací kód MS-DOSu a Windows jakékoli řady), načez se pokusí vyhledat aktivní diskový oddíl. Pokud zádný takový oddíl neexistuje, dojde k vyvolání přerusení INT 18h, kdy se vrací řízení zpět BIOSu, na kterém dále závisí, co se stane. Pokud dojde k nalezení aktivního oddílu, načte se jeho první sektor opět na adresu 07C0h:0000h a do registru DL by měla být umístěna taková hodnota, jaká byla ve chvíli, kdy byl volán MBR sektor BIOSem. (Jak jsme si ale řekli, mnoho zaváděcích sektorů umisťuje do registru DL automaticky hodnotu 80h, tedy první disk v systému.) Následuje předání řízení do paměti na adresu 07C0h:0000h. Dalsí činnost závisí jiz na načteném zavaděči, protoze pro kazdý souborový systém (a mnohdy i pro různé verze operačního systému) se zavaděč z prvního sektoru diskového oddílu lisí.
Nyní se podíváme na to, jak pracuje bootovací proces CD s Windows 2000:
Činnost BIOSu po zapnutí počítače je téměř shodná s předchozím případem, az na to, ze nenačítá první sektor z pevného disku, ale speciálně vymezený počet sektorů z CD. (Dnesní BIOSy mají vestavěnou podporu ATAPI CD-ROM mechanik, a proto mohou i bez načítání speciálních ovladačů bootovat přímo z CD.)
Načtení bootovacího sektoru z CD je slozitějsí, nez načtení hlavního zaváděcího sektoru z pevného disku. Na CD totiz není bootovací sektor ulozen hned v prvním sektoru, jeho umístění určují Volume Descriptory. BIOS tedy nejdříve musí tyto volume descriptory načíst a nalézt v nich konkrétní číslo sektoru, který má načíst. Volume Descriptory začínají na CD od sektoru 16 (připomínám, ze na datovém CD mají sektory velikost 2 048 bajtů).
Kdyz BIOS zjistí, v jakém sektoru je ulozen bootovací kód, musí také zjistit velikost tohoto kódu a typ emulace. Velikost kódu se počítá v násobcích 512 (jde o násobky standardní velikosti sektoru pevného disku), a proto tedy pokud má bootovací kód velikost 2 048 bajtů, je nutné při vytváření naseho bootovatelného CD zvolit jako velikost kódu 4 sektory. Dále je třeba zjistit číslo segmentu, kam se má bootovací kód načíst. V nasem případě se načítá na standardní adresu 07C0h:0000h, tedy na segment 07C0h. Na typu emulace závisí, jak se bude disk v systému chovat. Existuje několik druhů emulace - emulace disket (v tomto rezimu se po nabootování chová bootovací image jako první disketová jednotka v systému a původní disketová jednotka jako druhá disketová jednotka; podporovány jsou obrazy disket velikosti 1,2MB, 1,44MB a 2,88MB), emulace pevného disku (v tomto případě se po nabootování chová obraz pevného disku, který je vypálený na CD, jako první pevný disk v systému a dalsí disky jsou posunuty jako při bootování s emulací disketové jednotky) a rezim, kdy nedochází k emulaci CD (pro bootovací kód se CD chová jako pevný disk, který má velikost sektoru 2 048 bajtů, zvlástní adresářové struktury a nemá hlavní zaváděcí záznam ani tabulku rozdělení disku). Právě poslední rezim (bez emulace) vyuzívá ke své funkci bootovací kód CD Windows 2000.
Kdyz tedy BIOS načte tento kód do paměti, do registru DL umístí číslo, pomocí kterého poté bootovací kód přistupuje k CD jako k pevnému disku, dojde k předání řízení na adresu 07C0h:0000h, tedy na první byte kódu pro obsluhu bootu z CD. (Zde jiz k vyuzití předávaného čísla disku dochází, narozdíl od výse uvedeného případu bootování z disku pevného.)
Nez přistoupím k popisu činnosti bootovacího kódu CD Windows 2000, dovolím si poznámku k názvům adresářů a souborů na CD: v adresářových strukturách mají být podle standardu ISO9660 (standard pro organizaci dat na CD) jako součást názvu souborů i adresářů přípony ";1", které vsak jsou softwarově odstraněny, takze je nikdy v zádném operačním systému neuvidíte. Číslo, které je za znakem středník (v tomto případě je to jednička) určuje číslo verze standardu ISO9660, podle které je CD vytvořeno. Tyto přípony ale na bootovatelném CD Windows 2000 (zřejmě kvůli délce bootovacího kódu) být nesmějí. To je důvod, proč bylo nutné v CDRWinu zvolit volbu Disable version numbers, která se postará o nepřidávání těchto přípon. A také je to důvod, proč například v Neru bootovatelné CD Windows 2000 nevytvoříte - v Neru prostě přidávání těchto přípon zakázat nejde.
Bootovací kód provede následující činnosti přesně v tomto pořadí: zkontroluje, byl li načten celý tento sektor (kontrolou posledních dvou bytů). Pokud bylo CD vypáleno se spatným počtem bootovacích sektorů, nastaví se speciální byte oznamující číslo chyby na specifickou hodnotu a tato chyba se oznámí uzivateli. Pokud byl bootovací kód načten kompletně do paměti, dojde k vyhledání kořenového adresáře na disku a zjistění, je-li v něm slozka I386. Ve slozce I386 poté dojde k vyhledání souboru BOOTFIX.BIN a jeho načtení do paměti. Následně dojde k předání řízení na adresu, na kterou byl BOOTFIX.BIN načten a dojde k vypsání hlásení, ze pro boot z CD je nutné stisknout klávesu. Takto je osetřena například automatická instalace, není tedy nutné v BIOSu měnit pořadí disků, ze kterých se bootuje. Pokud uzivatel do tří sekund nezmáčkne zádnou klávesu, dojde k načtení prvního sektoru prvního pevného disku (číslo 80h) a předání řízení (o tom, co se bude dít dále, je psáno výse). Zmáčkne-li uzivatel jakoukoli klávesu, vrátí BOOTFIX.BIN řízení zpět bootovacímu kódu a ten vyhledá ve slozce I386 soubor SETUPLDR.BIN. Kdyz ho najde, načte ho do paměti na adresu 2000h:0000h, do registru DL umístí číslo disku, ze kterého se bootuje (např. 81h, pokud je v systému jen jeden pevný disk a jedna CD-ROM mechanika) a předá řízení na adresu 2000h:0000h.
Pokud není adresář I386 nebo jeden ze souborů BOOTFIX.BIN či SETUPLDR.BIN přítomen, dojde opět k nastavení specifického byte v sektoru a oznámení čísla chyby uzivateli.
Poznámka od WIFTa: Jak mi Zajdee jestě před uzávěrkou oznámil - soubor BOOTFIX.BIN být na CD nemusí - obejde se to bez něj. Pokud nebude nalezen, přejde se rovnou k SETUPLDR.BIN. A takhle vlastně bootuje CD s NT4. A pokud si na CD s Windows NT4 ten BOOTFIX.BIN přidáte a pouzijete bootovací sektor z Windows 2000, bude i nové bootovací CD s WinNT4 po startu chtít stisk klávesy.
Předáním řízení na adresu 2000h:0000h končí úloha bootovacího kódu, o dalsí činnost (kterou je načtení souborů SETUPREG.HIV, TXTSETUP.SIF a ovladačů a následně vlastní start instalace - coz uz je vlastně jádro Windows 2000 spolu se základními ovladači a speciálním subsystémem - ale o tom by se dalo napsat mnoho dalsích stránek textu) se uz stará SETUPLDR.BIN.
Na závěr jen dodám, ze jsem tento postup úspěsně prakticky aplikoval na tyto systémy:
A pokud jste to dočetli az sem, mám pro vás bonus v podobě krátkého postupu, jak aplikovat ServicePack na instalačku Windows 2000:
Výhoda je jasná - instalace Windows 2000 bude obsahovat přímo integrovaný ServicePack2. Nevýhoda (dá-li se to tak vůbec nazvat) je v tom, ze nebudete moci z takovýchto Windows ServicePack odinstalovat. Ale myslím, ze to nevadí :-).
Tak hodně stěstí ;-)
|