Re: MD array keeps resyncing after rebooting

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

 



On Thu, 01 Aug 2013 20:15:31 +0200 Martin Wilck <mwilck@xxxxxxxx> wrote:

> Hello Francis,
> > 
> > As you noticed the state is "Not Consistent". In my understanding it
> > becomes "Consistent" when  the array is stopped.
> 
> Correct.
> 
> > I checked during the shudown process that the array is correctly
> > stopped since at that point I got:
> > 
> > # mdadm -E /dev/sda | egrep "state"
> >         state[0] : Optimal, Consistent
> >    init state[0] : Fully Initialised
> 
> This looks as it should, actually. This looks as if md is doing what
> it's supposed to.
> 
> > After rebooting, it appears that the BIOS changed a part of VD
> > GUID[0]. I'm not sure if that can confuse the kernel and if it's the
> > reason why the kernel shows:
> > 
> >     [  832.944623] md/raid1:md126: not clean -- starting background
> > reconstruction
> 
> The BIOS obviously changes the meta data. The GUID itself shouldn't be
> the problem as long as it's consistently changed everywhere, but it's
> certainly strange to change it - it's meant to be constant and unique
> for this array.
> 
> It would be important to see the state of the meta data after md
> shutdown and immediately after boot (before md actually starts), so that
> we can exactly see what the BIOS has done.
> 
> > but this is obviously where a resync is triggered during each reboot
> > whatever the initial state of the array. The kernel message is
> > actually issued by drivers/md/raid1.c, in particular:
> > 
> >         if (mddev->recovery_cp != MaxSector)
> >                 printk(KERN_NOTICE "md/raid1:%s: not clean"
> >                        " -- starting background reconstruction\n",
> >                        mdname(mddev));
> > 
> > I don't understand the condition and how a resync can be triggered there.
> 
> The kernel is just reacting to something it has been told by
> mdadm/mdmon. mdadm, in turn, just reads the meta data. It is highly
> likely that the meta data indicated that the array was not, or only
> partially, initialized. In this case mdadm will always start a full
> reconstruction.
> 
> > Oh, this is with kernel 3.4.54.
> > 
> > Can you (or anyone else) spot something wrong with these information ?
> 
> Well, obviously the BIOS made a change to the meta data. Why so? We can
> only guess; perhaps something that mdadm wrote to the meta data didn't
> please the BIOS code, and it "thought" it needed to do something
> differently.
> 
> mdadm -E may not be enough here. We need to inspect the raw meta data
> 1. after BIOS created the array and before mdadm started
> 2. after mdadm shutdown
> 3. after BIOS reboot, before mdadm started.
> 4. (if you have a windows driver, it might be interesting to see how the
> meta data looks after windows has shut down after step 1.)
> 
> You can dump the metadata with mdadm --dump, but the result is difficult
> to handle because it's a sparse image the size of your disk.
> Unless all your tools handle sparse files well, you will get stuck.
> 
> Here is a slightly more type-intensive but safer method:
> 
> Use "sg_readcap /dev/sda" to print the LBA of the last block.
> Using this number, run
> 
>  dd if=/dev/sda of=/tmp/sda bs=1b skip=$LBA
> 
> then do hexdump -C /tmp/sda. You see your "DDF anchor" structure. At
> offsets 0x0060 and 0x0068, you find the LBAs of the primary and
> secondary header, in big endian. Use the smaller number of the two
> (usually the secondary header at 0x0068). In may case the hexdump line reads
> 
> 00000060  00 00 00 00 3a 37 c0 40  00 00 00 00 3a 37 20 50
> 
> The primary LBA is 0x3a37c040, the secondary 3a372050, which is less.
> Next, using the smaller number, run
> 
> dd if=/dev/sda bs=1b skip=$((0x3a372050)) | gzip -c /tmp/sda-ddf.gz
> 

For future reference, with mdadm 3.3 you can
 mkdir /tmp/md
 mdadm --dump /tmp/md /dev/sd*
 tar czSvf /tmp/md.tgz /tmp/md

The files in /tmp/md are sparse (lots of zeros). 
The 'S' flag to tar tells it to handle these well.
So

 tar xvf /tmp/md.tgz

will recover the sparse files which will have the metadata and nothing else.

NeilBrown

Attachment: signature.asc
Description: PGP signature


[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