I accidentally deleted a file from my laptop. I'm using Fedora. Is it possible to recover the file?
9 Answers
I would advise against immediately installing some utility. Basically your biggest enemy here are disk writes. You want to avoid them at all costs right now.
Your best bet is an auto-backup created by your editor--if it exists. If not, I would try the following trick using grep if you remember some unique string in your .tex file:
$ sudo grep -i -a -B100 -A100 'string' /dev/sda1 > file.txt
Replace /dev/sda1
with the device that the file was on and replace 'string'
with the unique string in your file. This could take some time. But basically, what this does is it searches for the string on the device and then returns 100 lines before and after that line and puts it in file.txt
. If you need more lines returned just adjust the -B
and -A
options as appropriate. You might get a bunch of extra garbage returned, but you should be able to get your text back.
Good luck.
-
9Somebody showed me this a couple weeks after I switched to Linux, when I killed a text document I really needed -- it pretty much blew my mind Oct 3, 2010 at 21:03
-
24By the way,
-B100 -A100
can be replaced by equivalent-C100
(C for "context"). And I would definitely not use-i
if it were possible, but have-F
in its place. Aug 13, 2011 at 23:16 -
Probably unsurprisingly -- I assume the same disk blocks have been reused -- this method did not work for a file which I accidentally overwrote, not accidentally deleted.– ntc2Dec 29, 2013 at 7:41
-
Yes, on most file systems, the same blocks are reused when a file is merely overwritten. Note that some applications "work around this" in a sense by writing a temporary file first (which makes it a separate write), then renaming that file on top of the old file (which replaces the data from the user's point of view). This is done for a number of different reasons. Storage systems (including file systems) which do this all the time are termed copy on write.– userNov 6, 2014 at 10:27
-
1+1. If the system has another drive available (e.g. a SSD or HDD, a ramdisk or a USB stick) then I recommend writing the output to that rather than to the same drive you're trying to recover from. As this answer says "Basically your biggest enemy here are disk writes". If you don't have another drive available, you can quickly create a tmpfs on /mnt with
mount -t tmpfs none /mnt
(default is to make a ramdisk with size equal to half of your RAM. you can change that with-o size=nnnn
option)– casNov 29, 2021 at 7:05
It is possible, it's just going to be a hassle.
UPDATE: before you try this method, please have a look at Steven's answer.
You're going to need the testdisk package, a lot of disk space and a lot of time.
PhotoRec, a part of TestDisk, can recover files from almost any disc. PhotoRec does support finding .tex
files.
First, install testdisk by running
yum install testdisk
note: You're going to need a lot of free space on another drive, where you can save recovered files.
Recover all the deleted files on your disc by running photorec
on the free space of the disc.
sudo photorec
and follow the instructions... ( remember not to save the files to the same disc you are recovering from )
After the process has completed, all the recovered files should be in one directory, where you should run:
find -name '*.tex' > filelist
This will output a list of files that might be the one you lost. You will have to check all of them, as the filenames will be lost.
-
13photorec is a good util, I would just be worried about the disk writes that are going to happen during install. Is there anyway to get this as a standalone executable that can run from external media?– Steven DOct 3, 2010 at 20:13
-
2Yes, you are very right. I don't know about a standalone executable, but one could try using some live-cd?– StefanOct 3, 2010 at 20:21
-
2to cut down on the files recovered with Photorec, the third screen in will give a [File Opt] select this. You can from a list select what file types you want to or do not want to be recovered. Oct 3, 2010 at 20:39
Many text editors keep backup files. If you are really lucky, there might be something like yourfile.tex~ including a previous version of your file.
There are other data recovery tools and the most effective are foremost, photorec, scalpel and magic rescue. (I'm assuming that the 'grep' trick told here is not enough) Here you can find some tutorials about how to use them:
http://www.howtogeek.com/howto/15761/recover-data-like-a-forensics-expert-using-an-ubuntu-live-cd/
NOTE: I added this answer regarding some other question about deleted database files (MySQL server) which was closed and pointed to this one. I believe it can be useful in some other similar situations too (as far as some process still holds the file descriptors open).
If your process is still runnig then you can find your files in /proc/<pid>fd/
and just copy them. Send SIGSTOP
first to the process group. Copy the files. Build new instance on side and keep this one stopped or kill -9
it and put the files back on their places. InnoDB will recover by its own when run but if there was some MyISAM than you'll have to do this manually.
In any case I'd stop working on the device being used as soon as possible to avoid any disk writes, and boot into a dedicated recovery OS, like SystemRescueCd, which is a Live-CD so you can mount your disk read-only in order to prevent further data loss.
Those distros include a lot of recovery tools mentioned by others, and you can install most missing.
I always tend to have a CD with a recent version of SystemRescueCd in my external USB reader, just in case.
I had accidentally deleted my sqlite db file.
What I did to find out the file was,
Opened the location /proc/
in a file browser and searched for the deleted sqlite db file over there.
I found out that file in a search result. Copied that file from there to my old place.
I had the same problem two years ago and I tried a lot of programs, like debugfs, photorec, ext3grep and extundelete. ext3grep was the best program to recover files. The syntax is very easy:
ext3grep image.img --restore-all
or:
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’
This video is a mini tutorial that can help you.
If you have no backup a 3rd party Disk Recovery Tool might recover some or all of the data but you must stop using the machine now. The trashed files are now available for your system to overwrite them. Once they are overwritten it's prohibitively expensive to recover the data. I've had success using uflysoft data recovery(there are other Mac OS data recover applications)- you must have a "recovery drive" (not your main drive or drive you a scavenging from) on which to save the recovered data. You boot from the Data Recovery disk (system)