[Info-vax] ODS-5 data/file recovery

Hein RMS van den Heuvel heinvandenheuvel at gmail.com
Sun Feb 17 12:40:59 EST 2013


On Sunday, February 17, 2013 11:12:48 AM UTC-5, MG wrote:
> On 17-feb-2013 16:19, Hein RMS van den Heuvel wrote:
> 
:
> > But Marco, it might be as simple as changing one error exit 
> > to print a warning instead.

I just downloaded florian V1.3-1 and checked the code. It is as I suspect
:
      printf("*** not a Files-11 Structure Level 2 disk volume\n");
      SYS$EXIT(SS$_BADPARAM | 0x10000000);
:
Just drop the exit and see how far it gets.


> Speaking of which: What is your opinion of Florian, is it similar to DFU?

Having glanced over the Florian code it does pretty much what I expected it to do. I'm sure DFU does something very similar, possibly more robust/complete (no anal/disk/repair required, but suggested. Give it a go, but I expected the same result.


> Speaking of which, any things (with regard to DUMP) that you could 
> recommend me to look into, keep in mind and pay close attention to?

Your goal is to find the file header for the deleted file back.
The assumption is that the filename and the mapping pointers are untouched.
So make the fileheader valid again, and the file is back, just not in a directory which is easy to fix (ANAL/DISK/REPAIR or my 'enter' tool below).

But since DFU did not find it, it is likely gone.
This is to be expected because VMS returns a deleted file header and blocks into cached structures to optimize the creation of new file, re-using what was just freed. I suspect it even goes to the begin (LRU) of the cache not the end, for immediate re-use. Yikes for you. Hmm, maybe that can be fixed 20 years too late?


> > I would have to figure out how to string it back together, but I
> needless to say like the sound of that!

I hand-crafted mapping pointers at that time. Not pretty.


>> Also, peculiar assumption there (with regard to data recovery), as I 
> don't recall that I asked for anything that was "free", or did I? 

I share Hoff's experience that folks are will to keep you busy for hours talking about possibly recovering data and then nothing happens (money). You may be the good exception. I suspect there is at least a nice RX2620 available as reward, once everything is proven stable huh?  !? :-).

[enter.c below]
Groetjes, Hein

/*
**    enter.C    create directory entry for a file ID.
**
** Have fun, Hein van den Heuvel, HP 6/4/2002
*/
#include ssdef
#include rms
#include stdio
#include string
#include stdlib

main(int argc, char *argv[])
{
int             i, status, sys$parse(), sys$enter();
char            *p, expanded_name[256], resultand_name[256];
struct FAB      fab;
struct NAM      nam;

if (argc < 5) {
    printf ("Usage $%s [x]<file-id> [x]<file-seq> <file-rvn> <file-name>\n", argv[0]);
    return 268435456;
    } else {

    fab = cc$rms_fab;
    fab.fab$l_fop = FAB$M_NAM;
    fab.fab$l_dna = ".DAT";
    fab.fab$b_dns = strlen(fab.fab$l_dna);
    fab.fab$l_fna = argv[4];
    fab.fab$b_fns = strlen (argv[4]);
    fab.fab$l_nam = &nam;

    nam = cc$rms_nam;
    nam.nam$b_nop = NAM$M_NOCONCEAL;
    nam.nam$l_rsa = resultand_name;
    nam.nam$b_rss = 255;
    nam.nam$l_esa = expanded_name;
    nam.nam$b_ess = 255;

    status = sys$parse( &fab );
    if (status & 1) {
        i = atoi (argv[1]);
        nam.nam$w_fid_num = (short) i;
        nam.nam$b_fid_nmx = (unsigned char) (i >> 16);
        nam.nam$w_fid_seq = (short) atoi ( argv[2] );
        nam.nam$w_fid_rvn = (short) atoi ( argv[3] );
        status = sys$enter ( &fab );
        }
    return status;
    }
}




More information about the Info-vax mailing list