Re: Problem re-shaping RAID6
From: Neil Brown <hidden>
Date: 2010-06-13 23:15:18
On Sun, 13 Jun 2010 15:15:08 -0400 Jérôme Poulin [off-list ref] wrote:
quoted hunk ↗ jump to hunk
I had problems reshaping my RAID6 down 1 disk today and found a problem in Grow.c: diff -udpr mdadm-3.1.2/Grow.c mdadm-3.1.2-critical-section/Grow.c--- mdadm-3.1.2/Grow.c 2010-03-09 23:31:39.000000000 -0500 +++ mdadm-3.1.2-critical-section/Grow.c 2010-06-13 14:57:44.000000000 -0400@@ -497,7 +497,7 @@ int Grow_reshape(char *devname, int fd, int rv = 0; struct supertype *st; - int nchunk, ochunk; + unsigned long nchunk, ochunk; int nlayout, olayout; int ndisks, odisks; int ndata, odata;After changing this I was able to re-shape the array, it seems it was overflowing and I had a message saying: root@billsshack:~/mdadm-3.1.2/ > ./mdadm --grow /dev/md0 --raid-devices=6 --backup-file=/mnt/data1/md-raid6-grow-backup.bak mdadm: Need to backup 4503599627350016K of critical section.. mdadm: /dev/md0: Something wrong - reshape aborted Now it works: root@billsshack:~/mdadm-3.1.2/ > ./mdadm --grow /dev/md0 --raid-devices=6 --backup-file=/mnt/data1/md-raid6-grow-backup.bak mdadm: Need to backup 20480K of critical section.. root@billsshack:~/mdadm-3.1.2/ > cat /proc/mdstat Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [faulty] [linear] md0 : active raid6 dm-6[0] dm-8[5] dm-5[4] dm-3[3] dm-4[2] dm-7[1] 7814041600 blocks super 0.91 level 6, 1024k chunk, algorithm 2 [6/5] [UUUUUU] [>....................] reshape = 0.0% (33792/1953510400) finish=1926.0min speed=16896K/sec Here's a nice output of GDB: Breakpoint 1, Grow_reshape (devname=0x7fffffffe390 "/dev/md0", fd=5, quiet=0, backup_file=0x7fffffffe3b8 "/mnt/data1/md-raid6-grow-backup.bak", size=1953510400, level=65534, layout_str=0x0, chunksize=0, raid_disks=6) at Grow.c:939 939 blocks = ochunk/512 * nchunk/512 * odata * ndata / a; (gdb) p ochunk/512 $9 = 2048 (gdb) p ochunk/512 * nchunk/512 $10 = -4194304
Thanks. I fixed this bug a slightly different way - blocks = ochunk/512 * nchunk/512 * odata * ndata / a; + blocks = (ochunk/512) * (nchunk/512) * odata * ndata / a; See http://neil.brown.name/git?p=mdadm;a=commitdiff;h=200871adf9e15d5ad985f28c349fd89c386ef48a I guess it is time to release a 3.1.3... Thanks, NeilBrown
(gdb) p nchunk
$11 = 1048576
(gdb) p ochunk
$12 = 1048576
(gdb) p ochunk/512
$13 = 2048
(gdb) p nchunk/512
$14 = 2048
(gdb) p 2048*2048
$15 = 4194304
(gdb) p 2048*2048*odata
$16 = 20971520
(gdb) p 2048*2048*odata*ndata
$17 = 83886080
(gdb) p 2048*2048*odata*ndata/a
$18 = 40960
(gdb) p ochunk/512 * nchunk/512 * odata * ndata / a
$19 = 9007199254700032
(gdb) p ochunk/512 * nchunk/512
$20 = -4194304
(gdb)
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html-- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html