bug-parted
[Top][All Lists]
Advanced

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

Re: GPT Question


From: Rod Smith
Subject: Re: GPT Question
Date: Fri, 11 Nov 2011 12:55:55 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20111105 Thunderbird/7.0.1

On 11/11/2011 12:00 PM, Christian <address@hidden> wrote:
> On gio, 2011-11-10 at 15:01 +0100, Jim Meyering wrote:
> 
>> Christian wrote:
>>> On mer, 2011-11-09 at 00:16 +0100, Christian wrote:
>>>> Hi,
>>>>
>>>> I created a GPT table on a file (1 MB), using parted 2.2.
>>>> Looking at the hexdump seems that the CHS-start-sector of the GPT
>>>> partition may not be correct. Those are MBR (64 byte) partitions:
>>>>
>>>>   Status  CHS    Type  CHS     LBA start  LBA sectors
>>>>   00      000100 EE    FEFFFF  01000000   FF070000
>>>>   00      000000 00    000000  00000000   00000000
>>>>   00      000000 00    000000  00000000   00000000
>>>>   00      000000 00    000000  00000000   00000000
>>>>
>>>> CHS start bytes are HEAD: 00, SECTOR: 01 CYLINDER: 00.
>>>>
>>>> Using the formula:
>>>>
>>>> LBA = (CYL * NHEADS + HEAD) * NSECTORS + SECTOR - 1
>>>>
>>>> LBA = (0 * 4 + 0) * 32 + 1 - 1
>>>>
>>>> LBA = 0
>>>>
>>>> But the GPT header is at LBA 1 (as the LBA start field 01000000).
>>>>
>>>> This is an error or CHS values ??are ignored?
>>>>
>>>> Many thanks!
>>>>
>>>> Christian.
>>>
>>> Parted 3.0 have this "error" too.
>>
>> Thanks, but it's not an error.
>> That first sector is called the protective MBR.
>> Note the "type" of EE.
>>
>>   https://secure.wikimedia.org/wikipedia/en/wiki/GPT_Disk
> 
> Oh, thanks for your response! :)
> 
> Sorry but I'm a little confused.
> 
> If the value of CHS (0, 0, 1 (wich corresponds to LBA 0)) is correct,
> why the LBA field indicates LBA 1?
> 
> The CHS values ??must be ignored by a partitioning program?

As a practical matter, GPT partitioning tools ignore the CHS values in
the protective MBR because they aren't really relevant for GPT. The
protective MBR's 0xEE entry serves only to identify the disk as a GPT
disk, as far as GPT utilities are concerned. Since GPT doesn't use CHS
at all, the only utility of these values on a CHS disk is to keep very
old partitioning software (that DOES rely on CHS values) from damaging
the disk.

That said, the UEFI specification is quite explicit about how the
protective MBR should be laid out, and you are correct, Christian, in
suggesting that parted does it wrong. The UEFI specification, version
2.3.1, p. 98, lays it out in its Table 15, which describes the layout of
the protective MBR's 0xEE protective partition entry:

Mnemonic         Byte Offset    Byte Length    Description
--------         -----------    -----------    -----------
BootIndicator         0              1         Set to 0x00 to indicate
                                               a non-bootable partition.

StartingCHS           1              3         Set to 0x000200,
                                               corresponding to the
                                               Starting LBA field.

OSType                4              1         Set to 0xEE (i.e., GPT
                                               Protective)

EndingCHS             5              3         Set to the CHS address of
                                               the last logical block of
                                               the disk. Set to 0xFFFFFF
                                               if it is not possible to
                                               represent the value in
                                               this field.

StartingLBA           8              4         Set to 0x00000001 (i.e.,
                                               the LBA of the GPT
                                               Partition Header).

SizeInLBA             12             4         Set to the size of the
                                               disk minus one. Set to
                                               0xFFFFFFFF if the size
                                               of the disk is too large
                                               to be represented in this
                                               field.

Note that I've copied this over by hand, so there could be typos.

In fact, parted makes two errors:

1) The StartingCHS value should be 0x000200, not 0x000100.

2) On disks too big for a valid EndingCHS value (which is anything
   over about 8 GB), the EndingCHS value should be 0xFFFFFF, not
   0xFFFFFE.

Note that for point #2, 0xFFFFFE is the maximum legal CHS value in the
usual MBR scheme; thus, GPT requires an illegal CHS value be placed in
this field. I have no idea if this was intentional or an oversight by
the people who wrote the UEFI spec.

FWIW, most programs get one or both of these items wrong. IIRC, Mac OS
X's Disk Utility uses 0xFFFFFE as both the starting and ending CHS
values! Also, some BIOS-based computers misbehave if these items are set
in the way the spec requires:

- One motherboard that I owned once hung when the EndingCHS value is
  set to 0xFFFFFF; it had to be set to 0xFFFFFE for the computer to
  boot.

- Some motherboards, including many from Intel, won't boot from a GPT
  disk unless the MBR contains a partition with the "boot flag" set,
  so the BootIndicator byte has to be set in violation of the standard
  (or a hybrid MBR must be used) to boot on such disks. Parted follows
  the spec on this score, which is probably the right thing to do, but
  it's something that users and distribution maintainers should keep
  in mind. I'm rather concerned that Fedora is now using GPT by default
  on fresh BIOS-based installations, for instance.

For these reasons, and because most partitioning tools set the ending
CHS value incorrectly and otherwise seem to ignore these values, IMHO
bringing parted into line with the UEFI spec is a pretty low-priority issue.

-- 
Rod Smith
address@hidden
http://www.rodsbooks.com



reply via email to

[Prev in Thread] Current Thread [Next in Thread]