Hoe kan ik een verwijderd bestand onder Linux herstellen?
Per ongeluk heb ik rm
gebruikt op een bestand dat ik niet wilde verwijderen. Is er een manier om het terug te krijgen onder Linux?
Per ongeluk heb ik rm
gebruikt op een bestand dat ik niet wilde verwijderen. Is er een manier om het terug te krijgen onder Linux?
De volgende stappen zijn generiek om tekstbestanden te herstellen.
Gebruik eerst het muurcommando om de gebruiker te laten weten dat het systeem in een enkele gebruikersmodus wordt uitgeschakeld:
te herstellen. 4. Gebruik vervolgens vi om file.txt.
te zien. Gevonden op http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html
dd
en probeer het bestand daarin te vinden (met behulp van grep
, of een editor). Bewerken: soms werkt ddrescue
beter dan dd
.
Ik heb dit een paar jaar geleden gedaan. Mijn aanpak was om direct, zonder tijd te verliezen, de partitie te unmounten en vervolgens
dd if=/dev/hda1 of=backup_image.ext3
een back-up bestand te hebben van de exacte staat van de partitie. Dan kun je de partitie weer mounten en verder gaan met business as usual terwijl je het verwijderde bestand in je gemaakte image zoekt. De afbeelding zal waarschijnlijk ZEER groot zijn omdat je alle “lege” ruimte nodig hebt, dus het kan een praktisch probleem zijn om het op te slaan.
Dan was het gewoon om saaie zoekopdrachten uit te voeren na tekstfragmenten waarvan ik verwachtte dat ze ergens in de soep van de partitie-inhoud zouden zitten. Om bijvoorbeeld .tex-bestanden te vinden, rende ik
grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles
die een grote context rond de zinsnede “subsectie” afdrukten en de uitvoer opsloegen in een bestand om handmatig doorzocht te worden. Ik heb zo'n grote context afgedrukt omdat het zo lang duurde om de afbeelding te doorzoeken dat ik het liever niet vaker deed dan nodig was.
Ook het commando strings
was nuttig bij het verwijderen van binaire rotzooi uit de uitvoer, maar als ik me goed herinner heeft het ook alle nieuwe lijnen verwijderd, wat een probleem zou kunnen zijn.
Om binaire bestanden op dezelfde manier te vinden, kan het lukken om een karakteristieke header of iets van een bepaald bestand te vinden, maar ik stel me voor dat het een vrij groot avontuur is.
Korte technische opmerkingen: er zijn technische problemen met schijfherstel en Ext3/4. Het is een lang ding om uit te leggen, maar kort (en onvoldoende): Ext3/4 verwijdert de “markers” die het OS vertellen waar de bestanden zich op de schijf bevinden wanneer u ze verwijdert. De bestanden worden niet geschrobd, maar niemand weet meer waar ze op de schijf beginnen en eindigen, en soms zijn ze zelfs op meerdere plaatsen gefragmenteerd. Sommige andere bestandssystemen stellen de status van de bestanden gewoon in op “gewist”, maar houden de locatiegegevens bij. Dan is undelete niet moeilijker dan het bekijken van file pointers met deze vlag (ze zouden nog steeds beschikbaar moeten zijn als er niet te veel activiteit is geweest), en dan hopen dat hun inhoud niet overschreven is.
Wat is het beste? Retorisch, naar mijn mening. Frequente back-up is het antwoord op al deze problemen. Belangrijke gegevens zonder geautomatiseerd backup systeem is een ongeluk dat wacht op een ongeluk, IMHO.
Verplichte persoonlijke anekdote: Ik was van plan om foo\ foo*
uit ~
te verwijderen. Ik schreef
rm -r foo<Tab>*
, wat helaas, aangezien foo
blijkbaar een symlink was en het enige bestand dat hiermee overeenkwam, de shell maakte van
rm -r foo\ foo *
Ik drukte op Enter en zat daar te kijken naar het commando, wat hooguit een seconde had moeten duren. Na wat langere tijd vroeg rm
me of ik “het schrijfbeveiligde bestand ‘iets’ wilde verwijderen”. Vrij snel voelde ik de rillingen en zacht en zeer gecontroleerd drukte ik op Ctrl+c
. ~De helft van mijn ~
werd verwijderd, maar ik slaagde erin om alles van waarde terug te krijgen door de hierboven beschreven begroeting en enkele min of meer actuele back-ups. Ik had een aantal persoonlijk zeer waardevolle (lees: tijdrovende) en zeer recente meetgegevens op schijf die verloren waren gegaan, maar ik had vierdubbele back-ups gemaakt. De ene stelde hier teleur, een andere door systeemuitval op school, een andere was corrupt, en eerst kon ik de vierde niet vinden, omdat ik die per ongeluk in de verkeerde map had gezet :-D . Had rm -r
niet vast komen te zitten op een schrijfbeveiligd bestand, dan zou de vierde zijn opgegeten sinds die map via sshfs in mijn ~
is gemount. Ik ben sindsdien veel voorzichtiger met dat soort dingen.
Het enige juiste antwoord is : herstel van uw bestand uit de back-up. Iedereen moet een back-up hebben. Voor echt belangrijke bestanden moet u twee back-ups hebben. Heb je dat niet? Nou, jammer, hier is een les geleerd ( Sorry dat ik zo hard klink, maar ik zit in de data opslag, en mensen maken geen back-up totdat ze wat belangrijke data kwijt zijn, dat is een gegeven feit. Dus ja, je ziet er dom uit, maar dat is bijna iedereen.
OK, je hebt geen back-up. je moet ophouden met het bestandssysteem dat het bestand RIGHT NOW bevatte. Elke schrijfactiviteit kan zeker de bestandsgegevens die may (alleen may) op schijf blijven.
als u de tragische fout maakte om slechts één partitie te gebruiken als zowel het root bestandssysteem als /home, betekent dit dat u must moet opstarten vanaf een ander apparaat. NOW.
Als uw bestand een gemeenschappelijk formaat heeft (Word-bestand, JPG, enz.), gebruik dan Photorec . Photorec kan de meest voorkomende bestandsformaten ophalen.
U kunt de eerder voorgestelde “ext3 undelete” methode uitproberen, maar u moet vertrouwd zijn met de opdrachtregel, basis linux innerlijke werking begrijpen, etc.
Als uw bestand van een of ander speciaal formaat is, pech hebben. Ik heb ooit een Perl programma geschreven om een schijf te scannen voor een aantal speciale bestanden, en het werkte vrij goed; maar je zult wat programmering moeten kennen om dat te kunnen doen, en je moet ook goed op je gemak zijn met linux.
Als het de standaard rm is, hoop ik dat je een back-up hebt. De procedure om een verwijderd bestand te herstellen zou voor elk bestandssysteem anders zijn, als dat al mogelijk is. Linux heeft geen ingebouwde “prullenbak”; als je eenmaal een bestand hebt verwijderd, is het helemaal niet meer nodig.
Hoe je het ook doet, je zult de computer willen loskoppelen – zo snel mogelijk, als de computer blijft draaien (zelfs om hem uit te schakelen) veroorzaakt het schrijven naar de schijf en vergroot de kans dat sommige blokken die vroeger door het bestand werden bezet, worden overschreven. Als u dat hebt gedaan, kunt u het apparaat in een andere computer plaatsen, een live CD herstarten (zorg ervoor dat u het apparaat niet koppelt tenzij u het alleen-lezen koppelt), of de harde schijf verwijderen en naar een specialist voor gegevensherstel brengen.
Stel uw verwachtingen laag. Als er iets over de ‘verwijderde’ data heen geschreven is, ben je het kwijt.
Ik heb een kleine hoeveelheid herstel gedaan en de beste tools die ik gevonden heb zijn vaak ontworpen naar bepaalde formaten. Bijvoorbeeld ‘photorec’ was geweldig toen ik tienduizenden jpegs wilde laten herstellen. Recuva heeft me ook al eerder geholpen en is misschien wel je beste keuze. (Het is gratis, laat je niet misleiden door hun advertenties)
Aan het eind van de dag, als wat je hebt verloren belangrijk is, neem je de schijf offline en stop je met schrijven. Gebruik elk stukje recovery-software dat je kunt vinden totdat je je gegevens terugkrijgt of het stopt met de moeite waard te zijn. Als het echt belangrijk is, stuur het dan naar professionals voor een hoge prijs.
Als je al eerder geluk hebt gehad met een tool, probeer het dan nog eens, gezien je er bekend mee bent. Aan het eind van de dag zouden ze niet naar schijf moeten schrijven en dus kun je software gebruiken totdat je er een hebt gevonden die werkt.
Als je een applicatie hebt geopend die op dit moment het bestand leest, zoals VLC of LibreOffice, dan heeft dit geweldige L&U.SO antwoord me uit deze puinhoop geholpen. Hier is een alternatieve methode om hetzelfde te doen.
Het algemene idee is om de link te vinden in /proc/PID/fd/DESCRIPTOR_NUMBER
en deze terug te kopiëren naar de oorspronkelijke locatie. Gebruik ps aux | grep APP_NAME
om de PID te vinden en dan ls -la /proc/PID/fd/
om de juiste DESCRIPTOR te vinden.
Als het niet wordt overschreven door andere gebruikers, dan heb je geluk. Ik heb per ongeluk mijn cpp-bronbestand gewist en een hulpmiddel genaamd foremost gebruikt, waarmee ik 60G cpp-afval van de schijf kon herstellen. Uiteindelijk heb ik mijn bestand hersteld door die brokstukken stuk voor stuk in elkaar te zetten. Ik denk dat het een bepaald patroon scant voor een specifiek bestandstype en alle inodes op de schijf doorkruist om bestanden te herstellen! Probeer het maar eens!
Het “juiste” antwoord is om aan te nemen dat er geen methode is om betrouwbaar te herstellen, en in plaats daarvan te herstellen van back-ups of een gekloond systeem of opnieuw te installeren.
TestDisk is een geweldig hulpmiddel, en er zijn andere manieren om sommige gegevens van de fysieke schijf te kunnen redden, afhankelijk van het bestandssysteem en de recentie van de verwijdering, maar de tijd en de pijn kunnen gewoon te groot zijn, dus KEEP BACKUPS (en ook te testen of ze geldig en herstelbaar zijn)!
Hier is een geweldig document voor u. Je vindt er een heleboel praktische tips.
BTW, er zijn twee groepen mensen:
Gefeliciteerd, je bent net gepromoveerd tot groep 2. ;-)
Als je per ongeluk het bestand van Linux hebt verwijderd dan kun je dit commando gebruiken:
find /root -name "search text" -type f -exec mv {} "/home" \;
in plaats van search text
je kunt de bestandsnaam zetten en de map opgeven waar je het bestand wilt herstellen in plaats van /home
.
Je kunt dit script proberen. Werkt mooi en bedoeld om te worden gebruikt in plaats van rm en im gebruiken het nu uitgebreid. https://github. com/nateshmbhat/safe-rm
rm
Ik had vorige week hetzelfde probleem en ik heb veel programma’s geprobeerd, zoals debugfs, photorec, ext3grep en extundelete. ext3grep was het beste programma om bestanden te herstellen. De sintax is heel eenvoudig:
ext3grep image.img --restore-all
of:
ext3grep /dev/sda3 --restore-all --after date -d '2015-01-01 00:00:00' '+%s' --before `date -d ‘2015-01-02 00:00:00’ ‘+%s’
Deze video toont een mini-tutorial die je kan helpen.