1

I am trying to convert a 6 disk raid6 mdadm array to a 6 disk raid10 array. After hitting an mdadm: Impossible level change requested, I decided to try with raid5, and so ran mdadm --grow --level=5 and then mdadm --grow /dev/md0 -n 5 successfilly. However, when I ran mdadm --grow /dev/md0 --level raid10, I hit the same error again. I decided to go from raid5 -> raid4 -> raid0 -> raid10, but for this too work, I need to have 3 disks at the raid0 stage, as I only have 6 disks.

However, after I managed to resize the array to be the suggested size for mdadm --grow /dev/md0 -n 3, I get the following error:

mdadm: Cannot set new_offset for /dev/sda12

When I remove /dev/sda12 from the array, I get the same error, but for a different disk.

How do I fix/work around this error, or do I have to nuke the array and start a new one?

7
  • I think it's not posiible to live migrate from raid 6 to 10. from 5 to 0 it's possible but you need to decrase array size, and filesystem size. Creating new array will be quickly as converting. Jun 11, 2017 at 10:39
  • @KrzysztofStasiak I have already live migrated from raid6 -> raid5, and I have decreased the array size. Since I'm using GPT on top of the array, resizing the actual data is a bit more tricky (and throws up many scary errors), but the error message saying the array was too large has been replaced with the error. The difficulty I'm having is in removing disks.
    – Cyclic3
    Jun 11, 2017 at 10:42
  • Do you decrease file system size before change array size? Is migration from 6 to 5 ended success? Jun 11, 2017 at 10:47
  • @KrzysztofStasiak The migration went fine between raid6 and raid5, and I lost no data.
    – Cyclic3
    Jun 11, 2017 at 10:50
  • Ok, you have raid5 on 6 disk. I think you need to decrase filesystem size to 3 disk, and then migrate to raid0 with 3 drives. and then migrate to 10 specyfing 6 disk. Jun 11, 2017 at 10:59

1 Answer 1

3

Converting from raid5 to raid10 need to convert raid5 -> raid0 and then raid0 -> raid 10.

You need to have array size smaller than target raid10 ( it will be smaller than raid 5).

To convert you need to specify disk count and target level:

mdadm --grow /dev/md0 --level=0 --raid-devices=3 --backup-file=md0.backup

(i suggest to do backup file)

you can monitor it by cat /proc/mdstat if by some time (20 mins) process gets stuck on reshape = 0.0% you need to use --continue:

mdadm --grow /dev/md0 --level=0 --raid-devices=3 --backup-file=md0.backup --continue

3
  • Sorry it took so long to mark as answer, I wanted to check it didn't kill everything first :)
    – Cyclic3
    Jun 11, 2017 at 15:22
  • I had a similar problem (same error: Cannot set new_offset) when shrinking a RAID5 array by one disk. I pondered a long time why it doesn't work when finally some digging in the mdadm source code brought me to the conclusion that it was because I didn't use the --backup-file argument. I didn't think it would make a difference, but apparently it does.
    – mnme
    Apr 7, 2019 at 16:19
  • It is possible to make grow without backup-file, but not at all, i sugest to allways use backup-file. It could say that you need backup-file. Apr 11, 2019 at 11:50

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .