[parted-devel] [PATCH] Properly sync partitions with operating system

Jim Meyering jim at meyering.net
Tue Feb 24 15:58:55 UTC 2009


Joel Granados wrote:
...
>> Between now and when parted learns to support
>> some _new_ partition table type that works that way,
>> we should have plenty of time...
>
> Sorry for taking so long to respond but I had to be sure.  Been reading
> the EFI GPT specification

Thanks for doing the research.
However, could it be that there is an effective maximum
that is a constant?

Consider the width in bits of the field defining
FirstUsableLBA.  That gives a maximum possible value.
Plug that into the equation for SP, and you have a maximum
that requires no read.

If there really is a hard requirement to read from disk or to do anything
else that may fail, one way around the poor-interface problem is to use
a different signature for the function: return a boolean to indicate
success or failure and set the result (only upon success) through a
pointer parameter.

> (http://developer.apple.com/technotes/tn2006/tn2166.html Chapter 5)  As
> I understand it, gpt *is* a type of label that needs a read to find out
> the maximum number of partitions that it can hold.
>
> According to the specs the first LBA (LBA0) is not relevant (it exists
> to maintain compatibility).  on the second LBA(LBA1) gpt places the
> header.  The header is as big as a logical block.  After the header we
> find the Entry array.  Each element of said array, describes each
> partition.  One can have as much elements as can fit between the end of
> the second LBA (where the header ends) and the FirstUsableLBA.
> FirstUsableLBA is the first logical block that may be used for contents
> and is defined in header.
>
> /---------------------------------------------------\
> |        |        |             |                   |
> | BLOCK0 | HEADER | Entry Array | First Usable LBA  |
> |        | BLOCK1 |             |                   |
> \---------------------------------------------------/
>                  /              \
>     /----------/                  \----------\
>     /-----------------------------------------\
>     |      |      |                           |
>     |  E1  |  E2  |  E3  ................  EN |
>     |      |      |                           |
>     \-----------------------------------------/
>
> So.  The number of possible partitions or supported partitions (SP) is:
> SP = (FirstUsableLBA - LBA3) / sizeof(Entry Array element)
> Note that FirstUsableLBA and sizeof(Entry Array element) are values that
> can change.
>
> And to take calculate said value, we have to read from disk.
>
> Now, the spec file for gpt is rather easily acquired.  I don't know
> about the other.  I would appreciate people sending me specs for the
> other types of labels in which I can verify the way to calculate the
> maximum number of supported partitions.



More information about the parted-devel mailing list