From: Neil Brown Date: Fri, 2 Jun 2006 06:58:39 +0000 (+0000) Subject: Avoid misdetection of overlapping partitions... X-Git-Tag: mdadm-2.5.1~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a255b69be733fa43fe34a9fc9785817a88e935d;p=thirdparty%2Fmdadm.git Avoid misdetection of overlapping partitions... As version-0.90 superblock don't record the superblock offset, it is possible for overlapping partitions, or a partition that starts on a 64K boundary in the whole device to result in mis-detection - one partition or device might be detected where the other was intended. To avoid this awkward possibility, we reject assembly attempts which seem to have two devices that are different but have the same version-0.90 superblock. To avoid this problem altogether, switch to version-1 metadata. Signed-off-by: Neil Brown --- diff --git a/Assemble.c b/Assemble.c index cb97f8cd..aa7eeb2b 100644 --- a/Assemble.c +++ b/Assemble.c @@ -514,6 +514,25 @@ int Assemble(struct supertype *st, char *mddev, int mdfd, best = newbest; bestcnt = newbestcnt; } + if (best[i] >=0 && + devices[best[i]].events == devices[devcnt].events && + devices[best[i]].minor != devices[devcnt].minor && + st->ss->major == 0 && + info.array.level != -4) { + /* two different devices with identical superblock. + * Could be a mis-detection caused by overlapping + * partitions. fail-safe. + */ + fprintf(stderr, Name ": WARNING %s and %s appear" + " to have very similar superblocks.\n" + " If they are really different, " + "please --zero the superblock on one\n" + " If they are the same, please remove " + "one from the list.\n", + devices[best[i]].devname, devname); + if (must_close) close(mdfd); + return 1; + } if (best[i] == -1 || devices[best[i]].events < devices[devcnt].events) best[i] = devcnt;