Re: [PATCH] RAID-6 check standalone

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

 



On Mon, 21 Mar 2011 11:40:07 +0100 Piergiorgio Sartor
<piergiorgio.sartor@xxxxxxxx> wrote:


> > I have applied this patch to me git now - with some minor changes.
> 
> Thanks.
> 
> One question, I did not find the previous patch to "restripe.c",
> which was adding the ":offset" capability. This was in order to
> be able to cope with metadata 1.1 or 1.2 (offset to be determined).

I cannot seem to find it.  Please resend.


> 
> > > Other item is that due to "sysfs.c" linking (see below) the
> > > "Makefile" needed some changes, I hope this is not a problem.
> > 
> > I have reverted most of these changes and the linking with sysfs.c isn't
> > needed yet.  When it is we can sort out how best to achieve it.
> > 
> > > 
> > > Next steps (TODO list you like) would be:
> > > 
> > > 1) Add the "sysfs.c" code in order to retrieve the HDDs info
> > > from the MD device. It is already linked, together with the
> > > whole (mdadm) universe, since it seems it cannot leave alone.
> > > I'll need some advice or hint on how to do use it. I checked
> > > "sysfs.c", but before I dig deep into it maybe better to
> > > have some advice (maybe just one function call will do it).
> > 
> > What exactly do you want to achieve?
> > 
> > I suspect you want to a open the md device, then
> > 
> >   info = sysfs_read(fd, -1,
> >   GET_LEVEL|GET_LAYOUT_GET_DISKS|GET_CHUNK|GET_DEVS|GET_OFFSET);
> > 
> > (possibly with other flags) and then extract the info you want from the data
> > structure returned - but I'm only guessing at what you might want.
> 
> I think this more or less correct.
> 
> I would like to pass, to "raid6check", the md device as only
> parameter, maybe with some start/stop position, and derive all
> the needed information from that.
> 
> That is, it should be: raid6check /dev/mdX start stop
> Or, possibly: raid6check /dev/mdX start length
> Or just: raid6check /dev/mdX
> 
> This means, the information that should be derived is:
> 
> 1) level, in order to confirm it is 6
> 2) layout
> 3) disk components
> 4) offset for each component
> 5) chunk size
> 
> That should be all, I guess.
> 
> Your "sysfs_read" seems to do exactly this, please confirm.

Yes, all that should be in there - experiment and see if you get what you
expect!

> 
> > > 
> > > 2) Add the suspend lo/hi control. Fellow John Robinson was
> > > suggesting to look into "Grow.c", which I did, but I guess
> > > the same story as 1) is valid: better to have some hint on
> > > where to look before wasting time.
> > 
> > This would be:
> > 
> >   sysfs_set_num(info, NULL, "suspend_lo", offset*data_disks);
> >   sysfs_set_num(info, NULL, "suspend_hi", (offset+chunksize)*data_disks);
> > 
> > to freeze one stripe.  Then work in there.
> > The addresses are addresses in the array, hence the multiplication
> > by data_disks (which is raid_disks - 2 for RAID6).
> > 
> > Don't hold the array suspended for too long or something might get
> > upset.  And allocate any memory you need first, and call
> >     	mlockall(MCL_CURRENT | MCL_FUTURE);
> > 
> > first to be even more safe.
> 
> Thanks for the explanation. How is, then, the "unfreeze"?
> Just writing (0) to both hi and lo?

Just make sure lo >= hi and it will unfreeze.
Some kernels are a bit fussy about the order of writing to these.
So if you just write a big number to 'lo', then the same to 'hi', you should
be safe.


NeilBrown

--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[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