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;