bug#20909: incorrect partition size calculation

Gena Makhomed <[email protected]>
Newsgroups gmane.comp.gnu.parted.bugs
Message-ID <[email protected]>
On 29.06.2015 20:43, Brian C. Lane wrote:

>> incorrect partition size calculation
>>
>> # parted -v
>> parted (GNU parted) 2.3
>>
>> Model: ATA HGST HUS724040AL (scsi)
>> Disk /dev/sda: 7814037168s
>>
>> how to reproduce:
>>
>> parted -s /dev/sda mklabel gpt
>> parted -s /dev/sda -a none mkpart primary 34s 2047s
>> parted -s /dev/sda set 1 bios_grub on
>> parted -s /dev/sda mkpart primary 2048s 2099199s
>> parted -s /dev/sda set 2 raid on
>> parted -s /dev/sda mkpart primary 2099200s 102764543s
>> parted -s /dev/sda set 3 raid on
>> parted -s /dev/sda mkpart primary zfs 102764544s 7814037134s
>>
>> parted
>> (parted) unit s
>> (parted) print free
>> Model: ATA HGST HUS724040AL (scsi)
>> Disk /dev/sda: 7814037168s
>> Sector size (logical/physical): 512B/512B
>> Partition Table: gpt
>>
>> Number  Start       End          Size         File system  Name     Flags
>>   1      34s         2047s        2014s                     primary bios_grub
>>   2      2048s       2099199s     2097152s                  primary  raid
>>   3      2099200s    102764543s   100665344s                primary  raid
>>   4      102764544s  7814037134s  7711272591s               primary
>>
>> (parted)
>>
>> =======================================
>>
>> parted reports what /dev/sda4 partition has size of 7711272591s
>> but this is not true, partition size is 7711272590s:
>>
>> 7814037168 - 2014 -  2097152 - 100665344 - 34 - 34 == 7711272590
>
> You are off by 1. start and end are inclusive so the size of sda4 is:
>
> 1 + (7814037134 - 102764544) = 7711272591
>

yes, you are right, sorry.
7814037168 - 2014 -  2097152 - 100665344 - 33 - 33 -1 == 7711272591

2014s,  2097152s, 100665344s and 7711272591s is size of partitions,
1s size of MBR and 33s + 33s is size of two copies of GPT.

BTW, "start and end are inclusive" - IMHO is very bad decision,
because now it is not possible to partition disk using MiB units
and always need use sectors and make all calculations manually.

for example, parted -s /dev/sda mkpart primary 34s 1MiB
now use one sector from second MiB and next partition
will be created as unaligned.

if use common scheme as in java - start index inclusive
and end index exclusive, - disk partitioning
will be very easy and obvious:

parted -s /dev/sda mkpart primary 34s 1MiB
parted -s /dev/sda mkpart primary 1MiB 1025MiB
parted -s /dev/sda mkpart primary 1025MiB 50178MiB
parted -s /dev/sda mkpart primary 50178MiB -- -34s

1-MiB alignment boundary recommended
for all GPT partitions except bios_grub one,
which contains core.img for read-only access:
https://en.wikipedia.org/wiki/BIOS_boot_partition

-- 
Best regards,
  Gena
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.