[PATCH] base-files: upgrade: take down loop and LVM before upgrade

Daniel Golle daniel at makrotopia.org
Sat May 1 20:46:00 BST 2021


Users of devices with large block storage may choose to have an LVM
partition on the same device which is used for booting OpenWrt.
That presents a problem during sysupgrade as the root device is then
still busy and changing partitions will not work as desired,
leading to data corruption in some cases.
Having loop devices setup causes similar havoc.
Make sure all volume groups are offline and all loop devices have been
released before sysupgrade.

Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 package/base-files/files/lib/upgrade/stage2 | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2
index 23d356a447..e2259e3472 100755
--- a/package/base-files/files/lib/upgrade/stage2
+++ b/package/base-files/files/lib/upgrade/stage2
@@ -33,6 +33,9 @@ supivot() { # <new_root> <old_root>
 }
 
 switch_to_ramfs() {
+	RAMFS_COPY_LOSETUP="$(command -v losetup)"
+	RAMFS_COPY_LVM="$(command -v lvm)"
+
 	for binary in \
 		/bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount	\
 		pivot_root mount_root reboot sync kill sleep		\
@@ -43,6 +46,7 @@ switch_to_ramfs() {
 		ubiupdatevol ubiattach ubiblock ubiformat		\
 		ubidetach ubirsvol ubirmvol ubimkvol			\
 		snapshot snapshot_tool date				\
+		$RAMFS_COPY_LOSETUP $RAMFS_COPY_LVM			\
 		$RAMFS_COPY_BIN
 	do
 		local file="$(command -v "$binary" 2>/dev/null)"
@@ -60,6 +64,12 @@ switch_to_ramfs() {
 	/bin/mount -o remount,ro /mnt
 	/bin/umount -l /mnt
 
+	[ "$RAMFS_COPY_LOSETUP" ] && $RAMFS_COPY_LOSETUP -D
+	[ "$RAMFS_COPY_LVM" ] && {
+		mkdir -p /tmp/lvm/cache
+		$RAMFS_COPY_LVM vgchange -aln --ignorelockingfailure
+	}
+
 	grep /overlay /proc/mounts > /dev/null && {
 		/bin/mount -o noatime,remount,ro /overlay
 		/bin/umount -l /overlay
-- 
2.31.1




More information about the openwrt-devel mailing list