base-files: upgrade: take down loop and LVM before upgrade
[openwrt/openwrt.git] / package / base-files / files / lib / upgrade / stage2
index 23d356a447fa3b94c386e26792ecd3913a9bb6c0..e2259e347238b23dc1d6000390bab63f17f2e134 100755 (executable)
@@ -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" ] && 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