Re: convert raid10 to raid0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 08 Jul 2010 10:27:46 +0200
Tóth Csaba <csaba.toth@xxxxxxxxxxxxxxxx> wrote:

> 2010.07.08. 9:58 keltezéssel, Tóth Csaba írta:
> > 2010.07.08. 0:50 keltezéssel, Neil Brown írta:
> >> Then after you create the raid0, use the same command
> >>    mdadm -E /dev/sdc6
> >> to check the Data Offset again and make sure it is the same.
> >> I suspect it will be, so everything will be fine.
> >> However if it isn't don't try to access the array.   Post the details and I'll
> >> figure out what to do next.
> >>
> > 
> > It doesn't work, [...]
> 
> forget to explain what i did: my idea was to create a new array with
> --assume-clean, than kick out the knowed bad members:
> 
> minerva data-bck # mdadm --create /dev/md5 --assume-clean --metadata=1.1
> --level=10 --raid-devices=4 /dev/sdb6 /dev/sda6 /dev/sdc6 /dev/sdd6
> mdadm: /dev/sdb6 appears to be part of a raid array:
>     level=raid10 devices=4 ctime=Thu Jul  8 09:47:43 2010
> mdadm: /dev/sda6 appears to be part of a raid array:
>     level=raid10 devices=4 ctime=Thu Jul  8 09:47:43 2010
> mdadm: /dev/sdc6 appears to be part of a raid array:
>     level=raid10 devices=4 ctime=Thu Jul  8 09:47:43 2010
> mdadm: /dev/sdd6 appears to be part of a raid array:
>     level=raid10 devices=4 ctime=Thu Jul  8 09:47:43 2010
> Continue creating array? yes
> mdadm: array /dev/md5 started.
> minerva data-bck #
> minerva data-bck # man mdadm
> minerva data-bck # mdadm /dev/md5 --fail /dev/sda6 --fail /dev/sdc6
> mdadm: set /dev/sda6 faulty in /dev/md5
> mdadm: set /dev/sdc6 faulty in /dev/md5
> minerva data-bck # cat /proc/mdstat
> Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5]
> [raid4] [multipath] [faulty]
> md5 : active raid10 sdd6[3] sdc6[2](F) sda6[1](F) sdb6[0]
>       1434617856 blocks super 1.1 512K chunks 2 near-copies [4/2] [U__U]
> 
> 
> this is exactly the same layout as i had before, just the data offset
> doesn't match.
>

OK, there are two things you can do - both might be interesting.

1/ You can temporarily adjust the data offset by writing directly to sysfs.

   cd /sys/block/md5/md
   echo inactive > array_state
   echo 592 > dev-sdb6/offset
   echo 264 > dev-sdd6/offset
   echo readonly > array_state

   Now you should be able to examine you data and assure yourself that it is
   all there.  However this doesn't change the metadata so when you stop and
   restart the array the offset will be back where it started.

2/ hack the code in 'super1.c' and re-create the array.
   in write_init_super1, after the 'switch' statement that set data_offset,
   put
     if (strcmp(di->devname, "/dev/sdb6") ==0) sb->data_offset =  __cpu_to_le64(592);
     if (strcmp(di->devname, "/dev/sdd6") ==0) sb->data_offset =  __cpu_to_le64(264);

   ofcourse you should check that code and make sure you agree that I have
   written it correctly.

I plan to enhance mdadm so you can 'recreate' and array - it then takes
offsets etc out of current metadata and only changes the bits you ask it to
change.  Had I done this already this would have been a lot easier for you,
but unfortunately I haven't.

good luck,
NeilBrown

--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux