On Sun, Dec 27 2015, George Rapp wrote: > Please find attached the output of the following command: > > # tar -c -v -z --sparse -f dev-md4-mdadm-dump.tar.gz dev-md4-mdadm-dump > > Thanks again for your help! Thanks. If you apply the following patch to mdadm ( git clone git://neil.brown.name/mdadm apply patch make ) and then try to assemble with --update=revert-reshape, it should assemble as a 5-device array with no reshape happening. I probably want more safety checks before this goes upstream, but it is safe enough for you. NeilBrown diff --git a/super1.c b/super1.c index 10e00652c4ee..efc0491fc94d 100644 --- a/super1.c +++ b/super1.c @@ -1317,6 +1317,17 @@ static int update_super1(struct supertype *st, struct mdinfo *info, unsigned long long reshape_sectors; long reshape_chunk; rv = 0; + /* If the reshape hasn't started, just stop it */ + if (sb->reshape_position == 0 && + (__le32_to_cpu(sb->delta_disks) > 0 || + (__le32_to_cpu(sb->delta_disks) == 0 && + !(sb->feature_map & __cpu_to_le32(MD_FEATURE_RESHAPE_BACKWARDS))))) { + sb->feature_map &= ~__cpu_to_le32(MD_FEATURE_RESHAPE_ACTIVE); + sb->raid_disks = __cpu_to_le32(__le32_to_cpu(sb->raid_disks) - + __le32_to_cpu(sb->delta_disks)); + sb->delta_disks = 0; + goto done; + } /* reshape_position is a little messy. * Its value must be a multiple of the larger * chunk size, and of the "after" data disks. @@ -1363,6 +1374,7 @@ static int update_super1(struct supertype *st, struct mdinfo *info, sb->new_offset = __cpu_to_le32(-offset_delta); sb->data_size = __cpu_to_le64(__le64_to_cpu(sb->data_size) - offset_delta); } + done:; } } else if (strcmp(update, "_reshape_progress")==0) sb->reshape_position = __cpu_to_le64(info->reshape_progress);
Attachment:
signature.asc
Description: PGP signature