Jeffrey,

It's a known bug, it was fix on 2007-09-19
You can try the attached patch or upgrade your server to 2.5.1p3.

Jean-Louis

jeffrey d anderson wrote:
I'm running amanda 2.5.0p2 on a RHEL3 server with numerous clients of various flavors. I recently needed to perform a recover and found a problem.


amrecover functions fine. I sethost and setdisk and setdate and it shows me what appears to be the correct list of available files. It finds the correct tape and starts doing its thing. It spaces to what it believes is the correct tape file and starts looking for the files to extract, and then comes back with the message that the files marked for extraction are not on the tape. This confused me quite a bit since the files were clearly listed in the interactive amrecover directory listing.

Then I looked at the amindextaped debug file and saw this at the end:


Scanning PhysicsSet159 (slot <none>)
amidxtaped:  37: restoring FILE: date 20070220 host client.lbl.gov disk hda1 l
ev 1 comp .gz program /sbin/dump
amidxtaped: Search of PhysicsSet159 complete

amidxtaped: time 77.476: Restoration finished
amidxtaped: time 77.477: pid 13321 finish time Thu Feb 22 10:10:33 2007


The problem is that this IS the wrong DLE. The correct tape file is the one AFTER this one, file 38 on the tape. I can space ahead to that file and then manually extract the correct files from it. But somehow amrecover is not doing the right thing. It reads the correct index files and shows me the files available for recovery, but is off by one when it spaces forward on the tape.

Has anyone else seen such a problem? I'm going to do some more debugging to see if this happens with all my DLEs. I know that amrecover has worked fine in the past.


Index: find.c
===================================================================
RCS file: /cvsroot/amanda/amanda/server-src/find.c,v
retrieving revision 1.33
retrieving revision 1.33.2.1
diff -u -r1.33 -r1.33.2.1
--- find.c	6 Jul 2006 13:13:15 -0000	1.33
+++ find.c	19 Sep 2006 19:34:27 -0000	1.33.2.1
@@ -782,7 +782,7 @@
     filenum = (off_t)0;
     passlabel = 1;
     while(get_logline(logf) && passlabel) {
-	if((curlog == L_SUCCESS || curlog == L_CHUNK) &&
+	if((curlog == L_SUCCESS || curlog == L_CHUNK || curlog == L_PARTIAL) &&
 				curprog == P_TAPER && passlabel){
 	    filenum++;
 	}
@@ -796,7 +796,7 @@
 	    }
 	}
 	partnum = "--";
-	if(curlog == L_SUCCESS || curlog == L_FAIL || curlog == L_CHUNK) {
+	if(curlog == L_SUCCESS || curlog == L_PARTIAL || curlog == L_FAIL || curlog == L_CHUNK) {
 	    s = curstr;
 	    ch = *s++;
 
@@ -889,6 +889,8 @@
 		    new_output_find->filenum=filenum;
 		    if(curlog == L_SUCCESS || curlog == L_CHUNK) 
 			new_output_find->status=stralloc("OK");
+		    else if(curlog == L_PARTIAL)
+			new_output_find->status=stralloc("PARTIAL");
 		    else
 			new_output_find->status=stralloc(rest);
 		    *output_find=new_output_find;

Reply via email to