Util-Linux package development
 help / color / mirror / Atom feed
* Re: Bug#1098638: fdisk: creates partitions one sector too large
       [not found] <5c513969-5e9f-cb0d-c62c-e153ca259915@mirbsd.de>
@ 2025-02-23 13:22 ` Chris Hofstaedtler
  2025-02-25 12:07   ` Karel Zak
  0 siblings, 1 reply; 3+ messages in thread
From: Chris Hofstaedtler @ 2025-02-23 13:22 UTC (permalink / raw)
  To: Thorsten Glaser, 1098638-quiet; +Cc: util-linux

Control: tags -1 + upstream

Looping in upstream.

On Sat, Feb 22, 2025 at 12:57:38AM +0100, Thorsten Glaser wrote:
> Package: fdisk
> Version: 2.38.1-5+deb12u1
> 
> When I create a new partition with +sectors, fdisk creates one
> that is one sector too large:
> 
> 
> Command (m for help): n
> Partition number (1-128, default 1):
> First sector (2048-7814037134, default 2048):
> Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-7814037134, default 7814035455): +2097152
> 
> Created a new partition 1 of type 'Linux filesystem' and of size 1 GiB.
> 
> Command (m for help): p
> Disk /dev/sdb: 3.64 TiB, 4000787030016 bytes, 7814037168 sectors
> Disk model: ST4000NM0245-1Z2
> Units: sectors of 1 * 512 = 512 bytes
> Sector size (logical/physical): 512 bytes / 4096 bytes
> I/O size (minimum/optimal): 4096 bytes / 4096 bytes
> Disklabel type: gpt
> Disk identifier: DDA88AFF-1E6A-7448-AB5A-85470938DBC7
> 
> Device       Start        End    Sectors  Size Type
> /dev/sdb1     2048    2099200    2097153    1G Linux filesystem

Also from Thorsten:
> Same for MBR:
> 
> 
> Command (m for help): n
> Partition type
>    p   primary (0 primary, 0 extended, 4 free)
>    e   extended (container for logical partitions)
> Select (default p): p
> Partition number (1-4, default 1): 1
> First sector (2048-1000215215, default 2048):
> Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1000215215, default 1000215215): +2048
> 
> Created a new partition 1 of type 'Linux' and of size 1 MiB.
> 
> Command (m for help): p
> Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
> Disk model: SAMSUNG MZVLB512HBJQ-00000
> Units: sectors of 1 * 512 = 512 bytes
> Sector size (logical/physical): 512 bytes / 512 bytes
> I/O size (minimum/optimal): 512 bytes / 512 bytes
> Disklabel type: dos
> Disk identifier: 0x3cca69b4
> 
> Device         Boot Start   End Sectors Size Id Type
> /dev/nvme0n1p1       2048  4096    2049   1M 83 Linux

I've briefly reproduced this with util-linux 2.41-rc1 on a loopdev.

From what I understand Thorsten is saying, he would expect, for a
partition that starts at sector 2048, when its created with "+2048"
size, to have a number of 2048 sectors, not 2049 as shown above.

I haven't looked at the code if this is intentional or what the
reason could be.

Best,
Chris


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Bug#1098638: fdisk: creates partitions one sector too large
  2025-02-23 13:22 ` Bug#1098638: fdisk: creates partitions one sector too large Chris Hofstaedtler
@ 2025-02-25 12:07   ` Karel Zak
  2025-02-26  9:22     ` Thorsten Glaser
  0 siblings, 1 reply; 3+ messages in thread
From: Karel Zak @ 2025-02-25 12:07 UTC (permalink / raw)
  To: Chris Hofstaedtler; +Cc: Thorsten Glaser, 1098638-quiet, util-linux

On Sun, Feb 23, 2025 at 02:22:21PM GMT, Chris Hofstaedtler wrote:
> Control: tags -1 + upstream
> 
> Looping in upstream.
> 
> On Sat, Feb 22, 2025 at 12:57:38AM +0100, Thorsten Glaser wrote:
> > Package: fdisk
> > Version: 2.38.1-5+deb12u1
> > 
> > When I create a new partition with +sectors, fdisk creates one
> > that is one sector too large:
> > 
> > 
> > Command (m for help): n
> > Partition number (1-128, default 1):
> > First sector (2048-7814037134, default 2048):
> > Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-7814037134, default 7814035455): +2097152
> > 
> > Created a new partition 1 of type 'Linux filesystem' and of size 1 GiB.
> > 
> > Command (m for help): p
> > Disk /dev/sdb: 3.64 TiB, 4000787030016 bytes, 7814037168 sectors
> > Disk model: ST4000NM0245-1Z2
> > Units: sectors of 1 * 512 = 512 bytes
> > Sector size (logical/physical): 512 bytes / 4096 bytes
> > I/O size (minimum/optimal): 4096 bytes / 4096 bytes
> > Disklabel type: gpt
> > Disk identifier: DDA88AFF-1E6A-7448-AB5A-85470938DBC7
> > 
> > Device       Start        End    Sectors  Size Type
> > /dev/sdb1     2048    2099200    2097153    1G Linux filesystem

This is how fdisk has functioned since its inception. I noticed this
in the v2.13 code and was able to replicate it with v2.14 (year 2008).

The convention of +<sectors> is strictly evaluated as <first> + <size>,
without subtracting 1. This is different from +<size>{M,G,T,..} where the final
size is reduced by 1 and aligned to the disk I/O limits.

I have doubts about changing this after 20 years due to backward
compatibility. Additionally, it should be noted that people use 'echo
"something" | fdisk' in scripts ...

    Karel

-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Bug#1098638: fdisk: creates partitions one sector too large
  2025-02-25 12:07   ` Karel Zak
@ 2025-02-26  9:22     ` Thorsten Glaser
  0 siblings, 0 replies; 3+ messages in thread
From: Thorsten Glaser @ 2025-02-26  9:22 UTC (permalink / raw)
  To: Karel Zak; +Cc: Chris Hofstaedtler, 1098638-quiet, util-linux

On Tue, 25 Feb 2025, Karel Zak wrote:

>The convention of +<sectors> is strictly evaluated as <first> + <size>,
>without subtracting 1.

I guess someone made the maths mistake here: the last sector
is always <first> + <size> - 1, compare C arrays.

>This is how fdisk has functioned since its inception. I noticed this
>in the v2.13 code and was able to replicate it with v2.14 (year 2008).

Ouch. Then I agree changing this is not prudent at this point,
but please *do* clarify this in the question text. Let me
propose new text… hmm, let me see the old…

>> > Command (m for help): n
>> > Partition number (1-128, default 1):
>> > First sector (2048-7814037134, default 2048):
>> > Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-7814037134, default 7814035455): +2097152

… let’s go multiline for this:

| Last sector (2048-7814037134, default 7814035455),
| +/-sectors from first sector, or +/-size{K,M,G,T,P}:

>This is different from +<size>{M,G,T,..} where the final
>size is reduced by 1 and aligned to the disk I/O limits.

I expected the -1 (fencepost) but not the alignment, but
that makes sense.

>Additionally, it should be noted that people use 'echo
>"something" | fdisk' in scripts ...

Indeed, I do so myself, though in scripts I have so far
always calculated the last sector manually, it was only
that day interactively when I wanted to enter a manual
size in sectors: specifically, a split-mode dm-integrity
<https://evolvis.org/plugins/scmgit/cgi-bin/gitweb.cgi?p=useful-scripts/useful-scripts.git;a=blob;f=integritysetup/README.txt;h=76a7a67cb35d34c08eeeb916ce26f1832febf922;hb=HEAD#l113>
partition (where I manually aligned the result from the
isize-p script in the aforementioned documentation to a
multiple of 2048).

────────────────────────────────────────────────────────────────────────

So, would you please consider changing the wording, at
least, upstream? (And, perhaps, throw in another sentence
or two into the manpage, stating that the +sectors syntax
isn’t meant to express size, unlike the others.)

Thanks,
//mirabilos
-- 
[16:04:33] bkix: "veni vidi violini"
[16:04:45] bkix: "ich kam, sah und vergeigte"...

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-02-26  9:28 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <5c513969-5e9f-cb0d-c62c-e153ca259915@mirbsd.de>
2025-02-23 13:22 ` Bug#1098638: fdisk: creates partitions one sector too large Chris Hofstaedtler
2025-02-25 12:07   ` Karel Zak
2025-02-26  9:22     ` Thorsten Glaser

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox