Kraschad disk

Från Unix.se, den fria unixresursen.

En hårddiskkrasch råkar man förr eller senare ut för. Ofta är det möjligt att få fram all, eller delar av, den lagrade datan.

Felaktig partitionstabell

I början av disken finns en lista där de olika partitionerna står uppräknade, och var på disken de finns. I fall den blir ändrad till felaktiga värden av till exempel Partition Magic eller annat program så kan datorn inte längre hitta partitionerna. Har man tur så är det bara själva partitionstabellen och inte partitionen som det är fel i.

De flesta filsystem (t.ex. ext2) har en header som beskriver olika saker. Detta gör att man kan skriva ett litet program som söker igenom disken efter ett antal byte ur den. Har man bara en disk och det inte går att starta operativsystemet så får man stoppa in disken i någon annan dator och utföra proceduren där. När man sedan vet var partitionen finns är det bara att ändra partitionstabellen rätt igen. Troligen får man flera träffar, och då får man ta och pröva dem allihop.

Dåliga sektorer (Bad sectors)

Detta är ett rent hårdvarufel. Några sektorer går helt enkelt inte längre att läsa eller skriva till. Är det nu en felaktig sektor mitt i en fil är det inte mycket att göra åt. Har den däremot kommit på en inode, t.ex. en inode för katalogen /home, kan det finnas större hopp. Ett sådant fel gör att när man försöker lista filerna i /home så tar det stopp. Som tur är finns ju ändå alla filer och deras inodes kvar, det är bara det att filsystemet inte vet var de ligger.

För sådana problem använder man debugfs för ext2, och motsvarande verktyg för andra filsystem. Med hjälp av det kan man dumpa data från inodes, vilka man skriver in i form av nummer. För att specificera en inode som ett nummer i debugfs använder man formen <nr>; om t.ex. 701138 är inoden för katalogen /home/foo så visar ls <701138> dess innehåll. Eftersom man förmodligen inte vet vilka inodes det var har man nu ett tidsödande arbete framför sig. Utan ett par kannor kaffe eller starkare stimulanter så kommer man att slita håret ur huvudet.

Om man vet att man hade ett par kataloger i /home så skriver man lämligen ett skript som interagerar med debugfs och kör ls på varje inode och skickar resultatet till en fil. Sedan letar man igenom den till man hittar rätt inode som verkar motsvara någon av de underkataloger till /home som man vill bevara. Sedan använder man debugfs igen för att dumpa filerna som låg i den katalogen.

Fotnot: Varje fil i ett filsystem har en inode. I den står t.ex. storlek på filen, datum, vilka sektorer den ligger på osv. För kataloger står vilka andra inodes den innehåller.

Personliga verktyg