On 15 Jul 2021, at 13:35, Adam Goryachev <[email protected]> 
wrote:
> 
> I'm pretty sure the DRBD manual has some details on how to calculate exactly 
> how much space you will need to leave available for the DRBD metadata

The formulas for exact calculation are not documented in the manual, because 
they are so complicated that you would not expect users to use them and 
actually get them right too.

Anyhow, if you *really* want to know, you get the net size (usable size for a 
filesystem) from the gross size (total available space) by calculating:

Snet = a4096(Sgross) - A4096(A1024(A8(A4096(Sgross) * 32768 ^ -1) * Cpeer) + 
Sal + Ssb

where
ax = floor align to x
Ax = ceiling align to x
Snet = usable size
Sgross = available space
Sal = size of the activity log
Ssb = size of the superblock
Cpeer = peer count

The superblock size Ssb is 4096 kiB. The activity log size Sal is 32 KiB by 
default, but may change if the al stripe size and/or al stripe count is changed 
(normally when using DRBD on a striped RAID device).

The other way around (gross size from usable size) is even more complicated, 
because it involves the calculation of the mathematical limit of the sum of 
fractions of the bitmap size, but for additional fun, you have to do the whole 
calculation with integer arithmetic and with a couple alignments added in.

The only place where those accurate calculations are currently used, in both 
directions, gross to net and net to gross, is in the LINSTOR controller.

For practical purposes, it’s normally sufficient to calculate Sgross / 32768 * 
Cpeer + 1 MiB. So you’re basically making the device too large (or the 
filesystem too small), that way you end up with a bit more space for the meta 
data than what you actually need. That is also what is documented in the DRBD 
User’s Guide.

Cheers,
Robert

_______________________________________________
Star us on GITHUB: https://github.com/LINBIT
drbd-user mailing list
[email protected]
https://lists.linbit.com/mailman/listinfo/drbd-user

Reply via email to