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.

I have a RAID60 that I want to expand.

The current is: 2 axles each having 9 disks + 2 spares.

The future is: 4 axles each having 10 disks + 1 spare.

So I need to do some --grow to reshape the drives.

I thought this would be enough:

mdadm -v --grow /dev/md1 --raid-devices=10 --backup-file=/root/back-md1
mdadm -v --grow /dev/md2 --raid-devices=10 --backup-file=/root/back-md2
mdadm -v --grow /dev/md0 --raid-devices=4 --add /dev/md3 /dev/md4

The last command works, but the 2 first commands fail with:

mdadm: Need to backup 7168K of critical section..
mdadm: /dev/md2: Something wrong - reshape aborted

How can I --grow a RAID6 to use more devices?

Info about the system:

$ mdadm --version
mdadm - v3.2.5 - 18th May 2012
$ uname -r
3.5.0-17-generic

Makefile to reproduce the problem:

all:        install_parallel createmd0 createmd3 createmd4

install_parallel:
    parallel --version || wget -O - pi.dk/3 | bash

loop:
    # make enough loop-devices
    seq 0 50 | parallel mknod -m 660 /dev/loop{} b 7 {} || true
    seq 0 50 | parallel dd if=/dev/zero of=l{} bs=1M count=1
    seq 0 50 | parallel losetup -f l{}

createmd1: loop
    mdadm --create /dev/md1 -c 128 --level=6 --raid-devices=9 -x 2 /dev/loop1? /dev/loop1

createmd2: loop
    mdadm --create /dev/md2 -c 128 --level=6 --raid-devices=9 -x 2 /dev/loop2? /dev/loop2

createmd3: loop
    mdadm --create /dev/md3 -c 128 --level=6 --raid-devices=10 -x 1 /dev/loop3? /dev/loop3

createmd4: loop
    mdadm --create /dev/md4 -c 128 --level=6 --raid-devices=10 -x 1 /dev/loop4? /dev/loop4

createmd0: loop createmd1 createmd2
    mdadm --create /dev/md0 -c 512 --level=0 --raid-devices=2 /dev/md1 /dev/md2

grow:
    mdadm -v --grow /dev/md1 --raid-devices=10 --backup-file=/root/back-md1
    mdadm -v --grow /dev/md2 --raid-devices=10 --backup-file=/root/back-md2
    mdadm -v --grow /dev/md0 --raid-devices=4 --add /dev/md3 /dev/md4

info:
    mdadm --version
    uname -r

clean:
    mdadm --stop /dev/md0 /dev/md? || true
    seq 0 50 | parallel losetup -d /dev/loop{} || true
    seq 0 50 | parallel rm l{}
share|improve this question

1 Answer 1

up vote 1 down vote accepted

NeilBrown (neilb (o) suse.de) answered this by email.

The problem is the loopback-devices are too small. 1 MB is too little. If size is changed to 30MB it works:

seq 0 50 | parallel dd if=/dev/zero of=l{} bs=30M count=1
share|improve this answer

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.