sgdisk -e /dev/mmcblk2
sgdisk -d 6 -n 6:3008462:0 -c 6:home -u 6:8A98FF9D-DE45-4A5E-90E9-49982B5A72A3 -t 6:0700 /dev/mmcblk2
All in a script
#!/bin/sh
# Grow up last partition side till the end of the disk size
PART_NAME=home
PART_DEV=/dev/mmcblk2
PART_PART_NUM=6
PART_SECTOR_START=$(sgdisk -p $PART_DEV | grep $PART_NAME | awk '{print $2}')
PART_GUID=$(sgdisk $PART_DEV -p | grep GUID | awk '{print $4}')
PART_TYPECODE=$(sgdisk -p $PART_DEV | grep $PART_NAME | awk '{print $6}')
PART_IS_NOT_FULL_SIZE_ERR=$(sgdisk -v $PART_DEV | grep -i problem | grep secondary)
# Check if partition is already at full size
if [ -n "$PART_IS_NOT_FULL_SIZE_ERR" ]; then
# move second header to end of disk
sgdisk -e $PART_DEV
# sgdisk option used:
#
# -d delete's PART_PART_NUM partition
# -n create new partition PART_PART_NUM start from PART_SECTOR_START
# sector till the End sector (End sector = "0")
# -c set label of PART_PART_NUM to PART_NAME
# -u set GUID of PART_PART_NUM to PART_GUID
# -t set PART_TYPECODE to PART_PART_NUM
sgdisk -d $PART_PART_NUM \
-n $PART_PART_NUM:$PART_SECTOR_START:0 \
-c $PART_PART_NUM:$PART_NAME \
-u $PART_PART_NUM:$PART_GUID \
-t $PART_PART_NUM:$PART_TYPECODE \
$PART_DEV
else
echo "Partition: $PART_NAME already at maximum size, skipped"
fi
Or:
DISK=/dev/sdd
PART_NAME=fluxdata
# move backup gpt to end of disk
sgdisk -e $DISK
# get last sector
ENDSECTOR=$(sgdisk -E $DISK)
# delete current partition
sgdisk -d 9 $DISK
# replace with new
sgdisk -N 9 -c 9:$PART_NAME $DISK
# change partition name
sgdisk -c 9:$PART_NAME
# re-read the partition table entries
partx -u /dev/sdd
# resize the partition
resize2fs /dev/sdd9
# print size
sgdisk -p $DISK
Packages needed:
e2fsprogs e2fsprogs-resize2fs e2fsprogs-mke2fs
File:
.
├── files
│ └── grow-data-partition.service
└── recipe.bb
grow-data-part.service
[Unit]
Description=Service to grow data partition size
DefaultDependencies=no
Before=home.mount
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/sgdisk /dev/disk/by-path/platform-30b60000.mmc -e
ExecStart=/usr/sbin/parted --script /dev/mmcblk2 resizepart 6 100%
ExecStart=/sbin/resize2fs /dev/disk/by-partlabel/home
[Install]
WantedBy=home.mount
recipe.bb
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI:append := " \
file://grow-data-partition.service \
"
inherit systemd
SYSTEMD_PACKAGES += "grow-data-part"
SYSTEMD_SERVICE:grow-data-part = "grow-data-partition.service"
SYSTEMD_AUTO_ENABLE = "enable"
RDEPENDS:grow-data-part += "parted gptfdisk e2fsprogs"
do_install:append() {
install -d ${D}${systemd_unitdir}/system/
install -m 0644 ${WORKDIR}/grow-data-partition.service ${D}${systemd_unitdir}/system/
}
RRECOMMENDS:append = "grow-data-part"
PACKAGES =+ "grow-data-part"
FILES:${PN}-grow-data-part = "${systemd_unitdir}/system/grow-data-partition.service"
File tree:
resizepart/
├── files/
│ ├── grow-partition.service
│ └── resize_part.sh
└── resizepart.bb
Yocto recipe: resizepart.bb
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI:append := " \
file://grow-partition.service \
file://resize_part.sh \
"
inherit systemd
SYSTEMD_PACKAGES += "grow-part"
SYSTEMD_SERVICE:grow-part = "grow-partition.service"
SYSTEMD_AUTO_ENABLE = "enable"
RDEPENDS:grow-part += "gptfdisk"
do_install:append() {
install -d 644 ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/resize_part.sh ${D}${sysconfdir}/init.d
install -d ${D}${systemd_unitdir}/system/
install -m 0644 ${WORKDIR}/grow-partition.service ${D}${systemd_unitdir}/system/
}
RRECOMMENDS:${PN}:append = " grow-part"
PACKAGES =+ "grow-part"
FILES:grow-part = "${systemd_unitdir}/system/grow-data-partition.service"
File: grow-partition.service
[Unit]
Description=Grow partition size Service
DefaultDependencies=no
Before=home.mount
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/etc/init.d/resize_part.sh
[Install]
WantedBy=home.mount
File: resize_part.sh
#!/bin/sh
# Grow up last partition side till the end of the disk size
PART_NAME=home
PART_DEV=/dev/mmcblk2
PART_PART_NUM=6
PART_SECTOR_START=$(sgdisk -p $PART_DEV | grep $PART_NAME | awk '{print $2}')
PART_GUID=$(sgdisk $PART_DEV -p | grep GUID | awk '{print $4}')
PART_TYPECODE=$(sgdisk -p $PART_DEV | grep $PART_NAME | awk '{print $6}')
PART_IS_NOT_FULL_SIZE_ERR=$(sgdisk -v $PART_DEV | grep -i problem | grep secondary)
# Check if partition is already at full size
if [ -n "$PART_IS_NOT_FULL_SIZE_ERR" ]; then
# move second header to end of disk
sgdisk -e $PART_DEV
# sgdisk option used:
#
# -d delete's PART_PART_NUM partition
# -n create new partition PART_PART_NUM start from PART_SECTOR_START
# sector till the End sector (End sector = "0")
# -c set label of PART_PART_NUM to PART_NAME
# -u set GUID of PART_PART_NUM to PART_GUID
# -t set PART_TYPECODE to PART_PART_NUM
sgdisk -d $PART_PART_NUM \
-n $PART_PART_NUM:$PART_SECTOR_START:0 \
-c $PART_PART_NUM:$PART_NAME \
-u $PART_PART_NUM:$PART_GUID \
-t $PART_PART_NUM:$PART_TYPECODE \
$PART_DEV
else
echo "Partition: $PART_NAME already at maximum size, skipped"
fi
References: