Bezpečnosť > Ze života
Jak jsem bootoval
aneb co užitečného se dá najít na instalačním CD Windows Vista
V dalším článku z volné série "ze života" se dozvíte, co se může stát, když potřebujete sloučit dva diskové oddíly a nedáte si dostatečně dobrý pozor... Před několika týdny jsem instaloval 64 bitovou verzi operačního systému Windows Vista (edice Home Basic, ale to je nepodstatné) do virtuálního počítače (používám VirtualBox). Jak všichni víte, Windows Vista patří mezi ty "žravější" systémy. Po čisté instalaci ještě tolik místa nezabírají. To se změní až při následné instalaci nejrůznějších aktualizací, kterých bylo vzhledem ke stáří tohoto systému vydáno již mnoho. I přesto postačí virtuální pevný disk o velikosti 20 GB.
Problém
Soubor virtuálního pevného disku je však třeba někam uložit, což byl můj problém. Můj notebook disponuje pevným diskem o kapacitě 120 GB, jehož části byly jednotlivým písmenům diskových jednotek přiřazeny způsobem znázorněným v tabulce 1.
Písmeno |
Velikost |
Volné místo |
Název |
C |
20 GB |
2 GB |
Windows XP |
D |
16 GB |
5 GB |
windows 7 |
F |
30 GB |
4 GB |
DATA |
G |
40 GB |
5 GB |
Windows Vista |
H |
10 GB |
2 GB (EXT3) |
Ubuntu |
Tabulka 1: Přiřazení písmen jednotlivým diskovým oddílům
Z tabulky je patrné, že pro uložení souboru virtuálního pevného disku byly nejvhodnější oddíly s Ubuntu a Windows 7. Virtuální počítač byl pro mě v danou chvíli důležitější než mít čtyři operační systémy na jednom stroji, tudíž jsem byl ochoten tyto oddíly obětovat. Bohužel, soubor virtuálního pevného disku při instalaci aktualizací narůstal a narůstal, až jeho velikost přesáhla 16 GB a nevešel se ani na větší s obou oddílů. Bylo nutné nějaké místo urychleně vytvořit. Jedinou možnost jsem viděl ve sloučení výše zmíměných oddílů, čímž by vznikl prostor o kapacitě 26 GB, který už snad bude dostačovat.
Slučování oddílů
Podíval jsem se tedy do Správce disků, abych se dozvěděl, jak jsou oddíly rozloženy na fyzickém zařízení pevného disku. Potěšující zpráva byla, že oddíly s Windows 7 a Ubuntu se nacházely těsně za sebou, díky čemuž bylo samotné sloučení možné. Správce disků mě akorát nemile překvapil tím, že je odmítal sloučit. Rozhodl jsem se použít těžší kalibr v podobě programu gparted, který je obsažen na instalačním CDčku linuxové distribuce Ubuntu.
Z informací, které zobrazil gparted a které vidíte v tabulce 2, jsem okamžitě pochopil, proč Správce disků nechtěl oddíly sloučit, což od něho bylo správné. Oddíl s Ubuntu byl primární, ale oddíl s Windows 7 logický. Logický oddíl je fyzický reprezentován tak, že je vložen do primárního oddílu typu Extended. Protože primární oddíl typu Extended může obsahovat v podstatě nekonečné množství logických oddílů, padá tím omezení na maximální počet částí, na které je možné podle schématu MBR pevný disk rozdělit.
Typ oddílu |
Velikost |
Název |
Primární |
20 GB |
Windows XP |
Primární |
40 GB |
Windows Vista |
Primární |
10 GB |
Ubuntu |
Primární (Extended) |
46 GB |
Obsahuje logické oddíly "Windows 7" a "DATA" |
Logický |
16 GB |
Windows 7 |
Logický |
30 GB |
DATA |
Tabulka 2:Fyzická struktura oddílů
Sloučení dvou oddílů, ač jeden z nich byl primární a jeden logický, nevypadalo příliš složitě. Prostě zruším primární oddíl, čímž vznikne před logickým oddílem (a tedy i primárním oddílem typu Extended) volné místo. Potom posunu začátek oddílu Extended tam, kde začínal právě odstraněný primární oddíl s Ubuntu.
Vše proběhlo hladce, stačilo jenom restartovat do Windows (XP nebo Vista) a začít využívat prostor nového oddílu. Restart ale neproběhl úspěšně. Důvodem byl fakt, že mým zavaděčem se po instalaci Ubuntu stal GRUB, který si zřejmě na oddíl s linuxovou distribucí ukládal nějaká data. Jelikož tento oddíl již neexistoval, data GRUBu byla v trapu, na což zavaděč celkem logicky reagoval chybovou hláškou.
Instalační CD Windows vista a jeho skryté možnosti
Tato situace mě nijak nevyvedla z míry. Poškozen je pouze spouštěcí kód hlavního zaváděcího sektoru (Master Boot Record - MBR) a případně ještě kód prvních sektorů některých diskových oddílů. Vše napraví Konzole pro zotavení se svými příkazy fixmbr a fixboot. Naneštěstí jsem nemohl najít instalační médium k Windows XP, ze kterého bych se do Konzole pro zotavení dostal. Nakonec nezbývalo než prozkoumat, jaké záchranné funkce vývojáři integrovali do instalačního CD k Windows Vista.
Naštěstí i instalační médium k Windows Vista obsahuje něco velmi podobného Konzoli pro zotavení. Spouštění tohoto programu je lehce netriviální, protože musíte předstírat, že chcete Windows Vista nově nainstalovat a předtím, než samotný proces instalace zahájíte, je nutné stisknout kombinaci klávse [Shift] + F10. Toto magické zaklínadlo způsobí spuštění příkazové řádky. Zajímavé je, že o tomto kouzlu jsem se čirou náhodou dozvěděl den před incidentem, který popisuji v tomto článku. Jeden nikdy neví, kdy se mu náhodou nabyté informace mohou hodit.
Ihned po zobrazení známého černého okna interpretu příkazů cmd.exe jsem vyzkoušel fixmbr a fixboot. Moje představa, že tím se všechno vyřeší, byla naivní a mylná. Windows tyto příkazy totiž vůbec neznala. Bylo mi divné, že by vývojáři na něco takového zapomněli, a tak jsem zkoumal adresářovou strukturu a hledal nějaké .exe soubory, které by v sobě mohly skrývat funkce pro obnovu obsahu bootovacích sektorů.
Nakonec jsem objevil příkaz bootsect nacházející se ve složce D:\boot, kde D bylo písmeno mechaniky CD-ROM (uhodl jsem je, neznám žádný interní příkaz příkazového řádku, který by zobrazil dostupné diskové jednotky a jejich písmena). Příkaz je to vskutku mocný a pokrývá funkčnost fixmbr i fixboot. Jeho syntax je následující:
bootsect TYP_SEKTORU UMÍSTĚNÍ [/mbr] [/force]
Pole TYP_SEKTORU může nabývat hodnot /nt52, nebo /nt60 a udává, jakým kódem se má nahradit obsah bootovacích sektorů diskových oddílů. /nt52 nahrazuje kódem kompatibilním se zavaděčem ntldr, který používají Windows XP a Windows Server 2003. /nt60 způsobí nahrazení kódem kompatibilním se zavaděčem bootmgr, který používají Windows Vista a novější.
UMÍSTĚNÍ určuje, obsah jakých sektorů se má přepsat. Může nabývat následujících hodnot:
- ALL - opraví se obsah všech oddílů.
- SYS - opraví se obsah pouze systémového oddílu, pokud jej systém rozpozná. Myslím si, že systémový oddíl je ten, který je v tabulce oddílů v hlavním zaváděcím sektoru označen jako aktivní.
- X: - X je písmeno diskové jednotky, jejíž bootovací sektor se má opravit.
Pokud je nepovinný přepínač /mbr přítomen, nahradí se i kód hlavních zaváděcích sektorů všech pevných disků počítače. Parametr /force určuje, zda se mají změny sektorů provádět i na oddíly, které jsou přístupné pod nějakým písmenem, a tedy na nich může mít nějaký program otevřené soubory.
Pomocí bootsect /nt60 ALL /mbr /force jsem opravil zaváděcí kód ve všech bootovacích sektorech i v MBR. Potom už Windows Vista začala psát smysluplné chybové hlášky typu "chybí bootmgr" či "nemůžu najít BCD". Nebylo těžké změnit aktivní oddíl na oddíl s Windows Vista a nakopírovat naň BCD i bootmgr. A Windows Vista vesele bootovala.
Závěr
Bohužel s windows XP jsem takové štěstí neměl (připomínám, že na strji jsem měl nainstalovány jak Visty, tak XPčka). Ať jsem se snažil, jak jsem chtěl, opravoval jejich bootovací sektor, jak jsem uměl, počítač se vždy po vybrání položky "Starší verze operačního systému" restartoval. Nakonec jsem jsem své snahy vzdal a spokojil se s windows Vista.
Z tohoto příběhu jsem si přinesl několik zajímavých a užitečných informací ohledně možností instalačního CDčka Windows Vista. Jelikož schopnosti Konzole pro zotavení přebírá v podstatě plnohodnotná příkazová řádka, bylo by teoreticky možné vytvořit si z instalačního CD (které podle mnoha zdrojů lze snadno přenést na USB flashdisk, ze kterého je pak možné nabootovat) velmi mocný záchranný systém, který dokáže nejen obnovit poškozené bootovací sektory, ale i zbavit počítač malware a zálohovat důležité soubory. Tuto domněnku však nejdříve musím potvrdit dalším výzkumem.
|