[Freedombox-discuss] Bug#988146: parted: Inconsistent behavior creating partitions with 'Xmib' and 'X%' (off-by-1 error?)

Diederik de Haas didi.debian at cknow.org
Thu May 6 17:10:04 BST 2021

Package: parted
Version: 3.4-1
Severity: important
X-Debbugs-Cc: freedombox-discuss at alioth-lists.debian.net

I first noticed this when trying to make an improvement to
freedom-maker, hence FB-discuss in CC, while this issue didn't present
itself with the Raspberry Pi image specs project.
The former uses 'mib', while the latter uses '%'.

To demonstrate it, I created a script to prove the issue:


if [ ! -d "$BUILD_DIR" ] ; then
    echo "directory $BUILD_DIR doesn't exist; create it"
    mkdir $BUILD_DIR

echo "Creating image at '$IMAGE_PATH' of size '$IMAGE_SIZE'"
qemu-img create -f raw "$IMAGE_PATH" "$IMAGE_SIZE"
echo "Image file created"

echo -n "Creating partition table ... "
/sbin/parted -s $IMAGE_PATH mklabel msdos
echo "Done"

echo -n "Creating 1st partition ('4mib' '20%') ... "
/sbin/parted -s $IMAGE_PATH mkpart primary fat32 '4mib' '20%'
echo "Done"

echo -n "Creating 2nd partition ('20%' '40%' ... "
/sbin/parted -s $IMAGE_PATH mkpart primary ext4 '20%' '40%'
echo "Done"

echo -n "Creating 3rd partition ('40mib' '60mib') ... "
/sbin/parted -s $IMAGE_PATH mkpart primary ext4 '40mib' '60mib'
echo "Done"

echo ""
echo "Showing partition layout"
/sbin/fdisk -l $IMAGE_PATH

echo ""

echo -n "Creating 4th partition ('60mib' '100%' ... "
/sbin/parted -s $IMAGE_PATH mkpart primary ext4 '60mib' '100%'
echo "Done"


And when I run that, I get this output:
diederik at bagend:~/tmp/parted$ ./parted-bug-test.sh
IMAGE_NAME: parted-test.img
IMAGE_PATH: temp/parted-test.img
directory temp doesn't exist; create it
Creating image at 'temp/parted-test.img' of size '100M'
Formatting 'temp/parted-test.img', fmt=raw size=104857600
Image file created
Creating partition table ... Done
Creating 1st partition ('4mib' '20%') ... Done
Creating 2nd partition ('20%' '40%' ... Done
Creating 3rd partition ('40mib' '60mib') ... Done

Showing partition layout
Disk temp/parted-test.img: 100 MiB, 104857600 bytes, 204800 sectors
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: 0x98f2bc17

Device                Boot Start    End Sectors Size Id Type
temp/parted-test.img1       8192  40959   32768  16M  c W95 FAT32 (LBA)
temp/parted-test.img2      40960  81919   40960  20M 83 Linux
temp/parted-test.img3      81920 122880   40961  20M 83 Linux

Creating 4th partition ('60mib' '100%' ... Error: You requested a partition from 62.9MB to 105MB (sectors 122880..204799).
The closest location we can manage is 62.9MB to 105MB (sectors 122881..204799).

As the image size is (deliberately) 100M, one can swap the 'mib' and '%'
values. While it should produce the same output, it does not.

I (strongly) believe that with 'mib' the partition is created 1 sector
too large, hence the off-by-one in the subject.
Consequently, when the 'end' parameter is defined in 'mib' and then try
to create a new partition that starts at the previous end value, the
partition creation fails.

It looks like bug #902224 is related to it and possible also #835172.


-- System Information:
Debian Release: 11.0
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'testing-debug'), (500, 'unstable'), (500, 'testing'), (101, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 5.10.0-6-amd64 (SMP w/16 CPU threads)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages parted depends on:
ii  libc6         2.31-12
ii  libparted2    3.4-1
ii  libreadline8  8.1-1
ii  libtinfo6     6.2+20201114-2

parted recommends no packages.

Versions of packages parted suggests:
ii  parted-doc  3.4-1

-- no debconf information

More information about the Freedombox-discuss mailing list