BBS水木清华站∶精华区

发信人: embonnie (终日乾乾), 信区: Linux        
标  题: [文章]通过mc恢复被删除文件[转载] 
发信站: BBS 水木清华站 (Tue Oct  3 22:44:38 2000) 
 
是呀,你们都通过root登录,所以你们删除了不少信件之后就后悔莫及了。 
为了避免国家分配给清华每年最多只能自杀两个人的指标被超越,所以 
特意献上下文,也为清华和其他院校的人做点人道主义的贡献。嘿嘿... 
 
URL:http://linuxmonth.com/issue2/articles/undelete/undelete.html 
================================================================= 
标题:通过mc恢复被删除文件 
作者:William Stearns 
 
File Recovery 
by: William Stearns 
 
Recovering Deleted Files with "mc" 
 
There wasn't anything unusual about getting a call at 7pm on a Friday;  
when one works at home, one is always accessible. What was unusual was  
the tone of voice on the other end; the stress level was unmistakeable.  
One of my coworkers was on the other end of the line explaining how an  
errant space in a script had, ahem, removed the entire home directory  
tree of one of our development machines. 
 
Once I had explained that Linux doesn't have a true undelete utility,  
we started to recover files from our backup tapes. By Monday morning,  
most everything was back as it should have been. 
 
In the stress of the moment, I had forgotten something. It is possible  
to recover deleted files from Linux systems, but it needs to be done  
soon after the files were nuked. Just like in Windows, if you wait too  
long, there's a chance the contents of the files will be overwritten. 
 
I had learned about this feature while working with the Midnight Commander  
file manager in 1998. The delete keystroke will either delete the file  
under the cursor, or all of the selected files if any are selected. I  
wanted to delete the file under the cursor but had forgotten that all of  
the files in my documents directory were selected - you can guess what  
happened. It certainly wasn't the file manager's fault; I acknowledged  
the request before thinking about the fact that multiple files were selected. 
 
I certainly thought about it afterwards! *smile* 
 
Steven Hirsch, a good friend and Linux mentor, was kind enough to explain  
how to use a (then specially-compiled version of) Midnight Commander to  
recover the files. It was more than a bit ironic that the tool that had  
erased my files with the blinding speed one finds in Linux was my best  
hope for getting them back. 
 
 
-------------------------------------------------------------------------------- 
 
While I'm sincerely hoping that you never see hundreds of needed files  
evaporating at high speed, I'd like you to be ready when that day comes.  
You'll probably want to do this as root; we'll be mounting and unmounting  
partitions and working with raw drive partitions. This may be especially  
necessary if, like in the following example, you'll be unmounting a partition  
like /home. 
 
Get a copy of Midnight Commander on your system.  
While it's certainly not the only program that could have the undelete ability,  
it's the program with which I'm most familiar. These days, MC contains the  
undelete code by default. If your distribution doesn't have it, get a copy  
from http://www.gnome.org/mc/ and install it. 
 
The best time to do this is before you delete the files - you want to make as  
few changes as possible to a filesystem from which you hope to recover files. 
 
Create a test file and delete it.  
You'll need to do this on a system where you can mount and unmount partitions a 
s needed - no fair doing this on your primary web server! 
 
Pick a partition other than your root partition (use the  
 
mount 
command to see what partitions are mounted). For this example, let's assume that  
/dev/sdd1 is mounted on /home. Create a test file with:  
 
echo "Just a test file" >/home/testfile 
rm -f /home/testfile 
 
If it turns out that the files are on your root partition (or worse yet, you only  
have one partition), you'll have to check back next month when I'll cover how to  
work safely with the root partition. 
 
Unmount the partition with the erased file(s).  
In this example, that can be accomplished with  
 
umount /dev/sdd1 
 
You should not attempt to undelete files from a mounted partition - you risk  
corrupting the drive. 
 
Start up Midnight Commander and select the files to recover.  
mc 
Inside mc, type:  
 
cd undel:/dev/sdd1 
. You can't do this anywhere else but mc. Using the "cd" command in mc normally  
does what it would at a shell prompt; it changes directories. This special syntax  
instructs mc to display all the undeleted files on that partition instead of the  
files in a directory. 
 
Wait a moment while it searches through that ext2 filesystem for deleted inodes  
(an inode holds the _contents_ of a file, but not the directory name, etc.). In  
a minute or so, you'll see a list of files with names like "23434632:2" in that  
window. The dates and times for the entries are the dates and times when that  
inode was deleted. I find it most useful to sort this window according to time:  
 
<F9>, r, s, m, <Enter> 
 
or  
<F9>, l, s, m, <Enter> 
 
 
You can use the <F3> "View" feature to look at the contents of the inode. Press  
<ins> on top of the files that have times around the time you think you deleted  
the file(s). This tags them to be undeleted in a moment. 
 
Undelete the files.  
In the other window (use <tab> to switch windows in mc), make an empty directory  
under /tmp, such as /tmp/deletedfiles.  
 
mkdir /tmp/deletedfiles 
 
Now switch back to your undel window and press <F5> to copy those files to your  
real filesystem. If you're done, you can leave mc with the <F10> key - see the  
legend at the bottom of the screen. 
 
This would also be a good time to remount the /home partition with  
 
mount /home 
 
At this point you'll probably want to look at each one and decide what the real  
name should be. Now that the files are in /tmp/deletedfiles, they can be manipulated  
just like any other file, such as:  
 
cd /tmp/deletedfiles 
mv 23434632:2 /home/testfile 
 
There's a chance you might get multiple copies of some of your files if you deleted  
that file more than once; you'll need to decide which is the one you want to keep. 
 
That's it! You've recovered a file from a Linux partition.  
 
There are a few more important notes about this process. First, this particular  
undelete trick only works for ext2 partitions. Second, if the files were deleted  
on a system running a 2.0.x kernel, the undelete process may be limited to recovering  
the first 12288 bytes of the file. There was a bug in the deletion process that  
didn't keep the entire file as a single unit when it was deleted. While it's possible  
that has been fixed in later 2.0.x kernels than I was using, I do know it has been  
fixed in 2.2.x kernels. 
 
 
-------------------------------------------------------------------------------- 
 
The credit for this feature go to Ted T'so and the other authors of the ext2 filesystem,  
and to Miguel de Icaza and the other MC authors. 
 
Many thanks also to Bob DeRosa, for graciously allowing me to republish this in LinuxMonth.  
 
-------------------------------------------------------------------------------- 
William is an Open-Source developer, enthusiast, and advocate from Vermont, USA. 
-------------------------------------------------------------------------------- 
 
-- 
 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.73.87.125] 

BBS水木清华站∶精华区