Portál AbcLinuxu, 30. dubna 2025 09:11
Připojíme nový disk, vytvoříme tabulku rozdělení disku, překopírujeme oddíl s Linuxem, oddíl s Windows, nainstalujeme LILO, odpojíme starý disk, nabootuje Linux, rebootujeme, vyzkoušíme Windows, černá obrazovka.
Tento článek plije na Windows, s Linuxem nemá nic společného, až na řešení, které používá čistě Linux ;)
Pro úplnost dodám, že se jedná o Windows XP CZ Professional SP 3 na NTFS. Původně seděly v dualbootu s Gentoo Linuxem na 40GB disku, nyní se oba systémy spolu s bootovacím správcem LILO měly přesunout na disk větší, novější a rychlejší.
Pátrání mě zavedlo na ubunťácké fórum, kde v článku HOWTO: Move/Copy Windows XP to another Partition doporučují odstranit přiřazení písmenek jednotlivým blokovým zařízením v registrech a po přesunu opravit číslo sektoru, kde začíná NT zavaděč, v boot sektoru oddílu s NTFS.
Tu jsem si vybavil staré (vůbec ne dobré) časy s MS-DOSem,
který si na začátek oddílu ukládal geometrii disku (třebaže už jednou byla
uvedena v tabulce rozdělení disku a zrovna tak ji bylo možné vytáhnout
z BIOSu) a pokud jste předem nevynulovali několik prvních sektorů, tak
microsoftí nástroje začali vyvádět podivné věci (např.
format c:
počítal 99 %, 100 %, 101 % a nikdy neskončil).
Posilněn jistotou, že tudy už někdo šel, jsem se držel návodu a nic. Prostě opět černá obrazovka, Windows nebootují a konec. Ani žádná chybová hláška NT zavaděče.
Chyba bude v boot sektoru, řekl jsem si, za těch několik let jistě udělali v Microsoftu pokrok, vyzkoušíme Recovery konzoli z instalačního kompaktu Windows – nástroje jako fixboot, fixmbr jistě svoji práci dělají výborně.
To jsem bohužel nemohl vyzkoušet, protože po bootu z CD po hlášce „prohledávám hardware“ (nebo tak nějak) se celý systém odmlčel. Prostě instalační CD nebootovalo.
Čert aby to vzal! Že by se pokazilo CD? Připojím starý disk, reset a voilà, po hlášce zachrastí disketová mechanika a po chvíli se objevuje modrá obrazovka – chvilka napětí – instalačního programu. Volím konzoli pro zotavení®, vyberu systém na druhém disku, zadejte heslo Administrátora, chybné heslo.
Sakra. Účet Administrátora jsem kdysi zakázal a místo něho vytvořil
účet root se stejnými právy, abych se při runas /U
neupsal
k smrti. Bootuji starý systém, povoluji přihlášení Administrátorovi,
kopíruji 20 GB na nový disk, reboot z instalačního cédé
a přihlášení, vyzkouším jak fixmbr, tak i fixboot, reboot a…
Opět nic. Stejná chyba, nástroje fixmbr a fixboot zas až tak fix nejsou.
Opět trápím Google, na webu Microsoftu nic, co by se týkalo mého problému, nedej bože nebootování instalačního CD, nenacházím, procházím různá diskuzní fóra. Hnůj, humus, reklamy, placený přístup, zkuste zmáčknout RESET. Problém musí být někde v první fázi NT zavaděče, jinak by přeci vypsal nějakou chybovou hlášku. Formuluji nové dotazy ohledně kódu zavaděče.
A tady to vypadá slibně NTFS Partition Boot Sector, tabulka offsetů, hexadecimální čísla, assembler. Když už ne jinde, tak tady to musí být.
Čtu jednou, po druhé, studuji kód. Ne to není pravda. Kdo ten zavaděč vymýšlel? Ono to používá CHS adresování, ale jen pokud je oddíl před osmým gigabajtem. Samozřejmě geometrie disku tu je. Ó, ten chorý mozek, co to vymýšlel – téměř všechny údaje jsou big endian, ale některé little endian.
Je to jasné. O mém starém disku si BIOS myslel, že má 255 hlav, ale o novém si myslí, že jich má jen 16. Takže starý údaj na adrese 0x1A způsobí, že první část zavaděče si řekne BIOSu o jiný sektor a jeho kód, kde žádná druhá část NT zavaděče není, naštěstí jen kousne počítač.
Takže, pokud vám, jako mně, oddíl s Windows začíná před 8 GB, tak je po přesunu dat třeba opravit nejen začátek oddílu vyjádřený v sektorech (adresa 0x1C, 32b big endian hodnota), ale i počet hlav disku (adresa 0x1A, 16 b, big endian) a možná i počet sektorů na stopu (adresa 0x18, 16 b, big endian).
Údaje lze získat třeba při podrobném výpisu LILA, možná při vytváření nové tabulky rozdělení fdiskem a ve starších počítačích z hlášení BIOSu. při POSTu.
Převod do hexadecimální soustavy v big endian formátu ponechám na inteligenci čtenáře.
Následný reboot již do Windows proběhl naprosto v pořádku, souborový systém jsem pak zvětšil pomocí nástroje ntfsresize z balíku ntfsprogs.
Co mě na této anabázi skutečně dostalo, je, že taková běžná věc, jako je přesun systému na jiný disk, může představovat neskutečné problémy, které se Microsoft nesnaží ani předvídat (instalační CD se nevyrovná s poškozeným boot sektorem NTFS oddílu a zhavaruje) ani nabídnout uživatelům pomocnou ruku (kde jsou nástroje pro přesun systému, změnu velikosti souborového systému).
Plán bitvy původně zahrnovat provoz obou systémů na softwarovém diskovém poli typu 1 (zrcadlení). Po té, co jsem se dozvěděl, že RAID1 systém z Redmontu umí, ale z desktopových verzí byla jeho podpora odebrána z obchodních důvodů, jsem Microsoft hlasitě proklel. Záložní plán použít hardwarově asistovaný RAID (BIOS zařídí emulaci do bootu, pak si řízení převezme ovladač od Intelu) skončil na chybějící podpoře u PATA řadiče inkriminované desky. Takže teď se bude Windows jednou týdně automaticky kopírovat z Linuxu na druhý disk a časem stejně půjde do virtuálního stroje, protože kvůli dvěma aplikacím nehodlám vydržovat další systém.
Tiskni
Sdílej:
Chyba bude v boot sektoru, řekl jsem si, za těch několik let jistě udělali v Microsoftu pokrok, vyzkoušíme Recovery konzoli z instalačního kompaktu Windows – nástroje jako fixboot, fixmbr jistě svoji práci dělají výborně.
Nesouhlasím. Nedávno jsem chtěl provést takovou trivialitu jako obnovit zaváděč Visty, v MBR byl totiž GRUB. Největšími experty na světě opěvovaný jakýsi Mbrfix mi hrdě oznámil, že oprava se povedla, Ale GRUB vesele bootoval dál
Zkusil jsem tedy instalační DVD Visty s otu jejich slavnou recovery console. Spustil jsem program k opravě MBR určený, jakýsi Bootrec. Ten mi úspěšně našel instalaci Visty, a poté mi oznámil, že oddíl s Vistou není NTFS Podotýkám, že Vista byla funkční a nomrálně bootovala přes GRUB.
Jestli myslíte tento MbrFix, tak podle popisu pouze pracuje s MBR. Jenže já jsem měl problém s boot sektorem jednoho jediného oddílu.
Kratky blik HDD Led potvrdi spravnost operacie.
Spíš, že se něco někam zapsalo nebo odněkud četlo. Rozhodně ne úspěšnost – fixboot taky blikal, ale jediné, co dělal, bylo, že přepisoval kód zaveděče, nikoliv již geometrii uloženou hned vedle.
fixmbr
plus fixboot
, ale ja pokazde musel pouzit nejaky nastroj na editaci rozdeleni disku - vetsinou stacilo otevrit a zas ulozit.
Horsi je stav, kdy z nejakeho duvodu Windows prepisi zacatek disku - nevim proc to delaji (osobne bych to odhadoval na chybu ovladacu disku), ale uz jsem tahal data z nekolika stroju, jejich disk byl ze zacatku prepsan nesmysly nebo naopak nulami. Sice se uz vetsinou nezachrani prvni oddil, ale z ostatnich jsem vzdy vsechna data vytahal (proto kazdemu s Windows doporucjuju disk rozdelit alespon na dva oddily).
Urcite existuji komercni nastroje, co tohle umi, ale ja si vystacil s dd
(nebo dd_rescue
ci pv
) na vytvoreni image na mem disku (na povodni disk jsem pak kopiroval zachranene soubory), loopbackem a jednoduchym vlastnim programkem, ktery hledal zacatek NTFS partition pomoci vyskytu retezce "NTFS" (ofset 3-6) a boot signatury 0x55 0xAA (ofset 510-511) sektor po sektoru (tj. po 512 bytech).
Pokud programek najde neco, co vypada jako zacatek NTFS, vypise jeho ofset. Soubor se pak pripoji loopbackem (pres losetup
s prislusnym ofsetem jako parametr) a nasledne se zkusi namountovat. Pokud to nehodi zadne chyby (je dobre sledovat hlaseni jadra), je to ono, jinak se loopback odpoji a postupuje se na dalsi nalezeny offset. Korektni oddily se mohou nechat pripojene, tedy alespon dokud nedojdou vilne loopbacky ntfsfix
vytahl data i z napoprve nenamountiovatelneho oddilu.
Nejspis to jde i pro FAT32, ale protoze vsichni, kterym jsem data z pozkozenych disku tahal, byli jen bezni uzivatele (=lamy) a meli vsude NTFS, tak jsem nikdy data z FAT32 tahat nemusel (jen z FAT16 a jen fotky z pametovych karet pres magicrescue
). Obecne by rozpoznat zacatek FAT32 oddilu nemelo byt o moc slozitejsi, napriklad se muze spolu s boot signaturou hledat text "MSWIN" na obdobnem ofsetu jako u NTFS text "NTFS".
Ghosta (který funguje, ale není volně šiřitelný).Je volně cracknutelný
Nefungovalo, protože:
Please note that the partition information is taken from your MBR, which is expected to be the same as before image creation - expect surprises if you change something between image creation and deployment.
g4u reads the disk bit by bit
A popravdě řečno nevidím jediný důvod, proč stahovat, instalovat a bootovat další systém, když dělá to samé jako dd.
Po bitvě je každý generál, takže jsem ještě hledal a našel GPL program pro Linux, který řeší přesně můj problém.
Jmenuje se ntfsreloc, starají se o to lidi od ntfsprogs (třebaže zatím není jeho součástí) a dostal jsem se k němu přes manuál ntfsclone(8).
Umí jak automatickou opravu geometrie disku a umístění oddílu, tak podle ručně zadaných hodnot, funguje i nad obrazem blokového zařízení v souboru.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.