09 februari 2006

Partities naar de knoppen? Geen nood!

Hoe het allemaal begon

Zoals eerder gepost kan defrag in Linux je ext3 schijfje lekker opkloten. Het is dan ook eigenlijk bedoeld voor ext2 schijven; er wordt geen rekening gehouden met de extra's die ext3 biedt. Het is namelijk zo dat de basis van deze bestandssystemen gelijk zijn, maar ext3 heeft er journalling bij. Hierom kan een ext3 schijf in principe ook gebruikt worden als ext2 schijf, maar wanneer je dat doet wordt er geen rekening gehouden met het journal en raakt de boel dus in de knoop.

Anyway, ik had dus m'n home partitie gedefragmenteerd, ext2 style, maar hierna werd de partitie niet meer gemount als ext3 schijf. De wijsheid uit de vorige alinea had me ertoe kunnen brengen de schijf als ext2 te proberen te mounten, maar in plaats daarvan besloot ik raar te gaan doen. Ik kon namelijk ook niet meer inloggen met Linux (logisch natuurlijk als je bestanden niet meer te bereiken zijn) en dus dacht ik dat misschien de fout hersteld kon worden door even Ubuntu opnieuw te installeren. Dit ging echter behoorlijk mis; tijdens het formatteren van de partitie voor Ubuntu liep de installatie vast en moest ik de computer uitzetten met de knop; ziedaar partitie fuckup numero dos.

Gelukkig was Windows nog wel aanwezig en hoewel ook deze steeds slechter leek te booten om reasons yet unknown kwam ik er af en toe nog wel in. Hier heb ik toen gezocht naar een oplossing om de bestanden op m'n home partitie te kunnen recoveren en die vond ik in de vorm van R-Linux, een handig ext2 partitie recovery tooltje voor Windows. Ideaal dus!

Helaas werd ik toen een beetje overmoedig en besloot ik het later wel even te regelen; de tools waren immers klaar voor gebruik en ik had tentamens om voor te leren. Little did I know dat dat de laatste keer zou zijn dat ik m'n oude Windows zag. Een dag later kwam ik niet meer door de boots heen, doordat de harde schijf telkens leek uit te schakelen tijdens het opstarten. Erg vreemd allemaal. Ik had het vanaf dat moment kunnen doen met Ubuntu Live CD's, maar dat zou jammer zijn geweest, want de grootste fuckup moest nog gemaakt worden!

Ik besloot namelijk maar een setje Partition Magic rescue disks erbij te pakken. Normaal gesproken werkt dit allemaal prima, maar de staat van m'n compie in combinatie met een poging tot opnieuw partities aanmaken resulteerde in weer een vastloper en een 5-seconden-uitknop-ingedrukt-houden. Als ik even gewacht had was de vastloper misschien nog los gekomen, maar door deze niet enorm doordachte actie werd, als grote klap op de al vrij sierlijke vuurpijl, de hele boel echt volkomen onbootbaar. En ja, wanhopig als ik was greep ik toen terug op de Windows XP installatie cd om in de reparatie console FIXMBR (een commando dat normaal gesproken de Windows bootloader installeert) te doen... resulterend in een volgens Partition Magic volledig lege schijf! AAAARGH!!! Partitietabel/MBR kapot dus.

<egotrip>Nu wil ik niet opscheppen over hoe heroïsch en volhardend ik toch vastberaden bleef om, ondanks de redelijk slechte kansen om er nog iets van te maken die bovendien keihard bevestigd werden door anderen, toch vol te houden om mijn home partitie te proberen te redden, maar ik doe het bij deze toch maar even; het heeft z'n resultaat namelijk gehad. Exit Common Joe Patrick, enter Partitie Rescue Master Deluxe!</egotrip> Goed, waar was ik...

Live CD to the rescue

Zonder hardeschijf om van te booten of om wat dan ook mee te doen, zat er niet veel anders meer op dan de Ubuntu Live CD er bij te pakken en van daaruit eens op zoek te gaan naar tools om de boel te fixen. Internet en vooral ook GnoeMoe (om op Utopia te komen) waren in dezen mijn grote bondgenoten. Het is gelukkig mogelijk om op een met een Live CD geboot systeem toch programma's te installeren, hoewel je dat dus wel bij elke reboot weer opnieuw moet doen. De mensen op Utopia zijn echter van genoeg waarde om telkens GnoeMoe weer op te halen.

Vanaf dit systeem kon ik dus in principe alles weer met de schijf doen, hoewel er niets meer op leek te staan. Dit kwam dus door het vernielen van de partitietabel, een stukje code aan het begin van iedere harde schijf. De bestanden op de oude partities zijn er echter nog wel, zolang je niet je schijf gaat formatteren; ze kunnen alleen niet meer gevonden worden, omdat de partitietabel de informatie bevat over waar de partities zich bevinden. Hoe komen we dan toch bij de bestanden?

gpart

Na een beetje in de man's van parted en fdisk te hebben rondgesnuffeld kwam ik op het spoor van het programma gpart. Dit progseltje scant de volledige inhoud van je harde schijf en kan op die manier zien waar partities staan en zelfs wat hun bestandssysteem is, zonder de hulp van de partitietabel dus. Je moet wel oppassen het niet voor 100% te vertrouwen; het gaat hier om een programma dat in principe alleen probeert te raden wat het voor een partitie was. Als je echter wel een beetje weet waar je partities zaten kun je hiermee de extra zekerheid vergaren die je nodig hebt om over te gaan tot het redden van je partities.

Om precies te zijn heb ik het volgende commando gebruikt:

$ sudo gpart -vvvvv /dev/hda

Het kan zijn dat je het eerst nog even moet installeren door alle online repositories in /etc/apt/sources.list aan te zetten en het te installeren met apt-get. Dit commando gaf me deze output. Na "Begin scan..." zie je de gevonden partities met precieze gegevens over de locatie op de harde schijf in sectoren (achter size bij elke Possible partition). Met deze info kunnen we dus aan de slag om de partities weer op te bouwen zoals ze waren.

fdisk

Dit heb ik gedaan met fdisk, aangezien je met parted, een programma dat normaal gesproken iets lekkerder werkt, de schijf positie en grootte niet in sectoren op kunt geven. Je kunt dan dus een partitie maken op de exacte plaats waar de oude partitie zat. Als je deze partitie niet formatteert heb je dan dus gewoon exact je oude partitie terug, want met het maken van een partitie op zichzelf doe je niks meer dan even de positie en grootte in de partitietabel zetten. Voor de duidelijkheid, dit alles gebeurt nog steeds vanaf het met Live CD gebootte systeem. Om de partitie die ik wou redden, de zesde in de output van gpart, opnieuw aan te maken deed ik het volgende:

$ sudo fdisk /dev/hda fdisk: u Changing display/entry units to sectors fdisk: n Command action e extended p primary partition (1-4) p Partition number (1-4): 3 First sector (63-117210239, default 63): 86927778 Last sector or +size or +sizeM or +sizeK (86927778-117210239, default 117210239): 100599025 fdisk: w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: If you have created or modified any DOS 6.x partitions, please see the fdisk manual page for additional information. Syncing disks.

Lijkt een hele lap, maar alleen de niet cursieve delen is wat je in hoeft te typen. Wat is er allemaal gebeurd? Om te beginnen zorgt fdisk: u (met "fdisk:" bedoel ik hier gewoon de prompt in fdisk) ervoor dat je dus gegevens in kunt voeren in sectoren, wat handig is met de uitvoer van gpart en wat bovendien de meest nauwkeurige methode is (MB's zijn altijd enigszins afgerond). Met fdisk: n geef je vervolgens de gegevens op voor de partitie die je wilt gaan maken. Ik heb gekozen om er gewoon een primaire partitie van te maken en hem op /dev/hda3 te zetten; dit maakt echter verder niets uit. Daarna komt nog de positie; begin sector en eind sector, zoals gpart had uitgevogeld. Fdisk heeft op dat moment alle gegevens om een nieuwe partitietabel met daarin de nieuwe (of eigenlijk oude) schijf aan te maken en dat doe je met het fdisk: w commando.

En daar is je schijfje weer! Om te voorkomen dat er meteen weer iets misgaat is het op zo'n moment echter verstandig de partitite te backuppen voor je hem mount. Bij het mounten kan er zo maar per ongeluk iets mis gaan en dat willen we niet.

netcat en dd

Op dit punt beland kwam de expertise van de Utopianen me goed van pas. Ik was namelijk niet van plan de backup te maken op de harde schijf zelf, straks weer alles kwijt. Het plan was om een image van de partitie via het netwerk naar een andere computer te sturen; netcat was voor deze situatie het advies. Dit programma werkt in feite exact hetzelfde als cat; je geeft het programma lijnen input en met de commando's in je terminal shell stuur je deze input door naar een bestand of naar een ander programma. Het enige verschil met netcat is echter dat bij dit programma eerst een verbinding met een andere computer wordt gelegd en dat daarna alles wat er ingevoerd wordt direct wordt doorgestuurd naar die andere computer. Die andere computer kan dan op zijn beurt met shell commando's deze output doorsturen naar een ander programma of een bestand.

Zo uitgelegd klinkt het misschien nog niet zo spannend, maar ik kan je aanraden het gewoon voor de grap eens te proberen; je kunt namelijk niet alleen met andere netcat's verbinden, maar met alle soorten servers, van webservers, via mail servers tot ssh. Er zit wel een addertje onder het gras: je moet de taal van die servers kunnen spreken om er iets mee te kunnen. In mijn geval heb ik echter alleen een directe verbinding tussen twee netcats nodig om de data van de backup te versturen.

Long story short; ik heb dit gedaan als volgt. Ten eerste geef je op de ontvangende computer het volgende commando (met dank aan deze site):

$ nc -l -p [poort] | dd of=[bestand waar je het wilt hebben]

Wat je voor poort invult doet er niet toe, als hij maar hetzelfde wordt op de versturende computer. Daar geven we hierna het volgende commando:

$ dd if=/dev/hda3 | nc -q 0 [ip van ontvangende computer] [poort]

/dev/hda3 was dus alleen voor in mijn specifieke geval, dit kan ook een andere partitie of zelfs een bestand zijn. Alle data is in feite op deze manier over te seinen van de ene naar de andere computer. Het kan in het hier besproken geval van een partitie natuurlijk wel even duren, aangezien ook alle lege ruimte op de schijf mee wordt gestuurd; er wordt gewoon een exacte kopie van je partitie gemaakt.

Je bestanden weer tevoorschijn toveren!

Je kunt nu meerdere kanten op. Je kunt proberen de originele partitie te mounten als ext2. Dit ging bij mij aan het begin goed, maar op den duur crashte de harde schijf weer; alles bleek nog niet helemaal flex te zijn daar. Om on the safe side te blijven kun je dus het beste bezig gaan met de backup image. Maak hiervan voor de zekerheid eerst nog een kopie.

Om nu de bestanden die op de partitie stonden eruit te halen kun je het image bestand mounten alsof het echt een partitie was. Dit doe je met

$ sudo mount -t ext2 -o loop [backup bestand] [mount plaats]

De mount plaats moet een map zijn; die kun je het best van te voren even aanmaken. Nu staan dus als alles goed is gegaan al je bestanden van de "verloren partitie" in die map. Haleluja! Kopiëren die hap dus, naar een andere map (ergens anders dus, niet in de map van de gemounte backup file!) met bijvoorbeeld

$ cp -rd [mount plaats] [waar je het heen wilt]

De -r optie zorgt ervoor dat alles wat in de map staat ook meegekopieerd wordt en de -d optie zorgt ervoor dat links niet meegekopieerd worden (bij het redden van 1 partitie wil je niet dat cp gelinkte bestanden uit andere, niet meer bestaande partities mee probeert te kopiëren). En dat was dan dat! Al je bestanden staan mooi in een mapje en zijn klaar om bijvoorbeeld even met tar ingepakt te worden. Zodra je je verrotte computer dan weer op gang hebt kun je in een keer alle bestanden weer terug sturen via het netwerk (dit kan met netcat, maar ook met scp als je even een ssh server installeert).

Eind goed, al goed

En zo was alles uiteindelijk toch nog goed gekomen! Nadat ik nog een tweede schijf met vooral muziek heb gered op dezelfde manier heb ik de computer maar eens uit elkaar gehaald om te kijken of er misschien een kabeltje los zat bij de harde schijf. Zie hier voor een paar leuke actie foto's van de ontlede laptop. Uiteindelijk heb ik niets gevonden dat mis zou kunnen zijn, behalve een flinke bult stof op de ventilator boven de processor; dit heb ik dus even weggezogen.

Na deze operatie deden de harde schijf uitvallen zich echter niet meer voor en kon ik dus weer beginnen de harde schijf te partitioneren en alles te installeren, te beginnen met Ubuntu Breezy natuurlijk. Ondertussen is alles dus weer prima op orde, hoewel sommige dingen, waaronder met name het opstarten, soms een stuk langzamer gaan dan normaal. De harde schijf doet echter niet extreem raar meer en zolang het werkt mag ik niet klagen. Al met al: eind goed, al goed!

Bij deze nog even uitdrukkelijk dank voor alle hulp bij deze operatie aan Haplo, Magmemion, Neàrin, Tempestas en anderen die ik vergeten ben!

Reacties:

Anonymous Anoniem had het volgende te zeggen:

"Het is gelukkig mogelijk om op een met een Live CD geboot systeem toch programma's te installeren, hoewel je dat dus wel bij elke reboot weer opnieuw moet doen."

Met Dapper kun je het bewaren ;)
http://err.no/personal/blog/tech/Ubuntu/2006-01-10-22-08_casper.html

vrijdag, februari 10, 2006 1:19:00 a.m.  
Anonymous Anoniem had het volgende te zeggen:

En waarom zou je uberhaupt defragenteren? Het is Windows niet ;)

vrijdag, februari 10, 2006 7:49:00 a.m.  
Blogger Jos had het volgende te zeggen:

Volgens mij was het defragmenteren een experiment met de mogelijkhden die voorhanden waren. Doen doet leren, nietwaar. Heet dat niet hacken? ;-)

vrijdag, februari 10, 2006 1:48:00 p.m.  
Blogger Patrick had het volgende te zeggen:

Dat was inderdaad het idee ja ;) De boel begon bovendien steeds langzamer te lopen en ik vroeg me gewoon af of het effect zou hebben, aangezien ik had gelezen dat zodra je schijf vol raakt het wel degelijk uit gaat maken als je de schijf even defragt.

Handig dat je het in dapper kunt bewaren trouwens, daar ga ik naar uitkijken! Is het dan ook mogelijk om voortaan gewoon altijd van een cd te booten?

zaterdag, februari 11, 2006 10:11:00 p.m.  
Blogger Jos had het volgende te zeggen:

Leuk dat je nu ook op Planet.Ubuntu-nl bent verschenen. Ik dacht al dat mijn stukkie daar toe kon bijdragen. Welkom! Een terechte beslissing!

zondag, februari 12, 2006 9:56:00 p.m.  
Anonymous Anoniem had het volgende te zeggen:

You have an outstanding good and well structured site. I enjoyed browsing through it »

dinsdag, februari 06, 2007 9:00:00 p.m.  

Plaats ook een reactie

<< Terug naar de hoofdpagina