[DRBD-user] Low.dev. smaller than requested DRBD-dev. size.

Lars Ellenberg Lars.Ellenberg at linbit.com
Tue Sep 5 14:14:42 CEST 2006

Note: "permalinks" may not be as permanent as we would like,
direct links of old sources may well be a few messages off.


/ 2006-09-05 14:29:50 +0300
\ Cyril Bouthors:
> On  5 Sep 2006, Lars Ellenberg wrote:
> 
> >> Sep  4 22:35:14 nfsb2 kernel: No module symbols loaded - kernel modules not enabled.
> >
> > monolithic?
> > well, a matter of taste, anyways...
> 
> I've seen this too, this is weird because I'm using modules a lot.

maybe it is just a misleading error message from klogd, when it does not
find the symbols...

> > well, what _is_ the size of md0 ?
> 
> md0 is 480GB large, which is larger than the currently running DRBD
> primary.
> 
> After a good night of sleep, I realized that :
> 
>  - This md0 RAID array has previously been running DRBD on another
>    setup and it seems that DRBD is re-using the old metadata, which
>    stores a invalid 'agreed size'.
> 
>  - my 'dd if=/dev/zero ...' did not erase the metadata because I
>    thought it was at the beginning of the device, I only erased the
>    128MB at the beginning (bs=1M count=128).
> 
>  - DRBD stores the 'last agreed size' in the metadata and never
>    reconnects to the primary to refresh it
> 
> I fixed the problem by zeroing the 128MB at the end of the device and
> restarting DRBD.
> 
> Is there a smart way to tell DRBD to refresh the 'agreed size' from
> the other DRBD node without destroying the metadata?

if you have unrelated meta data from a previous setup,
you should re-initialize it anyways.

> Is there another way than 'dd' to destroy the metadata of a previously
> used DRBD device?
>
> Is there a way to dump the metadata information like 'agreed size'?

there are "read_gc.pl" and "write_gc.pl"
in the testing/ directory of the drbd tarball.
gc == generation counters,
but it also displays / can write the "agreed-size")

drbd 8 has a drbdmeta subcommand, which is much more powerfull,
and does support the older meta data formats, too.
but its commandline parameter usage needs some time to get used to.

> <offtopic>
> 
> AFAIK, the 'seek' option of 'dd' does not really fseek() at the end of
> the device, it sequentially reads it from the beginning and because of
> that, it's really slow. The following command takes approx one hour:

actually, the seek option to seek into the output _does_ seek.
the "skip" option to skip input does not.

> size_of_md0=481708800
> dd if=/dev/zero of=/dev/md0 seek=`expr $size_of_md0 - 128000`

well. did you specify the bs=1M ?
otherwise, you'd just seeked into the device a couple of K,
 then had to zero out the other 479.x GB

> Is there a way to do it faster?

obviously, in case your dd does indeed not seek (which I doubt),
you could use exec...
# extra 1MB, because I'm lazy, for correct calculation see write_gc.pl
perl -e 'sysseek STDOUT,-129*1024*1024,2 or die "$!"; exec qw(dd if=...)'
or just plain perl:
# only correct if device size is a multiple of 4K
perl -e 'seek STDOUT,-128*1024*1024,2 or die "$!"; print "\x0" x 512' > /dev/md0

-- 
: Lars Ellenberg                                  Tel +43-1-8178292-0  :
: LINBIT Information Technologies GmbH            Fax +43-1-8178292-82 :
: Schoenbrunner Str. 244, A-1120 Vienna/Europe   http://www.linbit.com :
__
please use the "List-Reply" function of your email client.



More information about the drbd-user mailing list