Jean-Francois,

It is a bug that the index files are removed for 'strategy skip' dles.
The attached patch fix it.

Jean-Louis

Jean-Francois Malouin wrote:
Hi,

Last Friday we got bitten by a rather vicious raid controller
firmware/codeset that corrupted some of our raidsets when a disk
failed in the array and the controller started a rebuild. Seeing that
I quickly disabled some of DLEs involved by either commenting them out
or inserting a `strategy skip' stanza in the dumptypes while we
researched/solved the issue.
This is with amanda-2.6.1p2 both on clients and servers.

Once the firmware issue was sorted out and the affected raidsets
rebuilt I tried to restore them as they were prior to the failure
just to see that the index files for those DLEs had disappeared.
I had to retrieve them from the backups, but that made me a little
nervous that something else was at work. Of course I could have used
amfetchdump rather than amrecover, but that begs the question:

What is the `proper' way to deal with a situation like this:
commenting away the DLEs or use 'strategy skip'?

I'm quite please to say: I restored of 3TB of data with no glitch
whatsoever once the index files were put back in place. Amanda is quite a nice piece of software!

thanks,
jf

diff --git a/server-src/amadmin.c b/server-src/amadmin.c
index 1af5386..b6bd60a 100644
--- a/server-src/amadmin.c
+++ b/server-src/amadmin.c
@@ -1037,6 +1037,7 @@ find(
     char *sort_order = NULL;
     find_result_t *output_find;
     char *errstr;
+    disk_t *dp;
 
     if(argc < 3) {
 	g_fprintf(stderr,
@@ -1082,6 +1083,11 @@ find(
     } else {
 	start_argc=4;
     }
+
+    /* Enable all 'strategy skip' dles */
+    for (dp = diskq.head; dp != NULL; dp = dp->next) {
+	dp->todo = 1;
+    }
     errstr = match_disklist(&diskq, argc-(start_argc-1), argv+(start_argc-1));
 
     output_find = find_dump(&diskq); /* Add deleted dump to diskq */
diff --git a/server-src/amindexd.c b/server-src/amindexd.c
index f20a914..3c35add 100644
--- a/server-src/amindexd.c
+++ b/server-src/amindexd.c
@@ -682,6 +682,7 @@ check_and_load_config(
     char *conf_tapelist;
     char *conf_indexdir;
     struct stat dir_stat;
+    disk_t *dp;
 
     /* check that the config actually exists */
     if (config == NULL) {
@@ -706,6 +707,11 @@ check_and_load_config(
 	return -1;
     }
 
+    /* Enable all 'strategy skip' dles */
+    for (dp = disk_list.head; dp != NULL; dp = dp->next) {
+	dp->todo = 1;
+    }
+
     conf_tapelist = config_dir_relative(getconf_str(CNF_TAPELIST));
     if(read_tapelist(conf_tapelist)) {
 	reply(501, _("Could not read tapelist file %s!"), conf_tapelist);
diff --git a/server-src/amtrmidx.c b/server-src/amtrmidx.c
index 9a28848..e7a62b9 100644
--- a/server-src/amtrmidx.c
+++ b/server-src/amtrmidx.c
@@ -110,6 +110,11 @@ main(
     read_diskfile(conf_diskfile, &diskl);
     amfree(conf_diskfile);
 
+    /* Enable all 'strategy skip' dles */
+    for (diskp = diskl.head; diskp != NULL; diskp = diskp->next) {
+	diskp->todo = 1;
+    }
+
     if (config_errors(NULL) >= CFGERR_WARNINGS) {
 	config_print_errors();
 	if (config_errors(NULL) >= CFGERR_ERRORS) {

Reply via email to