X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=Create.c;h=909ac5da5fcba1fad615e402a4d9da503edee9bd;hb=b5c727dc1a55323f02e5f60a50bcecb866dd51ea;hp=c96b31950bc95c5c119e2de95906dddd1e726c5c;hpb=9b1fb67776d63a491df3e7aa13916cd122436e20;p=thirdparty%2Fmdadm.git diff --git a/Create.c b/Create.c index c96b3195..909ac5da 100644 --- a/Create.c +++ b/Create.c @@ -195,7 +195,7 @@ int Create(struct supertype *st, char *mddev, if (st && st->ss->external && sparedisks) { fprintf(stderr, Name ": This metadata type does not support " - "spare disks are create time\n"); + "spare disks at create time\n"); return 1; } if (subdevs > raiddisks+sparedisks) { @@ -234,8 +234,15 @@ int Create(struct supertype *st, char *mddev, case 10: case 6: case 0: - case LEVEL_LINEAR: /* linear */ if (chunk == 0) { + chunk = 512; + if (verbose > 0) + fprintf(stderr, Name ": chunk size defaults to 512K\n"); + } + break; + case LEVEL_LINEAR: + /* a chunksize of zero 0s perfectly valid (and preferred) since 2.6.16 */ + if (get_linux_version() < 2006016 && chunk == 0) { chunk = 64; if (verbose > 0) fprintf(stderr, Name ": chunk size defaults to 64K\n"); @@ -325,7 +332,7 @@ int Create(struct supertype *st, char *mddev, raiddisks, chunk, size*2, dname, &freesize, - verbose > 0)) { + verbose >= 0)) { fprintf(stderr, Name ": %s is not suitable for " @@ -368,6 +375,28 @@ int Create(struct supertype *st, char *mddev, warn |= check_ext2(fd, dname); warn |= check_reiser(fd, dname); warn |= check_raid(fd, dname); + if (strcmp(st->ss->name, "1.x") == 0 && + st->minor_version >= 1) + /* metadata at front */ + warn |= check_partitions(fd, dname, 0); + else if (level == 1 || level == LEVEL_CONTAINER) + /* partitions could be meaningful */ + warn |= check_partitions(fd, dname, freesize*2); + else + /* partitions cannot be meaningful */ + warn |= check_partitions(fd, dname, 0); + if (strcmp(st->ss->name, "1.x") == 0 && + st->minor_version >= 1 && + did_default && + level == 1 && + (warn & 1024) == 0) { + warn |= 1024; + fprintf(stderr, Name ": Note: this array has metadata at the start and\n" + " may not be suitable as a boot device. If you plan to\n" + " store '/boot' on this device please ensure that\n" + " your boot-loader understands md/v1.x metadata, or use\n" + " --metadata=0.90\n"); + } close(fd); } } @@ -509,7 +538,7 @@ int Create(struct supertype *st, char *mddev, assume_clean ) { info.array.state = 1; /* clean, but one+ drive will be missing*/ - info.resync_start = ~0ULL; + info.resync_start = MaxSector; } else { info.array.state = 0; /* not clean, but no errors */ info.resync_start = 0;