Re: MD array keeps resyncing after rebooting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 07/24/2013 03:50 PM, Francis Moreau wrote:

> I regenerated the initramfs in order to use the new binaries when
> booting and now I can see some new warnings:
> 
>   $ dracut -f
>   mdmon: Failed to load secondary DDF header on /dev/block/8:0
>   mdmon: Failed to load secondary DDF header on /dev/block/8:16
>   ...
> 
> I ignored them for now.

The message is non-fatal. But is certainly strange, given that you have
a LSI BIOS. It looks as if something was wrong with your secondary
header. You may try the attached patch to understand the problem better.

> Now the latest version of mdadm is used :
> 
>   $ cat /proc/mdstat
>   Personalities : [raid1]
>   md126 : active raid1 sdb[1] sda[0]
>         975585280 blocks super external:/md127/0 [2/2] [UU]
> 
>   md127 : inactive sdb[1](S) sda[0](S)
>         2354608 blocks super external:ddf

So you did another rebuild of the array with the updated mdadm?

> I run mdadm -E /dev/sdX for all RAID disks before and after reboot.
> I'm still having this warning:
> 
>    mdmon: Failed to load secondary DDF header on /dev/sda
> 
> You can find the differences below:
> 
> diff -Nurp before/sda.txt after/sda.txt
> --- before/sda.txt      2013-07-24 15:15:33.304015379 +0200
> +++ after/sda.txt       2013-07-24 15:49:09.520132838 +0200
> @@ -9,11 +9,11 @@ Controller GUID : 4C534920:20202020:FFFF
>    Redundant hdr : yes
>    Virtual Disks : 1
> 
> -      VD GUID[0] : 4C534920:20202020:80861D60:00000000:3F2103E0:00001450
> -                  (LSI      07/24/13 12:18:08)
> +      VD GUID[0] : 4C534920:20202020:80861D60:00000000:3F213401:00001450
> +                  (LSI      07/24/13 15:43:29)

This is weird. it looks as if the array had been recreated by the BIOS.
Normally the GUID should stay constant over reboots.

>           unit[0] : 0
>          state[0] : Optimal, Not Consistent
> -   init state[0] : Fully Initialised

Not Consistent and Fully Initialized - This looks as if the array didn't
close down cleanly. Is this the result of rebuilding the array with
mdmon 3.3-rc1?

Thinking about it - you did some coding of your own to start mdmon in
the initrd, right? Do you also make sure that mdadm -Ss is called after
umounting the file systems, but before shutdown? If not, an inconsistent
state might result.

> +   init state[0] : Not Initialised
>         access[0] : Read/Write
>           Name[0] : array0
>   Raid Devices[0] : 2 (0 1)
> diff -Nurp before/sdb.txt after/sdb.txt
> --- before/sdb.txt      2013-07-24 15:17:50.300581049 +0200
> +++ after/sdb.txt       2013-07-24 15:49:15.159997204 +0200
> @@ -9,11 +9,11 @@ Controller GUID : 4C534920:20202020:FFFF
>    Redundant hdr : yes
>    Virtual Disks : 1
> 
> -      VD GUID[0] : 4C534920:20202020:80861D60:00000000:3F2103E0:00001450
> -                  (LSI      07/24/13 12:18:08)
> +      VD GUID[0] : 4C534920:20202020:80861D60:00000000:3F213401:00001450
> +                  (LSI      07/24/13 15:43:29)

Again, new GUID. Did you recreate the array?

Regards
Martin

>From 4e689b7d63e21db21f5bbc0e06b011648265705d Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@xxxxxxxx>
Date: Thu, 25 Jul 2013 21:48:32 +0200
Subject: [PATCH] DDF: load_ddf_header: more error logging

Try to determine problem if load_ddf_header fails.
---
 super-ddf.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/super-ddf.c b/super-ddf.c
index 234d816..fdfc1d5 100644
--- a/super-ddf.c
+++ b/super-ddf.c
@@ -754,18 +754,24 @@ static int load_ddf_header(int fd, unsigned long long lba,
 	if (read(fd, hdr, 512) != 512)
 		return 0;
 
-	if (!be32_eq(hdr->magic, DDF_HEADER_MAGIC))
+	if (!be32_eq(hdr->magic, DDF_HEADER_MAGIC)) {
+		pr_err("%s: bad header magic\n", __func__);
 		return 0;
-	if (!be32_eq(calc_crc(hdr, 512), hdr->crc))
+	}
+	if (!be32_eq(calc_crc(hdr, 512), hdr->crc)) {
+		pr_err("%s: bad CRC\n", __func__);
 		return 0;
+	}
 	if (memcmp(anchor->guid, hdr->guid, DDF_GUID_LEN) != 0 ||
 	    memcmp(anchor->revision, hdr->revision, 8) != 0 ||
 	    !be64_eq(anchor->primary_lba, hdr->primary_lba) ||
 	    !be64_eq(anchor->secondary_lba, hdr->secondary_lba) ||
 	    hdr->type != type ||
 	    memcmp(anchor->pad2, hdr->pad2, 512 -
-		   offsetof(struct ddf_header, pad2)) != 0)
+		   offsetof(struct ddf_header, pad2)) != 0) {
+		pr_err("%s: header mismatch\n", __func__);
 		return 0;
+	}
 
 	/* Looks good enough to me... */
 	return 1;
-- 
1.7.1


[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux