Permalänk
Medlem

Rädda borttagna filer

Hoppsan! Råkade just ta bort (rf -rm NY) foton och filmer från halva resan, mängden svordomar som önskas att skrivas ned får inte plats så jag hoppar över dom. Till frågan:
Finns det någon tool i linux som kör en undelete på mina förlorade bilder och filmer?

Permalänk
Hedersmedlem

Beror på filsystem. Är det Ext3, vilket det antagligen är, så har du precis lärt dig hur viktigt det är att ta backup. Säg att du hade alla bilder lagrade på den disken — vad skulle du ha gjort när den gick sönder? Inte "om" den går sönder, "när".

På grund av sättet som Ext3 fungerar så är det minst sagt svårt att återvinna filer. Jag har lyckats återvinna en större mängd textfiler och liknande som raderats från en Ext3-disk, men just textfiler är klart enklare än binära filer.

När något tas bort från Ext3 så ligger all data kvar orörda (dvs den skriver inte över allt med nollor eller liknande), men all info om var data tillhörande en viss fil låg försvinner. Det i kombination med att filer inte nödvändigtvis skrivs sekventiellt och annat gör det mer eller mindre omöjligt att hitta och organisera all data igen.

Vill du spendera en massa tid, antagligen utan att lyckas ändå, så kan du göra som jag gjorde när jag återfick textfiler. Jag skrev en snabb guide för det som jag pastear in nedan, men hur du ska lyckas identifiera just JPG-filer i soppan av ettor och nollor är något du själv får lista ut. Du kan analysera en sådan fil i en texteditor, möjligen kan du använda att EXIF-datan lagras i ren text för att kunna identifiera början av en fil, men att hitta slutet och annat är kanske svårare.

Citat:

Undeletion i Ext3

Få tillbaka oavsiktligt raderade filer på Ext3-partitioner

"Undeletion", att få tillbaka filer man oavsiktligen tagit bort, är inte alltid så enkelt. Enklaste fallet är när man lagt något i "papperskorgen" och kan få tillbaka det med några musklick. Än jobbigare är det om man måste köra någon programvara för att leta genom disken efter filer, med fortfarande kan detta ge bra resultat på filsystem såsom FAT, NTFS, ReiserFS, Ext2 m fl, men Ext3, som antagligen är det mest använda filsystemet på hemmarknaden för Linuxsystem idag, är "duktigare" än alternativen på att radera, vilket i detta fall blir till en stor nackdel.

Kort sagt så är borttagna filer på Ext3 "mer" borttagna än filer på exempelvis Ext2 vilket gör att det är mycket svårt att genomföra en enkel återställningsprocess. Varför det är på detta viset går att läsa om på exempelvis Wikipedia eller internet i allmänhet, men det är inte det denna guide ska handla om; här ska man få tips om hur man med lite jobb kan få tillbaka åtminstone en del information från en rensad Ext3-disk.

Något man kan säga direkt för att inte ge falska förhoppningar är att rena textfiler är relativt lätta att återskapa; binära filer är desto krångligare då de är mycket svårare att söka efter i en stor klump av data. Det är ofta också väldigt svårt att identifiera början och slutet på en binär fil så att man kan extrahera och återskapa den. Är det något väldigt viktigt dokument det handlar om är man dock kanske villig att spendera lite tid på det för att få tillbaka sina data.

~$ rm -r Grim\ Fandango *

Exakt det kommandot körde jag av misstag en gång i en terminal. Ett oavsiktligt mellanslag innan `*` som kom från oförsiktighet i samband med symboliska länkar och tab completion gjorde att jag helt plötsligt rensade det mesta av min hemkatalog innan jag hann trycka Ctrl-c. Jag visste att det var jäkligt att få tillbaka filer från en Ext3-partition, men jag kunde lika gärna försöka.

———————————————————

Det första att göra är att se till att man inte skriver någon information till partitionen. När data tas bort så rensas de inte från hårddisken, men deras utrymme blir tillgängligt för operativsystemet att skriva över med nya data. Ger man dock inte operativsystemet någon anledning att skriva till partitionen så kan man "ha kvar" de flesta filerna rent fysiskt.

Stäng alltså ner alla program som eventuellt kan få för sig att skriva till partitionen. I mitt fall med hemkatalogen gällde det IM-klienter som loggar konversationer, några skript jag körde i crontab, webbläsare som sparar cache och historik i hemkatalogen och lite annat.

Har man möjlighet så bör man avmontera partitionen så att man kan vara helt säker på att inget skrivs till den. Det kan vara problematiskt om det exempelvis handlar om /, men är det bara en lagringsdisk är det lätt gjort.

Partitionen det gällde för mig låg bara på 6 GB, så jag hade plats att göra en rå kopia så som den såg ut för tillfället och lagra den på en annan disk:

# dd if=/dev/hda1 of=backup_image.ext3

fixade detta för mig. Detta kommando läser av `/dev/hda1` bit för bit och sparar den som `backup_image.ext` i den aktuella katalogen. Här kan man göra stor skada på systemet om man inte är försiktig. Bara att söka lite på nätet för att hitta mängder med människor som rensat hela diskar och gjort systemet oanvändbart på grund av oaktsamhet med `dd`. Behandlas med respekt.

Nu hade jag en exakt avbild av partitionen att operera på utan att oroa mig för att skriva över viktig information.

Har man avmonterat en partition så kan man operera på den utan risk för att något skrivs över. Ligger det dock till så att man inte kan avmontera partitionen av skälen nämnda ovan, samtidigt som den är så stor att man inte kan göra en kopia av den på en alternativ partition så får man leva lite farligt och försöka att störa partitionen så lite som möjligt. Det bör strävas efter att skapa en kopia enligt ovan.

Tillvägagångssättet man har att tillgå när det gäller Ext3 är nu att söka igenom den ohanterliga datamängden efter mönster man snillrikt får välja för att försöka hitta delar av filer man letar efter. Handlar det om en vanlig textfil är det lättare att komma på något smart att söka efter; handlar det om en videofil eller liknande kan det vara övermäktigt. Jag blev inte av med mycket av värde förutom just rena textfiler, vilket får räknas som tur i oturen, antar jag.

Det handlar i vilket fall om att `grep`:a efter kända strängar och lägga på en växel så att man får med ett anpassat antal rader före och efter den sökta frasen. Ett typiskt kommando kunde för mig se ut enligt

grep --binary-files=text -1000 "subsection" backup_image.ext3 > temptext

`grep` behöver växeln `--binary-files=text` för att förstå att den ska hantera indata som en textfil trots att de ser ut att vara av binärtyp. `-1000` anger att `grep` ska skriva ut 1000 rader före och efter den matchade raden. 1000 är i värsta laget; man kan experimentera sig fram, men då det kan ta ett bra tag att `grep`:a en fil på ett stort antal GB så kan det vara trevligare att i efterhand få skala bort en del rader än att behöva göra om sökningen för att man inte fick med början på dokumentet.

Man kan i stället för `-1000` exempelvis ange växlarna `-B100 -A500`. Då skriver `grep` ut 100 rader före (before) och 500 rader efter (after) den matchade raden.

"subsection" var den sträng jag sökte efter, vilket var en sträng jag med säkerhet visste fanns med i en del LaTeX-dokument jag ville ha tillbaka.

Jag omdirigerar output till en fil så att den blir lättare att hantera.

Tycker man det blir alltför mycket rappakalja i resultatet kan man med fördel pipe:a outputen från `grep` genom `strings`: ett kommando som rensar bort en hel del tråkiga tecken (se `man strings` för mer info). Som standard räknas "åäö" som konstiga tecken, så man bör ge strings växeln `--encoding=S` för att åtminstone tillåta 8-bitarstecken, såsom våra svenska stoltheter. Mina filer var i teckenkodningen ISO-8859-1; jag har inte testat hur `strings` hanterar UTF-8.

`strings` har dock oegenheten att det även rensar bort blankrader vilket gör att exempelvis mina LaTeX-dokument ser röriga ut. Jag valde att inte använda det och hellre stå ut med en del skräptecken när jag rensade.

Mer avancerade sökningar går att göra genom användning av exempelvis `awk` och våra andra vänner. Lite programmering skulle säkert kunna automatisera processen också, möjligheterna är i stort sett obegränsade.

———————————————————

Är detta roligt? Nej. Blir resultatet 100%:igt? Nej. Gör backuper på känslig data med jämna mellanrum. Det kvittar dock hur många gånger man hör det, man lär sig inte förrän man förlorar viktiga data på ett eller annat sätt. Det är dock en fantastisk känsla att kunna återställa en helt förlorad partition med några enkla kommandon. I mitt fall hade jag faktiskt en backup, men den var någon månad gammal så den saknade en del dokument. Jag klarade mig dock utan någon allvarlig dataförlust, även om det var vansinnigt nära att det hade gått helt åt pipan. Hade jag inte Ctrl-c:at i tid så hade min situation varit storleksordningar värre. Så går det när man är slarvig med sina backup-rutiner.

EDIT: SweClockers/VBulletin tycker det är en bra idé att omvandla teckensekvenser till smileys till och med i code-block. "Inga smilies i detta inlägg, tack."

Permalänk

photorec fixar biffen annars, däremot får du inte tillbaka filernas filnamn

Permalänk
Medlem

jag kör jfs

Edit1: Körde just in jfsrec, får se om det ger någon avkastning
Edit2: Fan, kompileringen gick åt helvette

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av budbrain

Edit2: Fan, kompileringen gick åt helvette

Jag hoppas du inte gör någonting på disken med de borttagna filerna, då du riskerar att skriva över datan som är filsystemet "markerat" för borttaget.

Permalänk
Medlem

Foremost (http://foremost.sourceforge.net ) borde klara det oberoende av filsystem. En förutsättning är dock att ingenting skrivits över. Gör först en avbild av partitionen med dd och jobba med avbilden.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av twan
Jag hoppas du inte gör någonting på disken med de borttagna filerna, då du riskerar att skriva över datan som är filsystemet "markerat" för borttaget.

nejdå, /tmp tmpfs is the shit. Nu måste jag bara hitta en extern hårddisk att slänga över imagen till :/