Thread (4 messages) 4 messages, 2 authors, 2020-06-11

Re: mdadm failed to create internal bitmap

From: Jonas Fisher <hidden>
Date: 2020-05-28 07:44:58

Hi,

I've tried the latest version of mdadm

and the problem still exists.

I believed it was because in add_internal_super1, variable "room"

overflowed that made it become a negative value,

and if room less than 3 * 2 and also __le32_to_cpu(sb->max_dev) <= 384

room would become 6, and max_bits became extremely small,

unfortunately, this is a 2T array, so the bitmap creation failed.

I still wondered, why would mdadm stored the value (if specified)

to rdev->sectors other than just make it to the largest.

In Grow_reshape (Grow.c)

		/* Update the size of each member device in case
		 * they have been resized.  This will never reduce
		 * below the current used-size.  The "size" attribute
		 * understands '0' to mean 'max'.
		 */
		min_csize = 0;
		for (mdi = sra->devs; mdi; mdi = mdi->next) {
			sysfs_set_num(sra, mdi, "size",
				      s->size == MAX_SIZE ? 0 : s->size);
                                                                ^^^^^^^^

Thanks,


‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On 2020年5月26日Tuesday 18:14, antlists [off-list ref] wrote:
On 26/05/2020 04:40, Jonas Fisher wrote:
quoted
Hi all,
I got a raid1 composed with 2 disks
/dev/sda -- 2T
/dev/sdb -- 4T
mdadm version is 3.3 and md metadata version is 1.0
That's a well ancient mdadm, you need to upgrade ...
quoted
At first, I was only using 1T of the each disk,
then I grew the array recently with the command
mdadm --grow /dev/md1 --size=1951944704K
I also tried to add the internal bitmap after expansion finished
mdadm --grow /dev/md1 --bitmap=internal
But I got the following message
mdadm: failed to create internal bitmap - chunksize problem.
I found that Avail Dev Size in superblock examine of two disks
are the same, same as the value I set when I expanded the array (1951944704K).
Makes sense, it's a mirror ...
quoted
Then I found that in mdadm bitmap chunksize calculation,
in function add_internal_bitmap1 (super1.c)
variable "room" and and "max_bits" seems to be overflowed under this situation
Could well be fault of the old mdadm ...
quoted
I was wondering is this because mdadm set the size of the rdevs in the array
before doing expansion (in function Grow_reshape)
that caused the sb->data_size not equals to actual raw device size
and consequently led to bitmap chunksize calculation error
or it is simply a data type issue.
Thanks,
Download and run a new mdadm. If the problem still persists, then I
guess the mdadm guys will take a look.

https://raid.wiki.kernel.org/index.php/Linux_Raid

https://raid.wiki.kernel.org/index.php/A_guide_to_mdadm#Getting_mdadm

It seems odd to be mirroring a 2TB and 4TB, but never mind. It's not
(that much) a problem if you're using desktop drives for a mirror, but
if you do get a new 4TB drive, read the advice on the website and make
sure you get a proper raid drive.

Cheers,
Wol
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help