Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

mdadm does not seem to support growing an array from level 1 to level 10.

I have two disks in RAID 1. I want to add two new disks and convert the array to a four disk RAID 10 array.

My current strategy:

  1. Make good backup.
  2. Create a degraded 4 disk RAID 10 array with two missing disks.
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove one disk from the RAID 1 array.
  5. Add the available disk to the RAID 10 array and wait for resynch to complete.
  6. Destroy the RAID 1 array and add the last disk to the RAID 10 array.

The problem is the lack of redundancy at step 5.

Is there a better way?

share|improve this question
3  
Don't forget step 0. Make a good backup of everything. –  Anthony Lewis Jul 21 '09 at 18:28
    
I believe your steps are correct. You lose the redundancy during the period you're copying the data from one set to another. –  Kevin Kuphal Jul 21 '09 at 18:30
    
Is it possible to create a degraded 4disk RAID10? –  pauska Jul 21 '09 at 19:03
1  
Yes, you just use "/dev/hda missing /dev/hdb missing", because otherwise you lose one entire pair and it all falls apart. The "accepted answer" for this question, incidentally, is completely wrong and does not work. –  womble Jul 25 '09 at 1:03
    
I'm also looking for a good way to do this, and I think the method described in the question is the best I found so far. Mark Turner's answer doesn't help because it creates a 2-device array that can't be reshaped to 4 devices (the other 2 can only be added as spares). And Suresh Kumar's answer is the same as described in the question, except it won't work exactly like that; the missing devices have to be the 2nd and 4th, not the 3rd and 4th. About the steps in the question: I think step 5 has full redundancy, and step 6 has redundancy for half the data. I actually see the steps were renumbere –  aditsu May 5 '10 at 14:28
add comment

4 Answers

up vote 1 down vote accepted

With linux softraid you can make a RAID 10 array with only two disks.

0) Backup, Backup, Backup, Backup oh and BACKUP

1) Make the new array:

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

2) Mount the raid10 & rsync the RAID 1 with the new RAID 10. (this is only an example command, read the man pages)

rsync -arHx / /where/ever/you/mounted/the/RAID10

3) Fail the RAID, add the disk to the new RAID10

mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2

4) Add the removed disk to the RAID10

mdadm /dev/md1 --add /dev/sda2

5) Install GRUB on the new Array (Assuming you're booting from it). Some Linux rescue/boot CD works best.

6) Boot on new array. IF IT WORKED CORRECTLY Destroy old array and add the remaining disk to the new array.

mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1
share|improve this answer
    
Where do the four disks come into it? –  womble Jul 21 '09 at 19:30
    
Eh? I clearly state to create the array with 2 disks, copy the data, fail the raid 1 by removing one disk, add that disk to the RAID10, then boot to the RAID10, if it worked, destroy the RAID1 and move that last disk to the new RAID.... –  Mark Turner Jul 21 '09 at 19:33
2  
You edited your answer after my comment. Also, your procedure gives a two-disk RAID-10 with two spares... hardly a four-disk RAID-10. RAID-10 volumes can't be reshaped, either. –  womble Jul 21 '09 at 22:32
1  
I ran the commands as you provided them, and I end up with a two-disk RAID-10 with two spares, as shown by /proc/mdstat. This is on kernel 2.6.30, with mdadm v2.6.7.2. –  womble Jul 22 '09 at 3:55
2  
"mdadm: raid10 array /dev/md1 cannot be reshaped." This is also mentioned in the mdadm manpage. –  womble Jul 22 '09 at 21:32
show 2 more comments

Follow the same procedure as Mark Turner but when you create the raid array, mention 2 missing disks

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

And then proceed with other steps.

In short, create RAID10 with total 4 disks(out of which 2 are missing), resync, add other two disks after that.

share|improve this answer
add comment

Just finished going from LVM on two 2TB disk mdadm RAID 1 to LVM on a four disk RAID 10 (two original + two new disks).

As @aditsu noted the drive order is important when creating the array.

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing

Code above gives a usable array with two missing disks (add partition numbers if you aren't using whole disks). As soon as the third disk is added it will begin to sync. I added the fourth disk before the third finished syncing. It showed as a spare until the third disk finished then it started syncing.

Steps for my situation:

  1. Make good backup.

  2. Create a degraded 4 disk RAID 10 array with two missing disks (we will call the missing disks #2 and 4).

  3. Tell wife not to change/add any files she cares about

  4. Fail and remove one disk from the RAID 1 array (disk 4).

  5. Move physical extents from the RAID 1 array to the RAID 10 array leaving disk 2 empty.

  6. Kill the active RAID 1 array, add that now empty disk (disk 2) to the RAID 10 array, and wait for resync to complete.

  7. Add the first disk removed from RAID 1 (disk 4) to the RAID 10 array.

  8. Give wife go ahead.

At step 7 I think drive 1, 2, OR 4 can fail (during resync of disk 4) without killing the array. If drive 3 fails the data on the array is toast.

share|improve this answer
    
+1, especially for step 3 ;) –  Jack Douglas Jun 13 '13 at 12:26
add comment

I just migrated my raid1 to raid10 based on this answer and wrote up a very detailed step by step guide. For those that are interested you can read it here.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.