summaryrefslogtreecommitdiff
path: root/mdadm.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2010-12-01 11:47:32 +1100
committerNeilBrown <neilb@suse.de>2010-12-01 11:47:32 +1100
commit87f26d14f75cf565a5885b2a3426499a48987ac3 (patch)
treeb68e93ac398edf4fc31ea5e2152155e1258391c2 /mdadm.c
parent417f346ee0cc59607a236fd4db8c79dee0825fb1 (diff)
Assemble: allow an array undergoing reshape to be started without backup file
Though not having the proper backup file can cause data corruption, it is not enough to justify not being able to start the array at all. So allow "--invalid-backup" to be specified which says "just continue even if a backup cannot be restored". Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'mdadm.c')
-rw-r--r--mdadm.c33
1 files changed, 22 insertions, 11 deletions
diff --git a/mdadm.c b/mdadm.c
index ea518f15..c5acd43e 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -60,6 +60,7 @@ int main(int argc, char *argv[])
int bitmap_fd = -1;
char *bitmap_file = NULL;
char *backup_file = NULL;
+ int invalid_backup = 0;
int bitmap_chunk = UnSet;
int SparcAdjust = 0;
struct mddev_dev *devlist = NULL;
@@ -945,6 +946,13 @@ int main(int argc, char *argv[])
backup_file = optarg;
continue;
+ case O(ASSEMBLE, InvalidBackup):
+ /* Acknowledge that the backupfile is invalid, but ask
+ * to continue anyway
+ */
+ invalid_backup = 1;
+ continue;
+
case O(BUILD,'b'):
case O(BUILD,Bitmap):
case O(CREATE,'b'):
@@ -1180,14 +1188,14 @@ int main(int argc, char *argv[])
if (array_ident->autof == 0)
array_ident->autof = autof;
rv |= Assemble(ss, devlist->devname, array_ident,
- NULL, backup_file,
+ NULL, backup_file, invalid_backup,
readonly, runstop, update,
homehost, require_homehost,
verbose-quiet, force);
}
} else if (!scan)
rv = Assemble(ss, devlist->devname, &ident,
- devlist->next, backup_file,
+ devlist->next, backup_file, invalid_backup,
readonly, runstop, update,
homehost, require_homehost,
verbose-quiet, force);
@@ -1211,7 +1219,7 @@ int main(int argc, char *argv[])
if (array_ident->autof == 0)
array_ident->autof = autof;
rv |= Assemble(ss, dv->devname, array_ident,
- NULL, backup_file,
+ NULL, backup_file, invalid_backup,
readonly, runstop, update,
homehost, require_homehost,
verbose-quiet, force);
@@ -1252,7 +1260,7 @@ int main(int argc, char *argv[])
r = Assemble(ss, a->devname,
a,
- NULL, NULL,
+ NULL, NULL, 0,
readonly, runstop, NULL,
homehost, require_homehost,
verbose-quiet, force);
@@ -1279,7 +1287,7 @@ int main(int argc, char *argv[])
do {
rv2 = Assemble(ss, NULL,
&ident,
- devlist, NULL,
+ devlist, NULL, 0,
readonly, runstop, NULL,
homehost, require_homehost,
verbose-quiet, force);
@@ -1301,12 +1309,15 @@ int main(int argc, char *argv[])
do {
acnt = 0;
do {
- rv2 = Assemble(ss, NULL,
- &ident,
- NULL, NULL,
- readonly, runstop, "homehost",
- homehost, require_homehost,
- verbose-quiet, force);
+ rv2 = Assemble(
+ ss, NULL,
+ &ident,
+ NULL, NULL, 0,
+ readonly, runstop,
+ "homehost",
+ homehost,
+ require_homehost,
+ verbose-quiet, force);
if (rv2==0) {
cnt++;
acnt++;