Skip to content

Conversation

@davidcassany
Copy link
Contributor

@davidcassany davidcassany commented Jul 29, 2025

When multipathing is enabled, the OS boots off the multipath /dev/mapper device

During upgrade elemental uses jaypipes/ghw to find block devices from /sys/block tree.

This misses the multipath partitions, which can cause issue #2299

The PR introduces a minor change where once the UpgradeSpec is generated from parsing of /sys/block tree we lookup the result of blkid -L $LABEL to identify partition with label.

This will result in the multipath partition being returned

For example from a sample multipath'd host

node-1-dhcp:~ # blkid -L COS_STATE
/dev/mapper/0QEMU_QEMU_HARDDISK_ABCDE-part4

node-1-dhcp:~ # blkid -t LABEL=COS_STATE
/dev/sdb4: LABEL="COS_STATE" UUID="ffacd836-c2bf-4c97-b816-ae54ef9ea56c" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="state" PARTUUID="88fdf8e1-fba0-4b88-b537-49f59c5e881c"
/dev/mapper/0QEMU_QEMU_HARDDISK_ABCDE-part4: LABEL="COS_STATE" UUID="ffacd836-c2bf-4c97-b816-ae54ef9ea56c" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="state" PARTUUID="88fdf8e1-fba0-4b88-b537-49f59c5e881c"
/dev/sda4: LABEL="COS_STATE" UUID="ffacd836-c2bf-4c97-b816-ae54ef9ea56c" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="state" PARTUUID="88fdf8e1-fba0-4b88-b537-49f59c5e881c"

If the partition does not match the one generated from parsing /sys/block then we update the upgrade spec to use the newly found partition.

This PR is including all commits from #2300 and including few additional commits to fix and adapt unit and integration tests.

Fixes #2299

ibrokethecloud and others added 7 commits July 22, 2025 15:58
…ec if needed. This may be needed when running elemental upgrade in multipathd systems

Signed-off-by: Gaurav Mehta <[email protected]>
…wnload, as some 3rd party packages are no longer available. the dependencies are already vendored so build wil leverage the same

Signed-off-by: Gaurav Mehta <[email protected]>
Do not execute test-deps target on PRs, the test is outdated
on old branches.

Signed-off-by: David Cassany <[email protected]>
Signed-off-by: David Cassany <[email protected]>
Signed-off-by: David Cassany <[email protected]>
Signed-off-by: David Cassany <[email protected]>
@davidcassany
Copy link
Contributor Author

@ibrokethecloud I would appreciate if you could verify this PR is still solving the use case you were trying to fix. I did few minimalist changes to your patch which should be transparent (using internal Runner interface instead of os/exec), but still, I'd appreciate if you could verify it.

@davidcassany davidcassany moved this to 🏃🏼‍♂️ In Progress in Elemental Jul 29, 2025
@davidcassany davidcassany moved this from 🏃🏼‍♂️ In Progress to 👀 Needs review in Elemental Jul 29, 2025
@ibrokethecloud
Copy link
Contributor

on a test node using multipath devices

node-1-dhcp:~ # df |grep QEMU
/dev/mapper/0QEMU_QEMU_HARDDISK_ABCDE-part4  15375304  5134384   9438104  36% /run/initramfs/cos-state
/dev/mapper/0QEMU_QEMU_HARDDISK_ABCDE-part2     42851      422     38845   2% /oem
/dev/mapper/0QEMU_QEMU_HARDDISK_ABCDE-part5 153707984 55540952  90286328  39% /usr/local
/dev/mapper/0QEMU_QEMU_HARDDISK_ABCDE-part6  78841476       40  74790748   1% /var/lib/harvester/defaultdisk
node-1-dhcp:~ # lsblk
NAME                                MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
loop0                                 7:0    0     3G  1 loop  /
loop1                                 7:1    0   6.3G  0 loop  /tmp/iso
loop2                                 7:2    0 787.4M  1 loop  /tmp/manual-os-upgrade/rootfs
sda                                   8:0    0   250G  0 disk
├─sda1                                8:1    0     1M  0 part
├─sda2                                8:2    0    50M  0 part
├─sda3                                8:3    0     8G  0 part
├─sda4                                8:4    0    15G  0 part
├─sda5                                8:5    0   150G  0 part
├─sda6                                8:6    0  76.9G  0 part
└─0QEMU_QEMU_HARDDISK_ABCDE         254:0    0   250G  0 mpath
  ├─0QEMU_QEMU_HARDDISK_ABCDE-part1 254:1    0     1M  0 part
  ├─0QEMU_QEMU_HARDDISK_ABCDE-part2 254:2    0    50M  0 part  /oem
  ├─0QEMU_QEMU_HARDDISK_ABCDE-part3 254:3    0     8G  0 part
  ├─0QEMU_QEMU_HARDDISK_ABCDE-part4 254:4    0    15G  0 part  /run/initramfs/cos-state
  ├─0QEMU_QEMU_HARDDISK_ABCDE-part5 254:5    0   150G  0 part  /var/lib/longhorn
  │                                                            /var/crash
  │                                                            /var/lib/third-party
  │                                                            /var/lib/cni
  │                                                            /var/lib/wicked
  │                                                            /var/lib/kubelet
  │                                                            /var/lib/rancher
  │                                                            /var/log
  │                                                            /usr/libexec
  │                                                            /root
  │                                                            /opt
  │                                                            /home
  │                                                            /etc/pki/trust/anchors
  │                                                            /etc/cni
  │                                                            /etc/iscsi
  │                                                            /etc/ssh
  │                                                            /etc/rancher
  │                                                            /etc/systemd
  │                                                            /usr/local
  └─0QEMU_QEMU_HARDDISK_ABCDE-part6 254:6    0  76.9G  0 part  /var/lib/harvester/defaultdisk
sdb                                   8:16   0   250G  0 disk
├─sdb1                                8:17   0     1M  0 part
├─sdb2                                8:18   0    50M  0 part
├─sdb3                                8:19   0     8G  0 part
├─sdb4                                8:20   0    15G  0 part
├─sdb5                                8:21   0   150G  0 part
├─sdb6                                8:22   0  76.9G  0 part
└─0QEMU_QEMU_HARDDISK_ABCDE         254:0    0   250G  0 mpath
  ├─0QEMU_QEMU_HARDDISK_ABCDE-part1 254:1    0     1M  0 part
  ├─0QEMU_QEMU_HARDDISK_ABCDE-part2 254:2    0    50M  0 part  /oem
  ├─0QEMU_QEMU_HARDDISK_ABCDE-part3 254:3    0     8G  0 part
  ├─0QEMU_QEMU_HARDDISK_ABCDE-part4 254:4    0    15G  0 part  /run/initramfs/cos-state
  ├─0QEMU_QEMU_HARDDISK_ABCDE-part5 254:5    0   150G  0 part  /var/lib/longhorn
  │                                                            /var/crash
  │                                                            /var/lib/third-party
  │                                                            /var/lib/cni
  │                                                            /var/lib/wicked
  │                                                            /var/lib/kubelet
  │                                                            /var/lib/rancher
  │                                                            /var/log
  │                                                            /usr/libexec
  │                                                            /root
  │                                                            /opt
  │                                                            /home
  │                                                            /etc/pki/trust/anchors
  │                                                            /etc/cni
  │                                                            /etc/iscsi
  │                                                            /etc/ssh
  │                                                            /etc/rancher
  │                                                            /etc/systemd
  │                                                            /usr/local
  └─0QEMU_QEMU_HARDDISK_ABCDE-part6 254:6    0  76.9G  0 part  /var/lib/harvester/defaultdisk
sr0                                  11:0    1   5.8G  0 rom

using a build from the PR, I was able to complete an upgrade, the upgrade config gets updated to use the multipath'd devices

node-1-dhcp:~ # /root/elemental  upgrade     --logfile /tmp/manual-os-upgrade/upgrade.log     --directory /tmp/manual-os-upgrade/rootfs     --config-dir /tmp/manual-os-upgrade/config     --debug
Flag --directory has been deprecated, 'directory' is deprecated please use 'system' instead
DEBU[2025-07-30T02:03:35Z] Starting elemental version v1.1.6 on commit 4b7e51a106354dbd16358c16ca83d376462266e0
INFO[2025-07-30T02:03:35Z] Reading configuration from '/tmp/manual-os-upgrade/config'
DEBU[2025-07-30T02:03:35Z] Full config loaded: &v1.RunConfig{
  Reboot: false,
  PowerOff: false,
  EjectCD: false,
  Config: v1.Config{
    Logger: &v1.logrusWrapper{ // p0
      Logger: &logrus.Logger{
        Out: &io.multiWriter{},
        Hooks: logrus.LevelHooks{},
        Formatter: &logrus.TextFormatter{
          ForceColors: true,
          DisableColors: false,
          ForceQuote: false,
          DisableQuote: false,
          EnvironmentOverrideColors: false,
          DisableTimestamp: false,
          FullTimestamp: true,
          TimestampFormat: "",
          DisableSorting: false,
          SortingFunc: ,
          DisableLevelTruncation: false,
          PadLevelText: false,
          QuoteEmptyFields: false,
          FieldMap: logrus.FieldMap(nil),
          CallerPrettyfier: ,
        },
        ReportCaller: false,
        Level: 5,
        ExitFunc: os.Exit,
        BufferPool: nil,
      },
    },
    Fs: &vfs.osfs{}, // p1
    Mounter: &mount.Mounter{},
    Runner: &v1.RealRunner{ // p2
      Logger: p0,
    },
    Syscall: &v1.RealSyscall{},
    CloudInitRunner: &cloudinit.YipCloudInitRunner{},
    ImageExtractor: v1.OCIImageExtractor{},
    Client: &http.Client{},
    Platform: &v1.Platform{
      OS: "linux",
      Arch: "x86_64",
      GolangArch: "amd64",
    },
    Cosign: false,
    Verify: false,
    CosignPubKey: "",
    LocalImage: false,
    Arch: "",
    SquashFsCompressionConfig: []string{
      "-comp",
      "xz",
      "-Xbcj",
      "x86",
    },
    SquashFsNoCompression: false,
    CloudInitPaths: []string{
      "/system/oem",
      "/oem/",
      "/usr/local/cloud-config/",
    },
    Strict: false,
  },
}
DEBU[2025-07-30T02:03:35Z] Running cmd: 'blkid -L COS_STATE'
DEBU[2025-07-30T02:03:35Z] Running cmd: 'blkid -L COS_RECOVERY'
DEBU[2025-07-30T02:03:35Z] Running cmd: 'blkid -L COS_PERSISTENT'
DEBU[2025-07-30T02:03:35Z] Running cmd: 'blkid -L COS_OEM'
DEBU[2025-07-30T02:03:35Z] Loaded upgrade UpgradeSpec: &v1.UpgradeSpec{
  RecoveryUpgrade: false,
  Active: v1.Image{
    File: "/run/cos/state/cOS/transition.img",
    Label: "COS_ACTIVE",
    Size: 3072,
    FS: "ext2",
    Source: &v1.ImageSource{},
    MountPoint: "/run/cos/transition",
    LoopDevice: "",
  },
  Recovery: v1.Image{
    File: "/run/cos/recovery/cOS/transition.img",
    Label: "COS_SYSTEM",
    Size: 0,
    FS: "ext2",
    Source: &v1.ImageSource{},
    MountPoint: "/run/cos/transition",
    LoopDevice: "",
  },
  GrubDefEntry: "",
  Passive: v1.Image{
    File: "/run/cos/state/cOS/passive.img",
    Label: "COS_PASSIVE",
    Size: 0,
    FS: "ext2",
    Source: &v1.ImageSource{},
    MountPoint: "",
    LoopDevice: "",
  },
  Partitions: v1.ElementalPartitions{
    BIOS: &v1.Partition{
      Name: "bios",
      FilesystemLabel: "unknown",
      Size: 1,
      FS: "none",
      Flags: nil,
      MountPoint: "",
      Path: "/dev/sdb1",
      Disk: "/dev/sdb",
    },
    EFI: nil,
    OEM: &v1.Partition{
      Name: "oem",
      FilesystemLabel: "COS_OEM",
      Size: 50,
      FS: "ext4",
      Flags: nil,
      MountPoint: "",
      Path: "/dev/mapper/0QEMU_QEMU_HARDDISK_ABCDE-part2",
      Disk: "/dev/sdb",
    },
    Recovery: &v1.Partition{
      Name: "recovery",
      FilesystemLabel: "COS_RECOVERY",
      Size: 8192,
      FS: "ext4",
      Flags: nil,
      MountPoint: "/run/cos/recovery",
      Path: "/dev/mapper/0QEMU_QEMU_HARDDISK_ABCDE-part3",
      Disk: "/dev/sdb",
    },
    State: &v1.Partition{
      Name: "state",
      FilesystemLabel: "COS_STATE",
      Size: 15360,
      FS: "ext4",
      Flags: nil,
      MountPoint: "/run/cos/state",
      Path: "/dev/mapper/0QEMU_QEMU_HARDDISK_ABCDE-part4",
      Disk: "/dev/sdb",
    },
    Persistent: &v1.Partition{
      Name: "persistent",
      FilesystemLabel: "COS_PERSISTENT",
      Size: 153600,
      FS: "ext4",
      Flags: nil,
      MountPoint: "/run/cos/persistent",
      Path: "/dev/mapper/0QEMU_QEMU_HARDDISK_ABCDE-part5",
      Disk: "/dev/sdb",
    },
  },
  State: &v1.InstallState{
    Date: "2025-07-22T05:55:20Z",
    Partitions: map[string]*v1.PartitionState{
      "oem": &v1.PartitionState{
        FSLabel: "COS_OEM",
        Images: map[string]*v1.ImageState(nil), // p0
      },
      "persistent": &v1.PartitionState{
        FSLabel: "COS_PERSISTENT",
        Images: p0,
      },
      "recovery": &v1.PartitionState{
        FSLabel: "COS_RECOVERY",
        Images: map[string]*v1.ImageState{
          "recovery": &v1.ImageState{
            Source: &v1.ImageSource{},
            SourceMetadata: nil,
            Label: "COS_SYSTEM",
            FS: "ext2",
          },
        },
      },
      "state": &v1.PartitionState{
        FSLabel: "COS_STATE",
        Images: map[string]*v1.ImageState{
          "active": &v1.ImageState{
            Source: &v1.ImageSource{},
            SourceMetadata: nil,
            Label: "COS_ACTIVE",
            FS: "ext2",
          },
          "passive": &v1.ImageState{
            Source: &v1.ImageSource{},
            SourceMetadata: nil,
            Label: "COS_PASSIVE",
            FS: "ext2",
          },
        },
      },
    },
  },
}
INFO[2025-07-30T02:03:35Z] Upgrade called
DEBU[2025-07-30T02:03:35Z] Mounting partition COS_STATE
DEBU[2025-07-30T02:03:35Z] Mounting partition COS_RECOVERY
DEBU[2025-07-30T02:03:35Z] mounting persistent partition
DEBU[2025-07-30T02:03:35Z] Mounting partition COS_PERSISTENT
INFO[2025-07-30T02:03:35Z] Applying 'before-upgrade' hook
INFO[2025-07-30T02:03:35Z] Running before-upgrade hook
INFO[2025-07-30T02:03:35Z] deploying image /tmp/manual-os-upgrade/rootfs to /run/cos/state/cOS/transition.img
INFO[2025-07-30T02:03:35Z] Preparing root tree for image: /run/cos/state/cOS/transition.img
INFO[2025-07-30T02:03:35Z] Copying /tmp/manual-os-upgrade/rootfs source...
INFO[2025-07-30T02:03:35Z] Starting rsync...
DEBU[2025-07-30T02:03:35Z] Running cmd: 'rsync --progress --partial --human-readable --archive --xattrs --acls --exclude=/mnt --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/tmp --exclude=/host --exclude=/run /tmp/manual-os-upgrade/rootfs/ /run/cos/workingtree/'
DEBU[2025-07-30T02:03:40Z] Syncing data...
DEBU[2025-07-30T02:03:45Z] Syncing data...
DEBU[2025-07-30T02:03:50Z] Syncing data...
DEBU[2025-07-30T02:03:55Z] Syncing data...
DEBU[2025-07-30T02:04:00Z] Syncing data...
DEBU[2025-07-30T02:04:05Z] Syncing data...
DEBU[2025-07-30T02:04:10Z] Syncing data...
INFO[2025-07-30T02:04:15Z] Finished syncing
INFO[2025-07-30T02:04:15Z] Finished copying /tmp/manual-os-upgrade/rootfs into /run/cos/workingtree
DEBU[2025-07-30T02:04:15Z] Mounting /run/cos/workingtree/dev to chroot
DEBU[2025-07-30T02:04:15Z] Mounting /run/cos/workingtree/dev/pts to chroot
DEBU[2025-07-30T02:04:15Z] Mounting /run/cos/workingtree/proc to chroot
DEBU[2025-07-30T02:04:15Z] Mounting /run/cos/workingtree/sys to chroot
DEBU[2025-07-30T02:04:15Z] Mounting /run/cos/workingtree/usr/local to chroot
DEBU[2025-07-30T02:04:15Z] Running cmd: 'setfiles -c /etc/selinux/targeted/policy/policy.33 -e /dev -e /proc -e /sys -F /etc/selinux/targeted/contexts/files/file_contexts /'
DEBU[2025-07-30T02:04:33Z] SELinux setfiles output:
DEBU[2025-07-30T02:04:33Z] Running cmd: 'sync '
DEBU[2025-07-30T02:04:34Z] Unmounting /run/cos/workingtree/usr/local from chroot
DEBU[2025-07-30T02:04:34Z] Unmounting /run/cos/workingtree/sys from chroot
DEBU[2025-07-30T02:04:34Z] Unmounting /run/cos/workingtree/proc from chroot
DEBU[2025-07-30T02:04:34Z] Unmounting /run/cos/workingtree/dev/pts from chroot
DEBU[2025-07-30T02:04:34Z] Unmounting /run/cos/workingtree/dev from chroot
INFO[2025-07-30T02:04:34Z] Applying 'after-upgrade-chroot' hook
DEBU[2025-07-30T02:04:34Z] Mounting /run/cos/workingtree/dev to chroot
DEBU[2025-07-30T02:04:34Z] Mounting /run/cos/workingtree/dev/pts to chroot
DEBU[2025-07-30T02:04:34Z] Mounting /run/cos/workingtree/proc to chroot
DEBU[2025-07-30T02:04:34Z] Mounting /run/cos/workingtree/sys to chroot
DEBU[2025-07-30T02:04:34Z] Mounting /run/cos/workingtree/usr/local to chroot
INFO[2025-07-30T02:04:34Z] Running after-upgrade-chroot hook
DEBU[2025-07-30T02:04:34Z] Running cmd: 'sync '
DEBU[2025-07-30T02:04:34Z] Unmounting /run/cos/workingtree/usr/local from chroot
DEBU[2025-07-30T02:04:34Z] Unmounting /run/cos/workingtree/sys from chroot
DEBU[2025-07-30T02:04:34Z] Unmounting /run/cos/workingtree/proc from chroot
DEBU[2025-07-30T02:04:34Z] Unmounting /run/cos/workingtree/dev/pts from chroot
DEBU[2025-07-30T02:04:34Z] Unmounting /run/cos/workingtree/dev from chroot
INFO[2025-07-30T02:04:34Z] Applying 'after-upgrade' hook
INFO[2025-07-30T02:04:34Z] Running after-upgrade hook
DEBU[2025-07-30T02:04:34Z] Running grub2-editenv with params: /run/cos/state/grub_oem_env set system_label=COS_SYSTEM
DEBU[2025-07-30T02:04:34Z] Running cmd: 'grub2-editenv /run/cos/state/grub_oem_env set system_label=COS_SYSTEM'
DEBU[2025-07-30T02:04:34Z] Running grub2-editenv with params: /run/cos/state/grub_oem_env set oem_label=COS_OEM
DEBU[2025-07-30T02:04:34Z] Running cmd: 'grub2-editenv /run/cos/state/grub_oem_env set oem_label=COS_OEM'
DEBU[2025-07-30T02:04:34Z] Running grub2-editenv with params: /run/cos/state/grub_oem_env set persistent_label=COS_PERSISTENT
DEBU[2025-07-30T02:04:34Z] Running cmd: 'grub2-editenv /run/cos/state/grub_oem_env set persistent_label=COS_PERSISTENT'
DEBU[2025-07-30T02:04:34Z] Running grub2-editenv with params: /run/cos/state/grub_oem_env set state_label=COS_STATE
DEBU[2025-07-30T02:04:34Z] Running cmd: 'grub2-editenv /run/cos/state/grub_oem_env set state_label=COS_STATE'
DEBU[2025-07-30T02:04:34Z] Running grub2-editenv with params: /run/cos/state/grub_oem_env set active_label=COS_ACTIVE
DEBU[2025-07-30T02:04:34Z] Running cmd: 'grub2-editenv /run/cos/state/grub_oem_env set active_label=COS_ACTIVE'
DEBU[2025-07-30T02:04:34Z] Running grub2-editenv with params: /run/cos/state/grub_oem_env set passive_label=COS_PASSIVE
DEBU[2025-07-30T02:04:34Z] Running cmd: 'grub2-editenv /run/cos/state/grub_oem_env set passive_label=COS_PASSIVE'
DEBU[2025-07-30T02:04:34Z] Running grub2-editenv with params: /run/cos/state/grub_oem_env set recovery_label=COS_RECOVERY
DEBU[2025-07-30T02:04:34Z] Running cmd: 'grub2-editenv /run/cos/state/grub_oem_env set recovery_label=COS_RECOVERY'
INFO[2025-07-30T02:04:34Z] rebranding
DEBU[2025-07-30T02:04:34Z] Looking for GRUB_ENTRY_NAME name in /run/cos/workingtree/etc/os-release
INFO[2025-07-30T02:04:34Z] Setting default grub entry to Harvester v1.4.1
DEBU[2025-07-30T02:04:34Z] Running grub2-editenv with params: /run/cos/state/grub_oem_env set default_menu_entry=Harvester v1.4.1
DEBU[2025-07-30T02:04:34Z] Running cmd: 'grub2-editenv /run/cos/state/grub_oem_env set default_menu_entry=Harvester v1.4.1'
INFO[2025-07-30T02:04:34Z] Creating filesystem image /run/cos/state/cOS/transition.img with size: 3072
DEBU[2025-07-30T02:04:34Z] Running cmd: 'mkfs.ext2 -L COS_ACTIVE /run/cos/state/cOS/transition.img'
DEBU[2025-07-30T02:04:34Z] Mounting image COS_ACTIVE to /run/cos/transition
DEBU[2025-07-30T02:04:34Z] Running cmd: 'losetup --show -f /run/cos/state/cOS/transition.img'
INFO[2025-07-30T02:04:34Z] Sync /run/cos/workingtree to /run/cos/transition
INFO[2025-07-30T02:04:34Z] Starting rsync...
DEBU[2025-07-30T02:04:34Z] Running cmd: 'rsync --progress --partial --human-readable --archive --xattrs --acls /run/cos/workingtree/ /run/cos/transition/'
DEBU[2025-07-30T02:04:39Z] Syncing data...
DEBU[2025-07-30T02:04:44Z] Syncing data...
DEBU[2025-07-30T02:04:49Z] Syncing data...
DEBU[2025-07-30T02:04:54Z] Syncing data...
INFO[2025-07-30T02:04:58Z] Finished syncing
DEBU[2025-07-30T02:04:58Z] Unmounting image COS_ACTIVE from /run/cos/transition
DEBU[2025-07-30T02:04:59Z] Running cmd: 'losetup -d /dev/loop3'
INFO[2025-07-30T02:05:00Z] Backing up current active image
INFO[2025-07-30T02:05:00Z] Moving /run/cos/state/cOS/active.img to /run/cos/state/cOS/passive.img
DEBU[2025-07-30T02:05:00Z] Running cmd: 'mv -f /run/cos/state/cOS/active.img /run/cos/state/cOS/passive.img'
INFO[2025-07-30T02:05:00Z] Finished moving /run/cos/state/cOS/active.img to /run/cos/state/cOS/passive.img
DEBU[2025-07-30T02:05:00Z] Running cmd: 'tune2fs -L COS_PASSIVE /run/cos/state/cOS/passive.img'
DEBU[2025-07-30T02:05:00Z] Running cmd: 'sync '
INFO[2025-07-30T02:05:00Z] Moving /run/cos/state/cOS/transition.img to /run/cos/state/cOS/active.img
DEBU[2025-07-30T02:05:00Z] Running cmd: 'mv -f /run/cos/state/cOS/transition.img /run/cos/state/cOS/active.img'
INFO[2025-07-30T02:05:00Z] Finished moving /run/cos/state/cOS/transition.img to /run/cos/state/cOS/active.img
DEBU[2025-07-30T02:05:00Z] Running cmd: 'sync '
INFO[2025-07-30T02:05:00Z] Applying 'post-upgrade' hook
INFO[2025-07-30T02:05:00Z] Running post-upgrade hook
INFO[2025-07-30T02:05:00Z] Upgrade completed
DEBU[2025-07-30T02:05:00Z] Unmounting partition COS_PERSISTENT
DEBU[2025-07-30T02:05:00Z] Unmounting partition COS_RECOVERY
DEBU[2025-07-30T02:05:00Z] Unmounting partition COS_STATE

@davidcassany
Copy link
Contributor Author

using a build from the PR, I was able to complete an upgrade, the upgrade config gets updated to use the multipath'd devices

Perfect! Then I am merging it 👍

@davidcassany davidcassany merged commit d6f7ff8 into rancher:v1.1.x Jul 30, 2025
10 checks passed
@github-project-automation github-project-automation bot moved this from 👀 Needs review to ✅ Done in Elemental Jul 30, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants