** Description changed:

  [ Impact ]
  When booting an affected Ubuntu Server installer ISO on a system where a
  multipath device is used as a LVM PV, installing Ubuntu is not possible.
  
  Such a situation happens when a previous *LVM* installation of any OS (i.e., 
not
  necessarily Ubuntu) was done on a multipath disk, present on the system.
  
  The symptoms typically include:
   * a crash of the Subiquity client
   * the following error in the journal:
  ```
  ubuntu-server multipathd[941]: mpatha: addmap [0 16777216 multipath 0 0 2 1 
service-time 0 1 1 8:0 1 service-time 0 1 1 8:16 1]
  ubuntu-server multipathd[941]: libdevmapper: ioctl/libdm-iface.c(1990): 
device-mapper: reload ioctl on mpatha (252:1) failed: Device or resource busy
  ```
   * the VG device mapper node exists (e.g., ubuntu-vg) but the multipath one 
does not (e.g., mpatha)
  
  Explanation
  -----------
  
  Although LVM support is included in the initramfs of the installer ISO,
  multipath support is not. As a result, during the transition out of the
  initramfs, LVM VGs are activated using an individual underlying path device
  instead of the consolidated multipath device mapper node.
  
  Example
  -------
  Let's assume /dev/sda and /dev/sdb refer to the same disk via different
  paths. It is intended that sda and sdb are consolidated under a multipath
  device node, which in turn should be used as a PV.
  
    Excepted result in the live environment
    ---------------------------------------
  
  /dev/sda    --> consolidated under mpatha
  /dev/sdb    --> consolidated under mpatha
  
  /dev/mapper/mpatha   --> used as the PV of ubuntu-vg
  
  /dev/mapper/ubuntu-vg   --> the VG that uses mpatha as the PV
  
    Actual result on affected ISO
    -----------------------------
  
  /dev/sda   --+
  /dev/sdb   ----> one of these is used as the PV for ubuntu-vg
  
  /dev/mapper/mpatha   <-- does not exist
  
  /dev/mapper/ubuntu-vg (uses /dev/sda or /dev/sdb as the PV)
  
  [ Proposed fix ]
  
   * Since 25.10, we added support to multipath in the initramfs of the Ubuntu 
Server ISOs. I propose doing the same for 24.04.5.
   * This would correspond to:
-     * a livecd-rootfs upload, ensuring multipath-tools-boot is installed when 
building the installer's initramfs.
-     * a multipath-tools upload to fix:
-          * a bug making the multipathd process linger when executed in the 
installer environment.
-          * a bug making multipathd refuse to start if no bindings file is 
present (i.e., bug 2120444)
+     * a livecd-rootfs upload, ensuring multipath-tools-boot is installed when 
building the installer's initramfs.
+     * a multipath-tools upload to fix:
+          * a bug making the multipathd process linger when executed in 
casper's initramfs (because we use nfs-* scripts and not local-* scripts)
+          * a bug making multipathd refuse to start if no bindings file is 
present (i.e., bug 2120444)
  
  [ Test Plan ]
  
- TODO
+  1. Get an Ubuntu Server ISO built using livecd-rootfs and 
multipath-tools-boot 
+  2. Ensure the ISO includes multipath support:
+    # mkdir /tmp/test-initramfs
+    # unmkinitramfs /mnt/loop/casper/initrd /tmp/test-initramfs/
+    # find -name multipathd
+    ./usr/sbin/multipathd
+ 
+  3. Get a test-bed ready by install an OS (for instance Ubuntu Server 26.04) 
using multipath + LVM. 
+     $ kvm-test --install --iso /srv/iso/ubuntu-26.04-live-server-amd64.iso 
--disk-interface scsi-multipath --recreate-target
+ 
+  4. (optional). Boot the 24.04.4 server ISO and experience the issue:
+     $ kvm-test --install --iso /srv/iso/ubuntu-24.04.4-live-server.amd64.iso 
-- disk-interface scsi-multipath --reuse-target
+ 
+  5. Boot the fixed ISO and ensure the installation can proceed to the
+ end.
+ 
+     $ kvm-test --install --iso /srv/iso/ubuntu-24.04.4-live-
+ server.amd64.iso -- disk-interface scsi-multipath --reuse-target
+ 
+ The kvm-test script can be found here at
+ https://github.com/canonical/subiquity/blob/main/scripts/kvm-test.py or
+ in ppa:ogayot/subiquity
  
  [ Where problems could occur? ]
  
   * Bringing multipath support in the installer's initramfs could slightly 
slow down the boot process of the ISO. Nevertheless, 25.10 and 26.04 Ubuntu 
Server ISOs have had multipath-support in the initramfs, and no measurable slow 
down has been experienced. The change is affecting ubuntu-server only.
- * The multipath-tools fix is a bit more involved. It affects all systems, not 
just ISOs. 
+ * The multipath-tools fixes are a bit more involved. They can in theory 
affect all systems using multipath, not just installer ISOs. That said, the 
number of setups that use both multipath and nfs-* scripts should be very low. 
Most setups use local-* scripts instead - with the exception of casper's 
initramfs that we have in installer ISOs.
  
  [ Other Info ]
  
   * For existing affected ISOs, there is a workaround but not a user-friendly 
one:
     1. open a shell in the installer environment (one can hit F2 in the
        Subiquity TUI)
     2. Delete the relevant VG using `dmsetup remove`:
        $ sudo dmremove /dev/mapper/<vg>
     3. Restart multipathd using:
        $ sudo systemctl restart multipathd
     4. Finally, restart Subiquity:
        $ sudo snap restart subiquity
   * Alternatively, users can wipe the affected disk and then restart he 
installer (but this involves manually erasing data from the disk).
  
  [ Original description ]
  
  == Comment: - Anushree Mathur ==
  OS: 24.04 LTS (Noble Numbat)
  I started the Ubuntu installation for 24.04 LTS (Noble Numbat) on L1(HOST) 
having SAN disk, it failed with the following error just after I chose the disk.
  
  Ubuntu 24.04 LTS ubuntu-server hvc0
  
  connecting...
  waiting for cloud-init...
  generating crash report
  report saved to /var/crash/1724388235.797082424.ui.crash
  Traceback (most recent call last):
    File 
"/snap/subiquity/5745/lib/python3.10/site-packages/subiquity/client/controllers/filesystem.py",
 line 273, in _guided_choice
      self.ui.set_body(FilesystemView(self.model, self))
    File 
"/snap/subiquity/5745/lib/python3.10/site-packages/subiquity/ui/views/filesystem/filesystem.py",
 line 485, in __init__
      self.refresh_model_inputs()
    File 
"/snap/subiquity/5745/lib/python3.10/site-packages/subiquity/ui/views/filesystem/filesystem.py",
 line 540, in refresh_model_inputs
      self.avail_list.refresh_model_inputs()
    File 
"/snap/subiquity/5745/lib/python3.10/site-packages/subiquity/ui/views/filesystem/filesystem.py",
 line 417, in refresh_model_inputs
      for obj, cells in summarize_device(device, filter):
    File 
"/snap/subiquity/5745/lib/python3.10/site-packages/subiquity/ui/views/filesystem/helpers.py",
 line 32, in summarize_device
      anns = labels.annotations(device) + labels.usage_labels(device)
    File "/snap/subiquity/5745/usr/lib/python3.10/functools.py", line 889, in 
wrapper
      return dispatch(args[0].__class__)(*args, **kw)
    File 
"/snap/subiquity/5745/lib/python3.10/site-packages/subiquity/common/filesystem/labels.py",
 line 100, in _annotations_vg
      member = next(iter(vg.devices))
  StopIteration
  
  The above exception was the direct cause of the following exception:
  
  Traceback (most recent call last):
    File "/snap/subiquity/5745/usr/bin/subiquity", line 8, in <module>
      sys.exit(main())
    File 
"/snap/subiquity/5745/lib/python3.10/site-packages/subiquity/cmd/tui.py", line 
158, in main
      asyncio.run(run_with_loop())
    File "/snap/subiquity/5745/usr/lib/python3.10/asyncio/runners.py", line 44, 
in run
      return loop.run_until_complete(main)
    File "/snap/subiquity/5745/usr/lib/python3.10/asyncio/base_events.py", line 
649, in run_until_complete
      return future.result()
    File 
"/snap/subiquity/5745/lib/python3.10/site-packages/subiquity/cmd/tui.py", line 
156, in run_with_loop
      await subiquity_interface.run()
    File 
"/snap/subiquity/5745/lib/python3.10/site-packages/subiquity/client/client.py", 
line 403, in run
      await super().run()
    File 
"/snap/subiquity/5745/lib/python3.10/site-packages/subiquitycore/tui.py", line 
351, in run
      await super().run()
    File 
"/snap/subiquity/5745/lib/python3.10/site-packages/subiquitycore/core.py", line 
134, in run
      raise exc
  RuntimeError: coroutine raised StopIteration
  
  Ubuntu 24.04 LTS ubuntu-server hvc0
  
  connecting...
  ProblemType: Bug
  Architecture: ppc64el
  CrashDB: {'impl': 'launchpad', 'project': 'subiquity'}
  
  I tried following 2 installation methods, it is failing in both the ways:
  1) kexec method
  2) attaching vdvd and starting installer
  
  NOTE: It is happening only when the system has SAN disks otherwise this 
installation worked fine.
  I will be attaching the crash report for this!
  
  == Comment:- Hariharan T S ==
  Verified the following cases.
  Installation on Disk from VIOS  - PASSED
  Installatoin on Disk from VIOS and system had Disks from SAN - FAILED
  Installation on Disk from SAN and system ahd Disk from VIOS - FAILED
  
  == Comment:- Vaibhav Jain ==
  Problem seems to happening when Subuquity enters the disk partition view. The 
system has a SAN disk and an existing Mullti Path DM volume on it.
  
  Mirroring to distro

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2080474

Title:
  [SRU] cannot install Ubuntu Server over a multipath disk used as an
  LVM PV

To manage notifications about this bug go to:
https://bugs.launchpad.net/subiquity/+bug/2080474/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to