Hello,
Question about disk partition today.
I installed DietPi over a 250Gig SSD disk and I want to limit his rootfs to 40Gig before the first boot.
However, I have this error once booted into the system.
Partition 3 does not start on physical sector boundary.
I use balenaEtcher or/and rpi-imager to write the DietPi image.
Then I use parted to do the disk partition stuff.
sudo parted -s -a optimal – /dev/sdb resizepart 2 40GB
sudo parted -s -a optimal – /dev/sdb mkpart primary 40GB 100%
sudo parted /dev/sdb print
Any suggestion ?
1 Like
The root file system size is only ~600 MiB or so on first boot, based on the minimal possible reduction, so you cannot shrink it further before first boot.
On first boot the partition first and the filesystem second, is then maximised to fill the size of the underlying disk automatically. It would be possible to prevent that, but that makes the first run setup break which requires additional space already. So I’d leave that in place.
So you need to shrink the partition and filesystem afterwards, from an external system, as mounted filesystems cannot be shrunken. Start with the filesystem:
resize2fs /dev/sdb2 10485760
Assuming the root partition is /dev/sdb2, using 40 GiB (given in 4k blocks).
Then reduce the partition size
sfdisk --no-reread --no-tell-kernel -fN2 /dev/sdb <<< ',83886080'
With 40 GiB given in 512 byte sectors.
On the other hand, if you’re able to edit the ext4 partition prior to first boot, you can edit the expansion script directly:
/var/lib/dietpi/services/fs_partition_resize.sh
https://github.com/MichaIng/DietPi/blob/master/rootfs/var/lib/dietpi/services/fs_partition_resize.sh#L42
Replace the + with 83886080 as above.
https://github.com/MichaIng/DietPi/blob/master/rootfs/var/lib/dietpi/services/fs_partition_resize.sh#L55
Append 10485760 as above.
1 Like
If you like to use more a graphic interface, you could use GParted tool to resize the partitions after first run completed
Thanks for the suggestions.
I want to keep as much as possible simple my installation process.
The fs_partition_resize.sh modification proposition look nice.
Will give a try and come back with result.
I only did the sfdisk change cause I don’t feel the resize2fs need to be changed. (im maybe wrong)
tested over a 64G MicroSD card.
# Maximize root partition size
sfdisk --no-reread --no-tell-kernel -fN"$ROOT_PART" "$ROOT_DRIVE" <<< ',83886080'
# Maximize root file system
resize2fs "$ROOT_DEV"[/icode]
Result ...
lsblk
[icode]root@DietPi:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 59.5G 0 disk
├─mmcblk0p1 179:1 0 256M 0 part /boot
└─mmcblk0p2 179:2 0 40G 0 part /
parted
root@DietPi:~# parted /dev/mmcblk0 print all
Model: SD SN64G (sd/mmc)
Disk /dev/mmcblk0: 63.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 4194kB 273MB 268MB primary fat32 lba
2 273MB 43.2GB 42.9GB primary ext4
df
root@DietPi:~# df --block-size=MB | egrep 'boot|root'
/dev/root 42251MB 2287MB 38222MB 6% /
/dev/mmcblk0p1 265MB 52MB 213MB 20% /boot
How do I convert 40 GiB to 83886080 ?
ok its a number of sectors.
Thanks cfdisk
Jep 40 GiB = 83886080 sectors with each 512 bytes = 10485760 blocks (with each 4096 bytes in 95% of cases). Nasty that not every tool simply prints and takes sizes in bytes by default, but that’s how it is . At least it assures that only valid sizes can be used.
Hello,
My goal is to combine the disk setup and DietPi-Automation in the simplest procedure for a quick re-installation.
But Im in a chicken and egg situation.
When I create a third partition with cfdisk … fdisk complain about …
Partition 3 does not start on physical sector boundary.
And when I create a third partition with fdisk … cfdisk complain about …
# parted /dev/sda align-check opt
Partition number? 3
3 not aligned
… any suggestions for the disk setup ?
DietPi-Automation was done without any problem.
When you create the partition, assure that it starts at best at a multiple of 4k (block size). It says sector there, but I’m not even sure if it’s possible to create a partition not at a physical sector start.
How exactly did you create the partition?
here is my successful test over a MicroSD card.
sudo fdisk -l /dev/sda
Disk /dev/sda: 59.5 GiB, 63864569856 bytes, 124735488 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: 0xe8af6eb2
Image
PImage=DietPi_RPi-ARMv6-Buster.img
sudo dd if=${PImage} of=/dev/sda bs=4M conv=fsync
sudo sync
Partitions
sudo parted -a optimal /dev/sda resizepart 2 67697654s # 67697654 sector should bring the partition to 32GiB
sudo resize2fs /dev/sda2
sudo fsck.ext4 -fy /dev/sda2
sudo parted -a optimal /dev/sda mkpart primary 67698688s 124735487s
Validation
sudo fdisk -l /dev/sda
0 error
sudo parted /dev/sda align-check opt
Partition number? 1
1 aligned
sudo parted /dev/sda align-check opt
Partition number? 2
2 aligned
sudo parted /dev/sda align-check opt
Partition number? 3
3 aligned
Then my tests errors over a SSD disk
sudo fdisk -l /dev/sdb
Disk /dev/sdb: 232.9 GiB, 250059350016 bytes, 488397168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes <-- is it the problem ???
Disklabel type: dos
Disk identifier: 0x8f4dbd00
Image
PImage=DietPi_RPi-ARMv8-Buster.img
sudo dd if=${PImage} of=/dev/sdb bs=4M conv=fsync
sudo sync
Partitions
sudo parted -a optimal /dev/sdb resizepart 2 67697654s # 67697654 sector should bring the partition to 32GiB
sudo resize2fs /dev/sdb2
sudo fsck.ext4 -fy /dev/sdb2
sudo parted -a optimal /dev/sdb mkpart primary 67698688s 488397167s
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel
Partitions … also in error…
sudo parted -a optimal /dev/sdb mkpart primary 68877285s 488397167s
sudo parted -a optimal /dev/sdb mkpart primary 67698688s 488397167s
sudo parted -a optimal /dev/sdb mkpart primary 68942820s 488397167s
sudo parted -a optimal /dev/sdb mkpart primary 68943872s 488397167s
SSD disk solution …
sudo fdisk -l /dev/sdb
...
I/O size (minimum/optimal): 4096 bytes / 33553920 bytes 4096 bytes = parted min alignment
33553920 bytes = parted opt alignment
...
Partitions
sudo parted -a optimal /dev/sdb resizepart 2 68870143s # 67697654s = 32GiB / 68870143s = 32.6Gib
sudo resize2fs /dev/sdb2
sudo fsck.ext4 -fy /dev/sdb2
sudo parted -a min /dev/sdb mkpart primary 68870144s 488397167s
Validation
sudo fdisk -l /dev/sdb
0 error
sudo parted /dev/sdb align-check min
Partition number? 1
1 aligned
sudo parted /dev/sdb align-check min
Partition number? 2
2 aligned
sudo parted /dev/sdb align-check min
Partition number? 3
3 aligned
Sorry about this thread… learning alone is so boring.
nothing to be sorry about, it’s good learning and might be interesting for others as well
Interesting actually, thanks for sharing!
Interesting is that for my HDDs minimal and optimal alignment always leads to the same result. Everything is 512 bytes (like on your SD card). Probably my HDDs are too old , or it is more common on SSDs.
I wonder how 33553920 bytes is optimal, as it’s 32767.5 KiB or 31.99951171875 MiB , at least a multiple of 512 bytes. Obviously this is very disk specific.
And then I wonder how the original boot and root partitions are aligned correctly. The first still starts at 4 MiB and the second at 260 MiB (4 + 256), which both is not a multiple of 33553920 bytes . Or did I get something wrong?
fyi … this disk partitioning method
broke the installation over the new DietPi_RPi-ARMv8-Bullseye.7z image.
and the solution is …
Because I made a zfs pool over the /dev/sdb3,
I feel that a wipefs over this disk before I dd the DietPi image help me.
But the real change was to not play anymore with the file system.
These 2 cmd broke the installation just before we get any networking.
sudo resize2fs /dev/sdb2
sudo fsck.ext4 -fy /dev/sdb2
Here is my final cmd to create a third partitions.
- Clean the disk and install DietPi image.
sudo wipefs --all /dev/sdb
sudo dd if=/tmp/DietPi_RPi-ARMv8-Bullseye.img of=/dev/sdb bs=4M conv=fsync
sudo sync
- Resize the second partition and create the third one.
sudo parted -a optimal /dev/sdb resizepart 2 68870143s
sudo parted -a min /dev/sdb mkpart primary 68870144s 488397167s
- Copy the DietPiAutomation and a Custom_Script.
sudo mkdir -p /mnt/sdb1
sudo mount /dev/sdb1 /mnt/sdb1/
sudo cp ${DietPiAutomation} /mnt/sdb1/dietpi.txt
sudo cp ${Custom_Script} /mnt/sdb1/Automation_Custom_Script.sh
sudo umount /mnt/sdb1/