Re.: UNdeleting files

Istvan Mohos istvan at hhb.UUCP
Thu Aug 2 22:45:08 AEST 1990



peram at cs.tamu.edu (Suresh B Peram) writes:
>   I have lost a whole directory containing
>   important information while running a shell-script...
>   I want to know where I can find the Super Block.

Well, you're not the first one this happened to.  Here is what
someone else had to say about it a while back (about a year ago):

:Subject: Re: Can you recover deleted files in Unix ?!?
:From: kellow at ndcheg.cheg.nd.edu (John Kellow @ Dep't of Chemical Eng., Univ. of Notre Dame)
:(100 lines) More? [ynq] kellow at ndcheg.cheg.nd.edu (John Kellow) writes:
:
:>I need some help.  Maybe this questions has been covered but I can't
:>remember seeing anything about it before.  Is there any way to recover
:>deleted files in System V.2 Unix?  I typed rm * when I thought I was
:>in the /tmp directory but guess where I was - that's right, my home
:>directory.  Unfortunately there were some important changes that
:>haven't been backed up.  I was the only person using the computer at
:>the time, and I immediately unmounted the file system.  My manual
:>entry for rm says something to the the effect that if a directory
:>entry was the last link count for a file then the file is destroyed -
:>does this mean data and everything?  Please tell me it isn't so.  I'll
:>be eagerly awaiting any replies.
:
:Well, in answer to my own question - I did recover the important data
:that I had deleted.  I guess the answer would be no, you can't
:"undelete" files in SYSV.2 Unix but you can recover individual blocks
:of data.  It took a few hours of trying to decipher the manuals and
:some trial and error but I think I've got it figured out and its not
:too complicated (someone correct me if I'm wrong).  The actual blocks
:of data are not removed, only the inode entry.  Since the inode entry
:contains all of the information as to what blocks belong to what file
:and in what order, you can't very well "undelete" the file but the
:data might still be there and you can piece it back together by hand.
:The names of the deleted files are not removed from the directory but
:the inode number is set to zero, so all that gives you is the list of
:which files were deleted.  The important information is the free list.
:The superblock contains a list of the 50 most recently freed blocks
:and the address of the next block in the list.  It seems that the last
:block freed will be the first block allocated, so you have to act
:fast!  Luckily I synched the disks and umounted the file system as
:soon as my mistake occured.  One more problem is that once the 50
:entries of free blocks in the superblock are filled, the free list
:will be copied into the next block to be freed, so that the free list
:space in the superblock can be used again.  In other words, for every
:50 blocks of space freed, 1 of those blocks will be used to contain
:the next block in the freelist.  That means that there's a very good
:chance that some of your data will be lost.  Now the good news,
:recovering the data is actually pretty simple (this all has to be done
:as the root user):
:
:	-Examine the Superblock of the file system with fsdb
:	 typing 512B.p0e will give something like this:
:
:0001000:     248       0   15760      32       0    1066       0    3584
:0001020:       0    3583       0    3615       0    3614       0    3613
:0001040:       0    3612       0    3611       0    3610       0    3609
:0001060:       0    3608       0    3607       0    3606       0    3605
:0001100:       0    3604       0    3603       0    3602       0    2496
:0001120:       0    3675       0    3684       0    3683       0    3682
:...
:
:	-248 is the # of blocks in the inode list,  15760 is the
:	 number of blocks in the file system,  32 is the number of
:	 entries in the free list and the next 50 numbers are the free
:	 blocks (but only the first 32 make up the current list)
:
:	-1066 is the first block in the free list and indicates the
:	 next block in the list, so if you want to recover more than
:	 the number of blocks in the current list(32) you would look
:	 in block 1066 and that would contain another free list with
:	 50 free blocks, with the first entry pointing to the next
:	 block in the list, etc.
:
:	-from what I understand, block 1066 was one of the blocks
:	 freed up but now it contains part of the free list so you
:	 can't recover that data
:
:	-write down the numbers of the blocks you want to recover and
:	 use bcopy to copy those blocks into files on another file system
:
:	-for example, to recover block 3584 type bcopy and answer the
:	 questions:
:	 bcopy
:	 TO: 3584 (this makes a file called 3584 in the current file system)
:	 OFFSET: 0
:	 FROM: /dev/fp003 (the name of the partion you're recovering from)
:	 OFFSET: 7168 (my version of bcopy goes by 512 byte blocks so
:	 I have to multiply 3584 by 2)
:	 COUNT: 2 (2 512 byte blocks or 1 1024 byte logical disk block)
:	 (it keeps asking FROM: so just press return twice to exit)
:
:	-Thats it, just use emacs or vi to look at the blocks and
:	 piece them back together, blocks belonging to the same file
:	 should appear consecutively in the free list but you don't
:	 know what order they should go in - thats not too difficult
:	 to figure out with text files but I guess binary files are
:	 another story (luckily I didn't need to recover any of those)
:	 
:Well, this explanation turned out longer than I thought but maybe it
:will help someone else in a similar situation.  I think most of this is
:standard System V.2 but some of it may be specific to my system.  I'd
:appreciate any comments anyone has.  Maybe there's a better way to do
:this or it seems to me that you could write a simple shell script or
:program to automate this procedure ( I hope I didn't go to all this
:trouble if there's already something that does this!).
:
:John Kellow
:kellow at ndcheg.cheg.nd.edu

-- 
        Istvan Mohos
        ...uunet!pyrdc!pyrnj!hhb!istvan
        RACAL-REDAC/HHB 1000 Wyckoff Ave. Mahwah NJ 07430 201-848-8000
======================================================================



More information about the Comp.unix.wizards mailing list