Skip to content

Commit

Permalink
Use systemd-growfs (home-assistant#1133)
Browse files Browse the repository at this point in the history
* Use systemd-growfs instead of resize2fs (home-assistant#1106)

Since systemd 236 systemd has a built-in file system growing mechanism.
The mechanism relies on the kernels online file system resize
capabilities instead of the external resize2fs utility. Online resizing
is supposedly much faster since the kernel takes care of things.

This also makes sure that external file systems get resized which
previously have not been taken care of.

* Drop HA OS specific file system resizing

Since we have systemd-growfs in place now we can drop our file system
resizing code.

* Make sure /dev/disk/by-label/hassos-data is present after resizing

Note: systemd will retry mnt-data.mount later, so at least in theory
this shouldn't really matter. However, the journal has a lot of churn
due to that reordering.
  • Loading branch information
agners committed Dec 30, 2020
1 parent 0e7310e commit 103ddb1
Show file tree
Hide file tree
Showing 17 changed files with 30 additions and 20 deletions.
1 change: 0 additions & 1 deletion buildroot-external/configs/intel_nuc_defconfig
Expand Up @@ -35,7 +35,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_IBT=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/odroid_c2_defconfig
Expand Up @@ -37,7 +37,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/odroid_c4_defconfig
Expand Up @@ -37,7 +37,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/odroid_n2_defconfig
Expand Up @@ -37,7 +37,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/odroid_xu4_defconfig
Expand Up @@ -37,7 +37,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_MFC_V8=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/ova_defconfig
Expand Up @@ -36,7 +36,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/rpi0_w_defconfig
Expand Up @@ -38,7 +38,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/rpi2_defconfig
Expand Up @@ -38,7 +38,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/rpi3_64_defconfig
Expand Up @@ -38,7 +38,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/rpi3_defconfig
Expand Up @@ -38,7 +38,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/rpi4_64_defconfig
Expand Up @@ -38,7 +38,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/rpi4_defconfig
Expand Up @@ -38,7 +38,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/rpi_defconfig
Expand Up @@ -38,7 +38,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI=y
Expand Down
1 change: 0 additions & 1 deletion buildroot-external/configs/tinker_defconfig
Expand Up @@ -39,7 +39,6 @@ BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_E2FSPROGS=y
BR2_PACKAGE_E2FSPROGS_E2IMAGE=y
BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_SQUASHFS=y
BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX=y
Expand Down
Expand Up @@ -6,7 +6,7 @@ After=hassos-expand.service
Before=umount.target local-fs.target
Conflicts=umount.target
After=systemd-fsck@dev-disk-by\x2dlabel-hassos\x2ddata.service
Wants=systemd-fsck@dev-disk-by\x2dlabel-hassos\x2ddata.service
Wants=systemd-fsck@dev-disk-by\x2dlabel-hassos\x2ddata.service systemd-growfs@mnt-data.service

[Mount]
What=/dev/disk/by-label/hassos-data
Expand Down
@@ -0,0 +1,18 @@
#
# Extracted from fstab-generator
#

[Unit]
Description=Grow File System on %f
Documentation=man:systemd-growfs@.service(8)
DefaultDependencies=no
BindsTo=%i.mount
Conflicts=shutdown.target
After=%i.mount
Before=shutdown.target local-fs.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/lib/systemd/systemd-growfs %f
TimeoutSec=0
16 changes: 11 additions & 5 deletions buildroot-external/rootfs-overlay/usr/libexec/hassos-expand
Expand Up @@ -52,11 +52,17 @@ else
sfdisk -V "${DEVICE_ROOT}"
fi

# Reload partition table
partx -u "${DEVICE_ROOT}"
udevadm settle

# Resize filesystem
echo "[INFO] Resize hassos-data filesystem"
e2fsck -y "${DEVICE_CHILD}"
resize2fs -f "${DEVICE_CHILD}"
# Make sure /dev/disk/by-label/hassos-data is actually present before exiting.
# This avoids a race condition with mnt-data.mount which might fail to bind
# otherwise:
# Bound to unit dev-disk-by\x2dlabel-hassos\x2ddata.device, but unit isn't active.
if ! systemctl start "dev-disk-by\\x2dlabel-hassos\\x2ddata.device"; then
echo "[ERROR] Data partition not found!"
exit 1
fi

echo "[INFO] Finish hassos-data resizing"
echo "[INFO] Finished hassos-data partition resizing"

0 comments on commit 103ddb1

Please sign in to comment.