Interesting patches for 4k drives w/ GPT

Mario Limonciello mario_limonciello at
Thu Feb 25 21:09:16 UTC 2010


Recently Colin Watson raised a bug (
<>) to pull in Parted 2.1 for
Lucid, particularly to be able to enable drives that use 4k sectors
rather than 512 byte sectors.  As this FFe has been approved, it would
probably be a good idea to support it from the kernel side too.  There
are two patches related to using GPT with these types of drives from
2.6.33 that may be interesting to being able to support these drives:

commit 87038c2d5bda2418fda8b1456a0ae81cc3ff5bd8
Author: Karel Zak <kzak at>
Date:   Mon Nov 23 09:29:58 2009 +0100

    partitions: read whole sector with EFI GPT header
    The size of EFI GPT header is not static, but whole sector is
    allocated for the header. The HeaderSize field must be greater
    than 92 (= sizeof(struct gpt_header) and must be less than or
    equal to the logical block size.
    It means we have to read whole sector with the header, because the
    header crc32 checksum is calculated according to HeaderSize.
    For more details see UEFI standard (version 2.3, May 2009):
      - 5.3.1 GUID Format overview, page 93
      - Table 13. GUID Partition Table Header, page 96
    Signed-off-by: Karel Zak <kzak at>
    Signed-off-by: Jens Axboe <jens.axboe at>

commit 7d13af3279985f554784a45cc961f706dbcdbdd1
Author: Karel Zak <kzak at>
Date:   Mon Nov 23 09:29:13 2009 +0100

    partitions: use sector size for EFI GPT
    Currently, kernel uses strictly 512-byte sectors for EFI GPT parsing.
    That's wrong.
    UEFI standard (version 2.3, May 2009, 5.3.1 GUID Format overview, page
    95) defines that LBA is always based on the logical block size. It
    means bdev_logical_block_size() (aka BLKSSZGET) for Linux.
    This patch removes static sector size from EFI GPT parser.
    The problem is reproducible with the latest GNU Parted:
     # modprobe scsi_debug dev_size_mb=50 sector_size=4096
      # ./parted /dev/sdb print
      Model: Linux scsi_debug (scsi)
      Disk /dev/sdb: 52.4MB
      Sector size (logical/physical): 4096B/4096B
      Partition Table: gpt
      Number  Start   End     Size    File system  Name     Flags
       1      24.6kB  3002kB  2978kB               primary
       2      3002kB  6001kB  2998kB               primary
       3      6001kB  9003kB  3002kB               primary
      # blockdev --rereadpt /dev/sdb
      # dmesg | tail -1
       sdb: unknown partition table      <---- !!!
    with this patch:
      # blockdev --rereadpt /dev/sdb
      # dmesg | tail -1
       sdb: sdb1 sdb2 sdb3

Mario Limonciello
*Dell | Linux Engineering*
mario_limonciello at

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 262 bytes
Desc: OpenPGP digital signature
URL: <>

More information about the kernel-team mailing list