← Back to team overview

curtin-dev team mailing list archive

[Merge] ~ogayot/curtin:noble-raid-fixes into curtin:ubuntu/noble

 

Olivier Gayot has proposed merging ~ogayot/curtin:noble-raid-fixes into curtin:ubuntu/noble.

Commit message:
do not squash

Requested reviews:
  curtin developers (curtin-dev)
Related bugs:
  Bug #2094979 in curtin: "curtin misidentify /dev/md126p3 as a multipath device, generates unbootable grub config"
  https://bugs.launchpad.net/curtin/+bug/2094979
  Bug #2095141 in curtin: "For OEM factory reset, reset GRUB option is not generated when resetting into existing firmware RAID disk"
  https://bugs.launchpad.net/curtin/+bug/2095141
  Bug #2098075 in curtin: "use-gap on IMSM RAID devices installs another ESP partition, despite there is one available"
  https://bugs.launchpad.net/curtin/+bug/2098075

For more details, see:
https://code.launchpad.net/~ogayot/curtin/+git/curtin/+merge/481603

Merge recent RAID fixes to ubuntu/noble.

* https://code.launchpad.net/~medicalwei/curtin/+git/curtin/+merge/481164
   * Addresses https://bugs.launchpad.net/curtin/+bug/2095141
* https://code.launchpad.net/~ogayot/curtin/+git/curtin/+merge/481411
   * Addresses https://bugs.launchpad.net/curtin/+bug/2094979
* https://code.launchpad.net/~ogayot/curtin/+git/curtin/+merge/481078
   * Addresses https://bugs.launchpad.net/curtin/+bug/2098075
-- 
Your team curtin developers is requested to review the proposed merge of ~ogayot/curtin:noble-raid-fixes into curtin:ubuntu/noble.
diff --git a/curtin/block/__init__.py b/curtin/block/__init__.py
index f0445ae..497372d 100644
--- a/curtin/block/__init__.py
+++ b/curtin/block/__init__.py
@@ -7,6 +7,7 @@ import os
 import stat
 import sys
 import tempfile
+from typing import Optional
 
 from curtin import util
 from curtin.block import lvm
@@ -566,60 +567,6 @@ def blkid(devs=None, cache=True):
     return data
 
 
-def _legacy_detect_multipath(target_mountpoint=None):
-    """
-    Detect if the operating system has been installed to a multipath device.
-    """
-    # The obvious way to detect multipath is to use multipath utility which is
-    # provided by the multipath-tools package. Unfortunately, multipath-tools
-    # package is not available in all ephemeral images hence we can't use it.
-    # Another reasonable way to detect multipath is to look for two (or more)
-    # devices with the same World Wide Name (WWN) which can be fetched using
-    # scsi_id utility. This way doesn't work as well because WWNs are not
-    # unique in some cases which leads to false positives which may prevent
-    # system from booting (see LP: #1463046 for details).
-    # Taking into account all the issues mentioned above, curent implementation
-    # detects multipath by looking for a filesystem with the same UUID
-    # as the target device. It relies on the fact that all alternative routes
-    # to the same disk observe identical partition information including UUID.
-    # There are some issues with this approach as well though. We won't detect
-    # multipath disk if it doesn't any filesystems.  Good news is that
-    # target disk will always have a filesystem because curtin creates them
-    # while installing the system.
-    rescan_block_devices()
-    binfo = blkid(cache=False)
-    LOG.debug("legacy_detect_multipath found blkid info: %s", binfo)
-    # get_devices_for_mp may return multiple devices by design. It is not yet
-    # implemented but it should return multiple devices when installer creates
-    # separate disk partitions for / and /boot. We need to do UUID-based
-    # multipath detection against each of target devices.
-    target_devs = get_devices_for_mp(target_mountpoint)
-    LOG.debug("target_devs: %s" % target_devs)
-    for devpath, data in binfo.items():
-        # We need to figure out UUID of the target device first
-        if devpath not in target_devs:
-            continue
-        # This entry contains information about one of target devices
-        target_uuid = data.get('UUID')
-        # UUID-based multipath detection won't work if target partition
-        # doesn't have UUID assigned
-        if not target_uuid:
-            LOG.warn("Target partition %s doesn't have UUID assigned",
-                     devpath)
-            continue
-        LOG.debug("%s: %s" % (devpath, data.get('UUID', "")))
-        # Iterating over available devices to see if any other device
-        # has the same UUID as the target device. If such device exists
-        # we probably installed the system to the multipath device.
-        for other_devpath, other_data in binfo.items():
-            if ((other_data.get('UUID') == target_uuid) and
-                    (other_devpath != devpath)):
-                return True
-    # No other devices have the same UUID as the target devices.
-    # We probably installed the system to the non-multipath device.
-    return False
-
-
 def _device_is_multipathed(devpath):
     devpath = os.path.realpath(devpath)
     info = udevadm_info(devpath)
@@ -668,7 +615,7 @@ def md_get_devices_list(devpath):
     return _md_get_members_list(devpath, state_is_not_spare)
 
 
-def detect_multipath(target_mountpoint=None):
+def detect_multipath(target_mountpoint=None) -> Optional[str]:
     if multipath.multipath_supported():
         for device in (os.path.realpath(dev)
                        for (dev, _mp, _vfs, _opts, _freq, _passno)
@@ -682,7 +629,7 @@ def detect_multipath(target_mountpoint=None):
             if _device_is_multipathed(device):
                 return device
 
-    return _legacy_detect_multipath(target_mountpoint)
+    return None
 
 
 def get_scsi_wwid(device, replace_whitespace=False):
diff --git a/curtin/storage_config.py b/curtin/storage_config.py
index dae89f4..ac7b607 100644
--- a/curtin/storage_config.py
+++ b/curtin/storage_config.py
@@ -4,6 +4,7 @@ import copy
 import operator
 import os
 import re
+from typing import Optional
 import yaml
 
 from curtin.log import LOG
@@ -470,6 +471,22 @@ class ProbertParser(object):
         return multipath.is_mpath_partition(
             blockdev.get('DEVNAME', ''), blockdev)
 
+    @staticmethod
+    def detect_partition_scheme(blockdev) -> Optional[str]:
+        ''' Return either:
+             * None if the blockdev is not partitioned
+             * A type of partition table (as a string) if it is supported
+             * "unsupported" if it is not supported.
+        '''
+        if 'ID_PART_TABLE_TYPE' not in blockdev:
+            return None
+
+        ptype = blockdev['ID_PART_TABLE_TYPE']
+        if ptype not in schemas._ptables:
+            return schemas._ptable_unsupported
+
+        return ptype
+
     def blockdev_to_id(self, blockdev):
         """ Examine a blockdev dictionary and return a tuple of curtin
             storage type and name that can be used as a value for
@@ -752,12 +769,9 @@ class BlockdevParser(ProbertParser):
                     if dasd_size != "0":
                         entry['ptable'] = 'vtoc'
 
-            if 'ID_PART_TABLE_TYPE' in blockdev_data:
-                ptype = blockdev_data['ID_PART_TABLE_TYPE']
-                if ptype in schemas._ptables:
-                    entry['ptable'] = ptype
-                else:
-                    entry['ptable'] = schemas._ptable_unsupported
+            ptable = self.detect_partition_scheme(blockdev_data)
+            if ptable is not None:
+                entry['ptable'] = ptable
 
             match = re.fullmatch(r'/dev/(?P<ctrler>nvme\d+)n\d', devname)
             if match is not None:
@@ -816,7 +830,11 @@ class BlockdevParser(ProbertParser):
             if ptable:
                 entry['size'] *= logical_sector_size
 
-            if blockdev_data.get('ID_PART_TABLE_TYPE') == 'gpt':
+            # in libblkid, for a partition, PART_ENTRY_UUID is set together
+            # with PART_ENTRY_SCHEME, check ID_PART_ENTRY_SCHEME for partition
+            # type instead of ID_PART_TABLE_TYPE as it might not be set for a
+            # partition e.g. in RAID disks
+            if blockdev_data.get('ID_PART_ENTRY_SCHEME') == 'gpt':
                 part_uuid = blockdev_data.get('ID_PART_ENTRY_UUID')
                 if part_uuid is not None:
                     entry['uuid'] = part_uuid
@@ -1087,6 +1105,10 @@ class RaidParser(ProbertParser):
             'raidlevel': raid_data.get('raidlevel'),
             }
 
+        ptable = self.detect_partition_scheme(raid_data)
+        if ptable is not None:
+            action['ptable'] = ptable
+
         if 'MD_METADATA' in raid_data:
             action['metadata'] = raid_data["MD_METADATA"]
 
diff --git a/tests/data/probert_storage_imsm_with_parts.json b/tests/data/probert_storage_imsm_with_parts.json
new file mode 100644
index 0000000..76efe92
--- /dev/null
+++ b/tests/data/probert_storage_imsm_with_parts.json
@@ -0,0 +1,1560 @@
+{
+    "lvm": {},
+    "mount": [
+        {
+            "target": "/",
+            "source": "/cow",
+            "fstype": "overlay",
+            "options": "rw,relatime,lowerdir=/minimal.standard.live.hotfix.squashfs:/minimal.standard.live.squashfs:/minimal.standard.squashfs:/minimal.squashfs,upperdir=/cow/upper,workdir=/cow/work,uuid=on,xino=off,nouserxattr",
+            "maj:min": "0:29",
+            "children": [
+                {
+                    "target": "/sys",
+                    "source": "sysfs",
+                    "fstype": "sysfs",
+                    "options": "rw,nosuid,nodev,noexec,relatime",
+                    "maj:min": "0:23",
+                    "children": [
+                        {
+                            "target": "/sys/firmware/efi/efivars",
+                            "source": "efivarfs",
+                            "fstype": "efivarfs",
+                            "options": "rw,nosuid,nodev,noexec,relatime",
+                            "maj:min": "0:27"
+                        },
+                        {
+                            "target": "/sys/kernel/security",
+                            "source": "securityfs",
+                            "fstype": "securityfs",
+                            "options": "rw,nosuid,nodev,noexec,relatime",
+                            "maj:min": "0:6"
+                        },
+                        {
+                            "target": "/sys/fs/cgroup",
+                            "source": "cgroup2",
+                            "fstype": "cgroup2",
+                            "options": "rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot",
+                            "maj:min": "0:37"
+                        },
+                        {
+                            "target": "/sys/fs/pstore",
+                            "source": "pstore",
+                            "fstype": "pstore",
+                            "options": "rw,nosuid,nodev,noexec,relatime",
+                            "maj:min": "0:38"
+                        },
+                        {
+                            "target": "/sys/fs/bpf",
+                            "source": "bpf",
+                            "fstype": "bpf",
+                            "options": "rw,nosuid,nodev,noexec,relatime,mode=700",
+                            "maj:min": "0:39"
+                        },
+                        {
+                            "target": "/sys/kernel/tracing",
+                            "source": "tracefs",
+                            "fstype": "tracefs",
+                            "options": "rw,nosuid,nodev,noexec,relatime",
+                            "maj:min": "0:12"
+                        },
+                        {
+                            "target": "/sys/kernel/debug",
+                            "source": "debugfs",
+                            "fstype": "debugfs",
+                            "options": "rw,nosuid,nodev,noexec,relatime",
+                            "maj:min": "0:7"
+                        },
+                        {
+                            "target": "/sys/fs/fuse/connections",
+                            "source": "fusectl",
+                            "fstype": "fusectl",
+                            "options": "rw,nosuid,nodev,noexec,relatime",
+                            "maj:min": "0:42"
+                        },
+                        {
+                            "target": "/sys/kernel/config",
+                            "source": "configfs",
+                            "fstype": "configfs",
+                            "options": "rw,nosuid,nodev,noexec,relatime",
+                            "maj:min": "0:21"
+                        }
+                    ]
+                },
+                {
+                    "target": "/proc",
+                    "source": "proc",
+                    "fstype": "proc",
+                    "options": "rw,nosuid,nodev,noexec,relatime",
+                    "maj:min": "0:24",
+                    "children": [
+                        {
+                            "target": "/proc/sys/fs/binfmt_misc",
+                            "source": "systemd-1",
+                            "fstype": "autofs",
+                            "options": "rw,relatime,fd=32,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=17511",
+                            "maj:min": "0:40",
+                            "children": [
+                                {
+                                    "target": "/proc/sys/fs/binfmt_misc",
+                                    "source": "binfmt_misc",
+                                    "fstype": "binfmt_misc",
+                                    "options": "rw,nosuid,nodev,noexec,relatime",
+                                    "maj:min": "0:50"
+                                }
+                            ]
+                        }
+                    ]
+                },
+                {
+                    "target": "/dev",
+                    "source": "udev",
+                    "fstype": "devtmpfs",
+                    "options": "rw,nosuid,relatime,size=32665196k,nr_inodes=8166299,mode=755,inode64",
+                    "maj:min": "0:5",
+                    "children": [
+                        {
+                            "target": "/dev/pts",
+                            "source": "devpts",
+                            "fstype": "devpts",
+                            "options": "rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000",
+                            "maj:min": "0:25"
+                        },
+                        {
+                            "target": "/dev/shm",
+                            "source": "tmpfs",
+                            "fstype": "tmpfs",
+                            "options": "rw,nosuid,nodev,inode64",
+                            "maj:min": "0:35"
+                        },
+                        {
+                            "target": "/dev/mqueue",
+                            "source": "mqueue",
+                            "fstype": "mqueue",
+                            "options": "rw,nosuid,nodev,noexec,relatime",
+                            "maj:min": "0:20"
+                        },
+                        {
+                            "target": "/dev/hugepages",
+                            "source": "hugetlbfs",
+                            "fstype": "hugetlbfs",
+                            "options": "rw,nosuid,nodev,relatime,pagesize=2M",
+                            "maj:min": "0:41"
+                        }
+                    ]
+                },
+                {
+                    "target": "/run",
+                    "source": "tmpfs",
+                    "fstype": "tmpfs",
+                    "options": "rw,nosuid,nodev,noexec,relatime,size=6541088k,mode=755,inode64",
+                    "maj:min": "0:26",
+                    "children": [
+                        {
+                            "target": "/run/lock",
+                            "source": "tmpfs",
+                            "fstype": "tmpfs",
+                            "options": "rw,nosuid,nodev,noexec,relatime,size=5120k,inode64",
+                            "maj:min": "0:36"
+                        },
+                        {
+                            "target": "/run/snapd/ns",
+                            "source": "tmpfs[/snapd/ns]",
+                            "fstype": "tmpfs",
+                            "options": "rw,nosuid,nodev,noexec,relatime,size=6541088k,mode=755,inode64",
+                            "maj:min": "0:26",
+                            "children": [
+                                {
+                                    "target": "/run/snapd/ns/firefox.mnt",
+                                    "source": "nsfs[mnt:[4026533381]]",
+                                    "fstype": "nsfs",
+                                    "options": "rw",
+                                    "maj:min": "0:4"
+                                },
+                                {
+                                    "target": "/run/snapd/ns/firmware-updater.mnt",
+                                    "source": "nsfs[mnt:[4026533439]]",
+                                    "fstype": "nsfs",
+                                    "options": "rw",
+                                    "maj:min": "0:4"
+                                },
+                                {
+                                    "target": "/run/snapd/ns/snap-store.mnt",
+                                    "source": "nsfs[mnt:[4026533443]]",
+                                    "fstype": "nsfs",
+                                    "options": "rw",
+                                    "maj:min": "0:4"
+                                },
+                                {
+                                    "target": "/run/snapd/ns/snapd-desktop-integration.mnt",
+                                    "source": "nsfs[mnt:[4026533502]]",
+                                    "fstype": "nsfs",
+                                    "options": "rw",
+                                    "maj:min": "0:4"
+                                },
+                                {
+                                    "target": "/run/snapd/ns/factory-reset-tools.mnt",
+                                    "source": "nsfs[mnt:[4026533504]]",
+                                    "fstype": "nsfs",
+                                    "options": "rw",
+                                    "maj:min": "0:4"
+                                },
+                                {
+                                    "target": "/run/snapd/ns/thunderbird.mnt",
+                                    "source": "nsfs[mnt:[4026533505]]",
+                                    "fstype": "nsfs",
+                                    "options": "rw",
+                                    "maj:min": "0:4"
+                                }
+                            ]
+                        },
+                        {
+                            "target": "/run/user/1000",
+                            "source": "tmpfs",
+                            "fstype": "tmpfs",
+                            "options": "rw,nosuid,nodev,relatime,size=6541084k,nr_inodes=1635271,mode=700,uid=1000,gid=1000,inode64",
+                            "maj:min": "0:75",
+                            "children": [
+                                {
+                                    "target": "/run/user/1000/gvfs",
+                                    "source": "gvfsd-fuse",
+                                    "fstype": "fuse.gvfsd-fuse",
+                                    "options": "rw,nosuid,nodev,relatime,user_id=1000,group_id=1000",
+                                    "maj:min": "0:82"
+                                },
+                                {
+                                    "target": "/run/user/1000/doc",
+                                    "source": "portal",
+                                    "fstype": "fuse.portal",
+                                    "options": "rw,nosuid,nodev,relatime,user_id=1000,group_id=1000",
+                                    "maj:min": "0:95"
+                                }
+                            ]
+                        }
+                    ]
+                },
+                {
+                    "target": "/cdrom",
+                    "source": "/dev/md126p2",
+                    "fstype": "vfat",
+                    "options": "ro,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro",
+                    "maj:min": "259:2"
+                },
+                {
+                    "target": "/rofs",
+                    "source": "/dev/loop0",
+                    "fstype": "squashfs",
+                    "options": "ro,noatime,errors=continue,threads=single",
+                    "maj:min": "7:0"
+                },
+                {
+                    "target": "/tmp",
+                    "source": "tmpfs",
+                    "fstype": "tmpfs",
+                    "options": "rw,nosuid,nodev,relatime,inode64",
+                    "maj:min": "0:43"
+                },
+                {
+                    "target": "/snap/bare/5",
+                    "source": "/dev/loop5",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:5"
+                },
+                {
+                    "target": "/snap/factory-reset-tools/55",
+                    "source": "/dev/loop6",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:6"
+                },
+                {
+                    "target": "/snap/firefox/5600",
+                    "source": "/dev/loop7",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:7"
+                },
+                {
+                    "target": "/snap/ubuntu-desktop-bootstrap/301",
+                    "source": "/dev/loop8",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:8"
+                },
+                {
+                    "target": "/snap/thunderbird/609",
+                    "source": "/dev/loop9",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:9"
+                },
+                {
+                    "target": "/snap/core22/1722",
+                    "source": "/dev/loop4",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:4"
+                },
+                {
+                    "target": "/snap/firmware-updater/147",
+                    "source": "/dev/loop11",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:11"
+                },
+                {
+                    "target": "/snap/gnome-42-2204/176",
+                    "source": "/dev/loop10",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:10"
+                },
+                {
+                    "target": "/snap/snapd-desktop-integration/253",
+                    "source": "/dev/loop14",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:14"
+                },
+                {
+                    "target": "/snap/snap-store/1248",
+                    "source": "/dev/loop15",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:15"
+                },
+                {
+                    "target": "/snap/snapd/23545",
+                    "source": "/dev/loop13",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:13"
+                },
+                {
+                    "target": "/snap/gtk-common-themes/1535",
+                    "source": "/dev/loop12",
+                    "fstype": "squashfs",
+                    "options": "ro,nodev,relatime,errors=continue,threads=single",
+                    "maj:min": "7:12"
+                },
+                {
+                    "target": "/snap/ubuntu-desktop-bootstrap/x1",
+                    "source": "/cow[/home/ubuntu/squashfs-root]",
+                    "fstype": "overlay",
+                    "options": "ro,nodev,relatime,lowerdir=/minimal.standard.live.hotfix.squashfs:/minimal.standard.live.squashfs:/minimal.standard.squashfs:/minimal.squashfs,upperdir=/cow/upper,workdir=/cow/work,uuid=on,xino=off,nouserxattr",
+                    "maj:min": "0:29"
+                }
+            ]
+        }
+    ],
+    "dasd": {},
+    "dmcrypt": {},
+    "bcache": {
+        "backing": {},
+        "caching": {}
+    },
+    "raid": {
+        "/dev/md126": {
+            "CURRENT_TAGS": ":systemd:",
+            "DEVLINKS": "/dev/disk/by-id/md-uuid-2b219152:a527314e:2421b1aa:763fe1c4 /dev/md/Volume1_0",
+            "DEVNAME": "/dev/md126",
+            "DEVPATH": "/devices/virtual/block/md126",
+            "DEVTYPE": "disk",
+            "DISKSEQ": "13",
+            "ID_IGNORE_DISKSEQ": "1",
+            "ID_PART_TABLE_TYPE": "gpt",
+            "ID_PART_TABLE_UUID": "21c689c9-6030-4d14-ae66-f280ef4daaf8",
+            "MAJOR": "9",
+            "MD_CONTAINER": "/dev/md/imsm0",
+            "MD_DEVICES": "2",
+            "MD_DEVNAME": "Volume1_0",
+            "MD_LEVEL": "raid1",
+            "MD_MEMBER": "0",
+            "MD_MON_THIS": "../md127",
+            "MD_UUID": "2b219152:a527314e:2421b1aa:763fe1c4",
+            "MINOR": "126",
+            "SUBSYSTEM": "block",
+            "SYSTEMD_WANTS": "mdmonitor.service mdmon@md127.service",
+            "TAGS": ":systemd:",
+            "UDISKS_IGNORE": "1",
+            "UDISKS_MD_CONTAINER": "/dev/md/imsm0",
+            "UDISKS_MD_DEVICES": "2",
+            "UDISKS_MD_DEVICE_dev_nvme0n1_DEV": "/dev/nvme0n1",
+            "UDISKS_MD_DEVICE_dev_nvme0n1_ROLE": "1",
+            "UDISKS_MD_DEVICE_dev_nvme1n1_DEV": "/dev/nvme1n1",
+            "UDISKS_MD_DEVICE_dev_nvme1n1_ROLE": "0",
+            "UDISKS_MD_DEVNAME": "Volume1_0",
+            "UDISKS_MD_LEVEL": "raid1",
+            "UDISKS_MD_MEMBER": "0",
+            "UDISKS_MD_UUID": "2b219152:a527314e:2421b1aa:763fe1c4",
+            "USEC_INITIALIZED": "1607238",
+            "container": "/dev/md/imsm0",
+            "size": "4096803209216",
+            "raidlevel": "raid1"
+        },
+        "/dev/md127": {
+            "CURRENT_TAGS": ":systemd:",
+            "DEVLINKS": "/dev/disk/by-id/md-uuid-9fe673fb:76093732:2e12989f:d3e828f1 /dev/md/imsm0",
+            "DEVNAME": "/dev/md127",
+            "DEVPATH": "/devices/virtual/block/md127",
+            "DEVTYPE": "disk",
+            "DISKSEQ": "11",
+            "ID_IGNORE_DISKSEQ": "1",
+            "MAJOR": "9",
+            "MD_DEVICES": "2",
+            "MD_DEVNAME": "imsm0",
+            "MD_LEVEL": "container",
+            "MD_METADATA": "imsm",
+            "MD_UUID": "9fe673fb:76093732:2e12989f:d3e828f1",
+            "MINOR": "127",
+            "SUBSYSTEM": "block",
+            "SYSTEMD_READY": "0",
+            "TAGS": ":systemd:",
+            "UDISKS_IGNORE": "1",
+            "UDISKS_MD_DEVICES": "2",
+            "UDISKS_MD_DEVICE_dev_nvme0n1_DEV": "/dev/nvme0n1",
+            "UDISKS_MD_DEVICE_dev_nvme0n1_ROLE": "spare",
+            "UDISKS_MD_DEVICE_dev_nvme1n1_DEV": "/dev/nvme1n1",
+            "UDISKS_MD_DEVICE_dev_nvme1n1_ROLE": "spare",
+            "UDISKS_MD_DEVNAME": "imsm0",
+            "UDISKS_MD_LEVEL": "container",
+            "UDISKS_MD_METADATA": "imsm",
+            "UDISKS_MD_UUID": "9fe673fb:76093732:2e12989f:d3e828f1",
+            "USEC_INITIALIZED": "1577302",
+            "devices": [
+                "/dev/nvme0n1",
+                "/dev/nvme1n1"
+            ],
+            "spare_devices": [],
+            "size": "0",
+            "raidlevel": "container"
+        }
+    },
+    "nvme": {
+        "nvme1": {
+            "DEVNAME": "/dev/nvme1",
+            "DEVPATH": "/devices/pci0000:00/0000:00:0e.0/pci10000:e0/10000:e0:06.0/10000:e1:00.0/nvme/nvme1",
+            "ID_MODEL_FROM_DATABASE": "NVMe SSD Controller XG8",
+            "ID_PCI_CLASS_FROM_DATABASE": "Mass storage controller",
+            "ID_PCI_INTERFACE_FROM_DATABASE": "NVM Express",
+            "ID_PCI_SUBCLASS_FROM_DATABASE": "Non-Volatile memory controller",
+            "ID_VENDOR_FROM_DATABASE": "KIOXIA Corporation",
+            "MAJOR": "240",
+            "MINOR": "1",
+            "NVME_TRTYPE": "pcie",
+            "SUBSYSTEM": "nvme",
+            "USEC_INITIALIZED": "8091033",
+            "attrs": {
+                "address": "10000:e1:00.0",
+                "cntlid": "0",
+                "cntrltype": "io",
+                "dctype": "none",
+                "dev": "240:1",
+                "device": null,
+                "firmware_rev": "11304103",
+                "kato": "0",
+                "model": "KXG80ZN84T09 NVMe KIOXIA 4096GB         ",
+                "numa_node": "-1",
+                "passthru_err_log_enabled": "off",
+                "power/async": "disabled",
+                "power/autosuspend_delay_ms": null,
+                "power/control": "auto",
+                "power/pm_qos_latency_tolerance_us": "100000",
+                "power/runtime_active_kids": "0",
+                "power/runtime_active_time": "0",
+                "power/runtime_enabled": "disabled",
+                "power/runtime_status": "unsupported",
+                "power/runtime_suspended_time": "0",
+                "power/runtime_usage": "0",
+                "queue_count": "19",
+                "serial": "53DFC140F0KK        ",
+                "sqsize": "1023",
+                "state": "live",
+                "subsysnqn": "nqn.2019-10.com.kioxia:KXG80ZN84T09 NVMe KIOXIA 4096GB:53DFC140F0KK",
+                "subsystem": "nvme",
+                "transport": "pcie",
+                "uevent": "MAJOR=240\nMINOR=1\nDEVNAME=nvme1\nNVME_TRTYPE=pcie"
+            }
+        },
+        "nvme0": {
+            "DEVNAME": "/dev/nvme0",
+            "DEVPATH": "/devices/pci0000:00/0000:00:0e.0/pci10000:e0/10000:e0:06.2/10000:e2:00.0/nvme/nvme0",
+            "ID_MODEL_FROM_DATABASE": "WD Black SN850X NVMe SSD",
+            "ID_PCI_CLASS_FROM_DATABASE": "Mass storage controller",
+            "ID_PCI_INTERFACE_FROM_DATABASE": "NVM Express",
+            "ID_PCI_SUBCLASS_FROM_DATABASE": "Non-Volatile memory controller",
+            "ID_VENDOR_FROM_DATABASE": "Sandisk Corp",
+            "MAJOR": "240",
+            "MINOR": "0",
+            "NVME_TRTYPE": "pcie",
+            "SUBSYSTEM": "nvme",
+            "USEC_INITIALIZED": "8091110",
+            "attrs": {
+                "address": "10000:e2:00.0",
+                "cntlid": "8224",
+                "cntrltype": "io",
+                "dctype": "none",
+                "dev": "240:0",
+                "device": null,
+                "firmware_rev": "62012435",
+                "kato": "0",
+                "model": "PC SN820 NVMe WD 4096GB                 ",
+                "numa_node": "-1",
+                "passthru_err_log_enabled": "off",
+                "power/async": "disabled",
+                "power/autosuspend_delay_ms": null,
+                "power/control": "auto",
+                "power/pm_qos_latency_tolerance_us": "100000",
+                "power/runtime_active_kids": "0",
+                "power/runtime_active_time": "0",
+                "power/runtime_enabled": "disabled",
+                "power/runtime_status": "unsupported",
+                "power/runtime_suspended_time": "0",
+                "power/runtime_usage": "0",
+                "queue_count": "19",
+                "serial": "23114N440702        ",
+                "sqsize": "1023",
+                "state": "live",
+                "subsysnqn": "nqn.2018-01.com.wdc:nguid:E8238FA6BF53-0001-001B444A48AE486A",
+                "subsystem": "nvme",
+                "transport": "pcie",
+                "uevent": "MAJOR=240\nMINOR=0\nDEVNAME=nvme0\nNVME_TRTYPE=pcie"
+            }
+        }
+    },
+    "multipath": {},
+    "blockdev": {
+        "/dev/nvme1n1": {
+            "CURRENT_TAGS": ":systemd:",
+            "DEVLINKS": "/dev/disk/by-id/nvme-eui.00000000000000008ce38e0500e3957d /dev/disk/by-id/nvme-KXG80ZN84T09_NVMe_KIOXIA_4096GB_53DFC140F0KK /dev/disk/by-diskseq/9 /dev/disk/by-path/pci-0000:00:0e.0-pci-10000:e1:00.0-nvme-1 /dev/disk/by-id/nvme-KXG80ZN84T09_NVMe_KIOXIA_4096GB_53DFC140F0KK_1",
+            "DEVNAME": "/dev/nvme1n1",
+            "DEVPATH": "/devices/pci0000:00/0000:00:0e.0/pci10000:e0/10000:e0:06.0/10000:e1:00.0/nvme/nvme1/nvme1n1",
+            "DEVTYPE": "disk",
+            "DISKSEQ": "9",
+            "ID_FS_TYPE": "isw_raid_member",
+            "ID_FS_USAGE": "raid",
+            "ID_FS_VERSION": "1.3.00",
+            "ID_MODEL": "KXG80ZN84T09 NVMe KIOXIA 4096GB",
+            "ID_NSID": "1",
+            "ID_PATH": "pci-0000:00:0e.0-pci-10000:e1:00.0-nvme-1",
+            "ID_PATH_TAG": "pci-0000_00_0e_0-pci-10000_e1_00_0-nvme-1",
+            "ID_REVISION": "11304103",
+            "ID_SERIAL": "KXG80ZN84T09_NVMe_KIOXIA_4096GB_53DFC140F0KK_1",
+            "ID_SERIAL_SHORT": "53DFC140F0KK",
+            "ID_WWN": "eui.00000000000000008ce38e0500e3957d",
+            "MAJOR": "259",
+            "MINOR": "0",
+            "SUBSYSTEM": "block",
+            "TAGS": ":systemd:",
+            "UDISKS_IGNORE": "1",
+            "USEC_INITIALIZED": "1545263",
+            "attrs": {
+                "alignment_offset": "0",
+                "bdi": null,
+                "capability": "0",
+                "csi": "0",
+                "dev": "259:0",
+                "device": null,
+                "discard_alignment": "0",
+                "diskseq": "9",
+                "eui": "8c e3 8e 05 00 e3 95 7d",
+                "events": "",
+                "events_async": "",
+                "events_poll_msecs": "-1",
+                "ext_range": "256",
+                "hidden": "0",
+                "holders/md126": null,
+                "holders/md127": null,
+                "inflight": "       0        0",
+                "integrity/device_is_integrity_capable": "0",
+                "integrity/format": "none",
+                "integrity/protection_interval_bytes": "0",
+                "integrity/read_verify": "0",
+                "integrity/tag_size": "0",
+                "integrity/write_generate": "0",
+                "metadata_bytes": "0",
+                "mq/0/cpu_list": "0, 1",
+                "mq/0/nr_reserved_tags": "0",
+                "mq/0/nr_tags": "1023",
+                "mq/1/cpu_list": "2, 3",
+                "mq/1/nr_reserved_tags": "0",
+                "mq/1/nr_tags": "1023",
+                "mq/10/cpu_list": "12",
+                "mq/10/nr_reserved_tags": "0",
+                "mq/10/nr_tags": "1023",
+                "mq/11/cpu_list": "13",
+                "mq/11/nr_reserved_tags": "0",
+                "mq/11/nr_tags": "1023",
+                "mq/12/cpu_list": "14",
+                "mq/12/nr_reserved_tags": "0",
+                "mq/12/nr_tags": "1023",
+                "mq/13/cpu_list": "15",
+                "mq/13/nr_reserved_tags": "0",
+                "mq/13/nr_tags": "1023",
+                "mq/14/cpu_list": "16",
+                "mq/14/nr_reserved_tags": "0",
+                "mq/14/nr_tags": "1023",
+                "mq/15/cpu_list": "17",
+                "mq/15/nr_reserved_tags": "0",
+                "mq/15/nr_tags": "1023",
+                "mq/16/cpu_list": "18",
+                "mq/16/nr_reserved_tags": "0",
+                "mq/16/nr_tags": "1023",
+                "mq/17/cpu_list": "19",
+                "mq/17/nr_reserved_tags": "0",
+                "mq/17/nr_tags": "1023",
+                "mq/2/cpu_list": "4",
+                "mq/2/nr_reserved_tags": "0",
+                "mq/2/nr_tags": "1023",
+                "mq/3/cpu_list": "5",
+                "mq/3/nr_reserved_tags": "0",
+                "mq/3/nr_tags": "1023",
+                "mq/4/cpu_list": "6",
+                "mq/4/nr_reserved_tags": "0",
+                "mq/4/nr_tags": "1023",
+                "mq/5/cpu_list": "7",
+                "mq/5/nr_reserved_tags": "0",
+                "mq/5/nr_tags": "1023",
+                "mq/6/cpu_list": "8",
+                "mq/6/nr_reserved_tags": "0",
+                "mq/6/nr_tags": "1023",
+                "mq/7/cpu_list": "9",
+                "mq/7/nr_reserved_tags": "0",
+                "mq/7/nr_tags": "1023",
+                "mq/8/cpu_list": "10",
+                "mq/8/nr_reserved_tags": "0",
+                "mq/8/nr_tags": "1023",
+                "mq/9/cpu_list": "11",
+                "mq/9/nr_reserved_tags": "0",
+                "mq/9/nr_tags": "1023",
+                "nguid": "00000000-0000-0000-8ce3-8e0500e3957d",
+                "nsid": "1",
+                "nuse": "8001573552",
+                "partscan": "1",
+                "passthru_err_log_enabled": "off",
+                "power/async": "disabled",
+                "power/autosuspend_delay_ms": null,
+                "power/control": "auto",
+                "power/runtime_active_kids": "0",
+                "power/runtime_active_time": "0",
+                "power/runtime_enabled": "disabled",
+                "power/runtime_status": "unsupported",
+                "power/runtime_suspended_time": "0",
+                "power/runtime_usage": "0",
+                "queue/add_random": "0",
+                "queue/chunk_sectors": "0",
+                "queue/dax": "0",
+                "queue/discard_granularity": "512",
+                "queue/discard_max_bytes": "2199023255040",
+                "queue/discard_max_hw_bytes": "2199023255040",
+                "queue/discard_zeroes_data": "0",
+                "queue/dma_alignment": "3",
+                "queue/fua": "1",
+                "queue/hw_sector_size": "512",
+                "queue/io_poll": "0",
+                "queue/io_poll_delay": "-1",
+                "queue/io_timeout": "30000",
+                "queue/iostats": "1",
+                "queue/logical_block_size": "512",
+                "queue/max_discard_segments": "256",
+                "queue/max_hw_sectors_kb": "128",
+                "queue/max_integrity_segments": "0",
+                "queue/max_sectors_kb": "128",
+                "queue/max_segment_size": "4294967295",
+                "queue/max_segments": "33",
+                "queue/minimum_io_size": "512",
+                "queue/nomerges": "0",
+                "queue/nr_requests": "1023",
+                "queue/nr_zones": "0",
+                "queue/optimal_io_size": "0",
+                "queue/physical_block_size": "512",
+                "queue/read_ahead_kb": "128",
+                "queue/rotational": "0",
+                "queue/rq_affinity": "1",
+                "queue/scheduler": "[none] mq-deadline ",
+                "queue/stable_writes": "0",
+                "queue/virt_boundary_mask": "4095",
+                "queue/wbt_lat_usec": "2000",
+                "queue/write_cache": "write back",
+                "queue/write_same_max_bytes": "0",
+                "queue/write_zeroes_max_bytes": "131072",
+                "queue/zone_append_max_bytes": "0",
+                "queue/zone_write_granularity": "0",
+                "queue/zoned": "none",
+                "range": "0",
+                "removable": "0",
+                "ro": "0",
+                "size": "4096805658624",
+                "stat": " 1822884  1781377 462487538   260638       34        0       30        5        0    69104   260644        0        0        0        0        4        1",
+                "subsystem": "block",
+                "trace/act_mask": "disabled",
+                "trace/enable": "0",
+                "trace/end_lba": "disabled",
+                "trace/pid": "disabled",
+                "trace/start_lba": "disabled",
+                "uevent": "MAJOR=259\nMINOR=0\nDEVNAME=nvme1n1\nDEVTYPE=disk\nDISKSEQ=9",
+                "uuid": "00000000-0000-0000-8ce3-8e0500e3957d",
+                "wwid": "eui.00000000000000008ce38e0500e3957d"
+            },
+            "partitiontable": {
+                "label": "gpt",
+                "id": "21C689C9-6030-4D14-AE66-F280EF4DAAF8",
+                "device": "/dev/nvme1n1",
+                "unit": "sectors",
+                "firstlba": 2048,
+                "lastlba": 8001568734,
+                "sectorsize": 512,
+                "partitions": [
+                    {
+                        "node": "/dev/nvme1n1p1",
+                        "start": 2048,
+                        "size": 2201600,
+                        "type": "C12A7328-F81F-11D2-BA4B-00A0C93EC93B",
+                        "uuid": "EA24FB61-DD5A-4609-A3DE-714443148DE4"
+                    },
+                    {
+                        "node": "/dev/nvme1n1p2",
+                        "start": 2203648,
+                        "size": 25165824,
+                        "type": "E3C9E316-0B5C-4DB8-817D-F92DF00215AE",
+                        "uuid": "A32BA6C7-9650-4A1D-BB71-2772395F2737"
+                    },
+                    {
+                        "node": "/dev/nvme1n1p3",
+                        "start": 27369472,
+                        "size": 7974197248,
+                        "type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
+                        "uuid": "C93E447D-4FDC-4937-8FE2-09C0B0D04317"
+                    }
+                ]
+            }
+        },
+        "/dev/nvme0n1": {
+            "CURRENT_TAGS": ":systemd:",
+            "DEVLINKS": "/dev/disk/by-diskseq/10 /dev/disk/by-id/nvme-PC_SN820_NVMe_WD_4096GB_23114N440702_1 /dev/disk/by-id/nvme-eui.e8238fa6bf530001001b444a48ae486a /dev/disk/by-id/nvme-PC_SN820_NVMe_WD_4096GB_23114N440702 /dev/disk/by-path/pci-0000:00:0e.0-pci-10000:e2:00.0-nvme-1",
+            "DEVNAME": "/dev/nvme0n1",
+            "DEVPATH": "/devices/pci0000:00/0000:00:0e.0/pci10000:e0/10000:e0:06.2/10000:e2:00.0/nvme/nvme0/nvme0n1",
+            "DEVTYPE": "disk",
+            "DISKSEQ": "10",
+            "ID_FS_TYPE": "isw_raid_member",
+            "ID_FS_USAGE": "raid",
+            "ID_FS_VERSION": "1.3.00",
+            "ID_MODEL": "PC SN820 NVMe WD 4096GB",
+            "ID_NSID": "1",
+            "ID_PATH": "pci-0000:00:0e.0-pci-10000:e2:00.0-nvme-1",
+            "ID_PATH_TAG": "pci-0000_00_0e_0-pci-10000_e2_00_0-nvme-1",
+            "ID_REVISION": "62012435",
+            "ID_SERIAL": "PC_SN820_NVMe_WD_4096GB_23114N440702_1",
+            "ID_SERIAL_SHORT": "23114N440702",
+            "ID_WWN": "eui.e8238fa6bf530001001b444a48ae486a",
+            "MAJOR": "259",
+            "MINOR": "4",
+            "SUBSYSTEM": "block",
+            "TAGS": ":systemd:",
+            "UDISKS_IGNORE": "1",
+            "USEC_INITIALIZED": "1571730",
+            "attrs": {
+                "alignment_offset": "0",
+                "bdi": null,
+                "capability": "0",
+                "csi": "0",
+                "dev": "259:4",
+                "device": null,
+                "discard_alignment": "0",
+                "diskseq": "10",
+                "eui": "00 1b 44 4a 48 ae 48 6a",
+                "events": "",
+                "events_async": "",
+                "events_poll_msecs": "-1",
+                "ext_range": "256",
+                "hidden": "0",
+                "holders/md126": null,
+                "holders/md127": null,
+                "inflight": "       0        0",
+                "integrity/device_is_integrity_capable": "0",
+                "integrity/format": "none",
+                "integrity/protection_interval_bytes": "0",
+                "integrity/read_verify": "0",
+                "integrity/tag_size": "0",
+                "integrity/write_generate": "0",
+                "metadata_bytes": "0",
+                "mq/0/cpu_list": "0, 1",
+                "mq/0/nr_reserved_tags": "0",
+                "mq/0/nr_tags": "1023",
+                "mq/1/cpu_list": "2, 3",
+                "mq/1/nr_reserved_tags": "0",
+                "mq/1/nr_tags": "1023",
+                "mq/10/cpu_list": "12",
+                "mq/10/nr_reserved_tags": "0",
+                "mq/10/nr_tags": "1023",
+                "mq/11/cpu_list": "13",
+                "mq/11/nr_reserved_tags": "0",
+                "mq/11/nr_tags": "1023",
+                "mq/12/cpu_list": "14",
+                "mq/12/nr_reserved_tags": "0",
+                "mq/12/nr_tags": "1023",
+                "mq/13/cpu_list": "15",
+                "mq/13/nr_reserved_tags": "0",
+                "mq/13/nr_tags": "1023",
+                "mq/14/cpu_list": "16",
+                "mq/14/nr_reserved_tags": "0",
+                "mq/14/nr_tags": "1023",
+                "mq/15/cpu_list": "17",
+                "mq/15/nr_reserved_tags": "0",
+                "mq/15/nr_tags": "1023",
+                "mq/16/cpu_list": "18",
+                "mq/16/nr_reserved_tags": "0",
+                "mq/16/nr_tags": "1023",
+                "mq/17/cpu_list": "19",
+                "mq/17/nr_reserved_tags": "0",
+                "mq/17/nr_tags": "1023",
+                "mq/2/cpu_list": "4",
+                "mq/2/nr_reserved_tags": "0",
+                "mq/2/nr_tags": "1023",
+                "mq/3/cpu_list": "5",
+                "mq/3/nr_reserved_tags": "0",
+                "mq/3/nr_tags": "1023",
+                "mq/4/cpu_list": "6",
+                "mq/4/nr_reserved_tags": "0",
+                "mq/4/nr_tags": "1023",
+                "mq/5/cpu_list": "7",
+                "mq/5/nr_reserved_tags": "0",
+                "mq/5/nr_tags": "1023",
+                "mq/6/cpu_list": "8",
+                "mq/6/nr_reserved_tags": "0",
+                "mq/6/nr_tags": "1023",
+                "mq/7/cpu_list": "9",
+                "mq/7/nr_reserved_tags": "0",
+                "mq/7/nr_tags": "1023",
+                "mq/8/cpu_list": "10",
+                "mq/8/nr_reserved_tags": "0",
+                "mq/8/nr_tags": "1023",
+                "mq/9/cpu_list": "11",
+                "mq/9/nr_reserved_tags": "0",
+                "mq/9/nr_tags": "1023",
+                "nguid": "e8238fa6-bf53-0001-001b-444a48ae486a",
+                "nsid": "1",
+                "nuse": "8001573552",
+                "partscan": "1",
+                "passthru_err_log_enabled": "off",
+                "power/async": "disabled",
+                "power/autosuspend_delay_ms": null,
+                "power/control": "auto",
+                "power/runtime_active_kids": "0",
+                "power/runtime_active_time": "0",
+                "power/runtime_enabled": "disabled",
+                "power/runtime_status": "unsupported",
+                "power/runtime_suspended_time": "0",
+                "power/runtime_usage": "0",
+                "queue/add_random": "0",
+                "queue/chunk_sectors": "0",
+                "queue/dax": "0",
+                "queue/discard_granularity": "512",
+                "queue/discard_max_bytes": "2199023255040",
+                "queue/discard_max_hw_bytes": "2199023255040",
+                "queue/discard_zeroes_data": "0",
+                "queue/dma_alignment": "3",
+                "queue/fua": "1",
+                "queue/hw_sector_size": "512",
+                "queue/io_poll": "0",
+                "queue/io_poll_delay": "-1",
+                "queue/io_timeout": "30000",
+                "queue/iostats": "1",
+                "queue/logical_block_size": "512",
+                "queue/max_discard_segments": "256",
+                "queue/max_hw_sectors_kb": "128",
+                "queue/max_integrity_segments": "0",
+                "queue/max_sectors_kb": "128",
+                "queue/max_segment_size": "4294967295",
+                "queue/max_segments": "33",
+                "queue/minimum_io_size": "512",
+                "queue/nomerges": "0",
+                "queue/nr_requests": "1023",
+                "queue/nr_zones": "0",
+                "queue/optimal_io_size": "0",
+                "queue/physical_block_size": "512",
+                "queue/read_ahead_kb": "128",
+                "queue/rotational": "0",
+                "queue/rq_affinity": "1",
+                "queue/scheduler": "[none] mq-deadline ",
+                "queue/stable_writes": "0",
+                "queue/virt_boundary_mask": "4095",
+                "queue/wbt_lat_usec": "2000",
+                "queue/write_cache": "write back",
+                "queue/write_same_max_bytes": "0",
+                "queue/write_zeroes_max_bytes": "131072",
+                "queue/zone_append_max_bytes": "0",
+                "queue/zone_write_granularity": "0",
+                "queue/zoned": "none",
+                "range": "0",
+                "removable": "0",
+                "ro": "0",
+                "size": "4096805658624",
+                "stat": "    4682        4   966118     2105  1779143  1771291 454451230   559029        0    87455   561136        0        0        0        0        4        2",
+                "subsystem": "block",
+                "trace/act_mask": "disabled",
+                "trace/enable": "0",
+                "trace/end_lba": "disabled",
+                "trace/pid": "disabled",
+                "trace/start_lba": "disabled",
+                "uevent": "MAJOR=259\nMINOR=4\nDEVNAME=nvme0n1\nDEVTYPE=disk\nDISKSEQ=10",
+                "uuid": "e8238fa6-bf53-0001-001b-444a48ae486a",
+                "wwid": "eui.e8238fa6bf530001001b444a48ae486a"
+            },
+            "partitiontable": {
+                "label": "gpt",
+                "id": "21C689C9-6030-4D14-AE66-F280EF4DAAF8",
+                "device": "/dev/nvme0n1",
+                "unit": "sectors",
+                "firstlba": 2048,
+                "lastlba": 8001568734,
+                "sectorsize": 512,
+                "partitions": [
+                    {
+                        "node": "/dev/nvme0n1p1",
+                        "start": 2048,
+                        "size": 2201600,
+                        "type": "C12A7328-F81F-11D2-BA4B-00A0C93EC93B",
+                        "uuid": "EA24FB61-DD5A-4609-A3DE-714443148DE4"
+                    },
+                    {
+                        "node": "/dev/nvme0n1p2",
+                        "start": 2203648,
+                        "size": 25165824,
+                        "type": "E3C9E316-0B5C-4DB8-817D-F92DF00215AE",
+                        "uuid": "A32BA6C7-9650-4A1D-BB71-2772395F2737"
+                    },
+                    {
+                        "node": "/dev/nvme0n1p3",
+                        "start": 27369472,
+                        "size": 7974197248,
+                        "type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
+                        "uuid": "C93E447D-4FDC-4937-8FE2-09C0B0D04317"
+                    }
+                ]
+            }
+        },
+        "/dev/md126": {
+            "CURRENT_TAGS": ":systemd:",
+            "DEVLINKS": "/dev/disk/by-id/md-uuid-2b219152:a527314e:2421b1aa:763fe1c4 /dev/md/Volume1_0",
+            "DEVNAME": "/dev/md126",
+            "DEVPATH": "/devices/virtual/block/md126",
+            "DEVTYPE": "disk",
+            "DISKSEQ": "13",
+            "ID_IGNORE_DISKSEQ": "1",
+            "ID_PART_TABLE_TYPE": "gpt",
+            "ID_PART_TABLE_UUID": "21c689c9-6030-4d14-ae66-f280ef4daaf8",
+            "MAJOR": "9",
+            "MD_CONTAINER": "/dev/md/imsm0",
+            "MD_DEVICES": "2",
+            "MD_DEVNAME": "Volume1_0",
+            "MD_LEVEL": "raid1",
+            "MD_MEMBER": "0",
+            "MD_MON_THIS": "../md127",
+            "MD_UUID": "2b219152:a527314e:2421b1aa:763fe1c4",
+            "MINOR": "126",
+            "SUBSYSTEM": "block",
+            "SYSTEMD_WANTS": "mdmonitor.service mdmon@md127.service",
+            "TAGS": ":systemd:",
+            "UDISKS_IGNORE": "1",
+            "UDISKS_MD_CONTAINER": "/dev/md/imsm0",
+            "UDISKS_MD_DEVICES": "2",
+            "UDISKS_MD_DEVICE_dev_nvme0n1_DEV": "/dev/nvme0n1",
+            "UDISKS_MD_DEVICE_dev_nvme0n1_ROLE": "1",
+            "UDISKS_MD_DEVICE_dev_nvme1n1_DEV": "/dev/nvme1n1",
+            "UDISKS_MD_DEVICE_dev_nvme1n1_ROLE": "0",
+            "UDISKS_MD_DEVNAME": "Volume1_0",
+            "UDISKS_MD_LEVEL": "raid1",
+            "UDISKS_MD_MEMBER": "0",
+            "UDISKS_MD_UUID": "2b219152:a527314e:2421b1aa:763fe1c4",
+            "USEC_INITIALIZED": "1607238",
+            "attrs": {
+                "alignment_offset": "0",
+                "bdi": null,
+                "capability": "0",
+                "dev": "9:126",
+                "discard_alignment": "0",
+                "diskseq": "13",
+                "events": "",
+                "events_async": "",
+                "events_poll_msecs": "-1",
+                "ext_range": "256",
+                "hidden": "0",
+                "inflight": "       0        0",
+                "integrity/device_is_integrity_capable": "0",
+                "integrity/format": "none",
+                "integrity/protection_interval_bytes": "0",
+                "integrity/read_verify": "0",
+                "integrity/tag_size": "0",
+                "integrity/write_generate": "0",
+                "md/array_size": "4000784384",
+                "md/array_state": "clean",
+                "md/bitmap/backlog": "0",
+                "md/bitmap/can_clear": "",
+                "md/bitmap/chunksize": "0",
+                "md/bitmap/location": "none",
+                "md/bitmap/max_backlog_used": "0",
+                "md/bitmap/metadata": "internal",
+                "md/bitmap/space": "0",
+                "md/bitmap/time_base": "0",
+                "md/chunk_size": "65536",
+                "md/component_size": "4000784384",
+                "md/consistency_policy": "resync",
+                "md/degraded": "0",
+                "md/dev-nvme0n1/bad_blocks": "",
+                "md/dev-nvme0n1/block": null,
+                "md/dev-nvme0n1/errors": "0",
+                "md/dev-nvme0n1/new_offset": "0",
+                "md/dev-nvme0n1/offset": "0",
+                "md/dev-nvme0n1/ppl_sector": "0",
+                "md/dev-nvme0n1/ppl_size": "0",
+                "md/dev-nvme0n1/recovery_start": "none",
+                "md/dev-nvme0n1/size": "4000784384",
+                "md/dev-nvme0n1/slot": "1",
+                "md/dev-nvme0n1/state": "in_sync,external_bbl",
+                "md/dev-nvme0n1/unacknowledged_bad_blocks": "",
+                "md/dev-nvme1n1/bad_blocks": "",
+                "md/dev-nvme1n1/block": null,
+                "md/dev-nvme1n1/errors": "0",
+                "md/dev-nvme1n1/new_offset": "0",
+                "md/dev-nvme1n1/offset": "0",
+                "md/dev-nvme1n1/ppl_sector": "0",
+                "md/dev-nvme1n1/ppl_size": "0",
+                "md/dev-nvme1n1/recovery_start": "none",
+                "md/dev-nvme1n1/size": "4000784384",
+                "md/dev-nvme1n1/slot": "0",
+                "md/dev-nvme1n1/state": "in_sync,external_bbl",
+                "md/dev-nvme1n1/unacknowledged_bad_blocks": "",
+                "md/fail_last_dev": "0",
+                "md/last_sync_action": "resync",
+                "md/layout": "0",
+                "md/level": "raid1",
+                "md/max_read_errors": "20",
+                "md/metadata_version": "external:/md127/0",
+                "md/mismatch_cnt": "0",
+                "md/raid_disks": "2",
+                "md/rd0": null,
+                "md/rd1": null,
+                "md/reshape_direction": "forwards",
+                "md/reshape_position": "none",
+                "md/resync_start": "6927374336",
+                "md/safe_mode_delay": "5.000",
+                "md/serialize_policy": "0",
+                "md/suspend_hi": "0",
+                "md/suspend_lo": "0",
+                "md/sync_action": "resync",
+                "md/sync_completed": "6927374336 / 8001568768",
+                "md/sync_force_parallel": "0",
+                "md/sync_max": "max",
+                "md/sync_min": "0",
+                "md/sync_speed": "205758",
+                "md/sync_speed_max": "200000 (system)",
+                "md/sync_speed_min": "1000 (system)",
+                "md/uuid": "00000000-0000-0000-0000-000000000000",
+                "partscan": "1",
+                "power/async": "disabled",
+                "power/autosuspend_delay_ms": null,
+                "power/control": "auto",
+                "power/runtime_active_kids": "0",
+                "power/runtime_active_time": "0",
+                "power/runtime_enabled": "disabled",
+                "power/runtime_status": "unsupported",
+                "power/runtime_suspended_time": "0",
+                "power/runtime_usage": "0",
+                "queue/add_random": "0",
+                "queue/chunk_sectors": "0",
+                "queue/dax": "0",
+                "queue/discard_granularity": "512",
+                "queue/discard_max_bytes": "2199023255040",
+                "queue/discard_max_hw_bytes": "2199023255040",
+                "queue/discard_zeroes_data": "0",
+                "queue/dma_alignment": "511",
+                "queue/fua": "1",
+                "queue/hw_sector_size": "512",
+                "queue/io_poll": "0",
+                "queue/io_poll_delay": "-1",
+                "queue/iostats": "1",
+                "queue/logical_block_size": "512",
+                "queue/max_discard_segments": "256",
+                "queue/max_hw_sectors_kb": "128",
+                "queue/max_integrity_segments": "0",
+                "queue/max_sectors_kb": "128",
+                "queue/max_segment_size": "4294967295",
+                "queue/max_segments": "33",
+                "queue/minimum_io_size": "512",
+                "queue/nomerges": "0",
+                "queue/nr_zones": "0",
+                "queue/optimal_io_size": "0",
+                "queue/physical_block_size": "512",
+                "queue/read_ahead_kb": "128",
+                "queue/rotational": "0",
+                "queue/stable_writes": "0",
+                "queue/virt_boundary_mask": "4095",
+                "queue/write_cache": "write back",
+                "queue/write_same_max_bytes": "0",
+                "queue/write_zeroes_max_bytes": "0",
+                "queue/zone_append_max_bytes": "0",
+                "queue/zone_write_granularity": "0",
+                "queue/zoned": "none",
+                "range": "1",
+                "removable": "0",
+                "ro": "0",
+                "size": "4096803209216",
+                "slaves/nvme0n1": null,
+                "slaves/nvme1n1": null,
+                "stat": "   58064        0  8994020    13076        0        0        0        0        0     7258    13076        0        0        0        0        0        0",
+                "subsystem": "block",
+                "trace/act_mask": "disabled",
+                "trace/enable": "0",
+                "trace/end_lba": "disabled",
+                "trace/pid": "disabled",
+                "trace/start_lba": "disabled",
+                "uevent": "MAJOR=9\nMINOR=126\nDEVNAME=md126\nDEVTYPE=disk\nDISKSEQ=13"
+            },
+            "partitiontable": {
+                "label": "gpt",
+                "id": "21C689C9-6030-4D14-AE66-F280EF4DAAF8",
+                "device": "/dev/md126",
+                "unit": "sectors",
+                "firstlba": 2048,
+                "lastlba": 8001568734,
+                "sectorsize": 512,
+                "partitions": [
+                    {
+                        "node": "/dev/md126p1",
+                        "start": 2048,
+                        "size": 2201600,
+                        "type": "C12A7328-F81F-11D2-BA4B-00A0C93EC93B",
+                        "uuid": "EA24FB61-DD5A-4609-A3DE-714443148DE4"
+                    },
+                    {
+                        "node": "/dev/md126p2",
+                        "start": 2203648,
+                        "size": 25165824,
+                        "type": "E3C9E316-0B5C-4DB8-817D-F92DF00215AE",
+                        "uuid": "A32BA6C7-9650-4A1D-BB71-2772395F2737"
+                    },
+                    {
+                        "node": "/dev/md126p3",
+                        "start": 27369472,
+                        "size": 7974197248,
+                        "type": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
+                        "uuid": "C93E447D-4FDC-4937-8FE2-09C0B0D04317"
+                    }
+                ]
+            }
+        },
+        "/dev/md126p1": {
+            "CURRENT_TAGS": ":systemd:",
+            "DEVLINKS": "/dev/disk/by-uuid/C6C4-C1B0 /dev/disk/by-partuuid/ea24fb61-dd5a-4609-a3de-714443148de4 /dev/disk/by-id/md-uuid-2b219152:a527314e:2421b1aa:763fe1c4-part1 /dev/md/Volume1_0p1",
+            "DEVNAME": "/dev/md126p1",
+            "DEVPATH": "/devices/virtual/block/md126/md126p1",
+            "DEVTYPE": "partition",
+            "DISKSEQ": "13",
+            "ID_FS_BLOCKSIZE": "4096",
+            "ID_FS_SIZE": "1127219200",
+            "ID_FS_TYPE": "vfat",
+            "ID_FS_USAGE": "filesystem",
+            "ID_FS_UUID": "C6C4-C1B0",
+            "ID_FS_UUID_ENC": "C6C4-C1B0",
+            "ID_FS_VERSION": "FAT32",
+            "ID_IGNORE_DISKSEQ": "1",
+            "ID_PART_ENTRY_DISK": "9:126",
+            "ID_PART_ENTRY_NUMBER": "1",
+            "ID_PART_ENTRY_OFFSET": "2048",
+            "ID_PART_ENTRY_SCHEME": "gpt",
+            "ID_PART_ENTRY_SIZE": "2201600",
+            "ID_PART_ENTRY_TYPE": "c12a7328-f81f-11d2-ba4b-00a0c93ec93b",
+            "ID_PART_ENTRY_UUID": "ea24fb61-dd5a-4609-a3de-714443148de4",
+            "MAJOR": "259",
+            "MD_CONTAINER": "/dev/md/imsm0",
+            "MD_DEVICES": "2",
+            "MD_DEVNAME": "Volume1_0",
+            "MD_LEVEL": "raid1",
+            "MD_MEMBER": "0",
+            "MD_MON_THIS": "../md127",
+            "MD_UUID": "2b219152:a527314e:2421b1aa:763fe1c4",
+            "MINOR": "1",
+            "PARTN": "1",
+            "SUBSYSTEM": "block",
+            "SYSTEMD_WANTS": "mdmonitor.service mdmon@md127.service",
+            "TAGS": ":systemd:",
+            "UDISKS_IGNORE": "1",
+            "USEC_INITIALIZED": "1651676",
+            "attrs": {
+                "alignment_offset": "0",
+                "dev": "259:1",
+                "discard_alignment": "0",
+                "inflight": "       0        0",
+                "partition": "1",
+                "power/async": "disabled",
+                "power/autosuspend_delay_ms": null,
+                "power/control": "auto",
+                "power/runtime_active_kids": "0",
+                "power/runtime_active_time": "0",
+                "power/runtime_enabled": "disabled",
+                "power/runtime_status": "unsupported",
+                "power/runtime_suspended_time": "0",
+                "power/runtime_usage": "0",
+                "ro": "0",
+                "size": "1127219200",
+                "start": "2048",
+                "stat": "     559        0    38595       62        0        0        0        0        0       56       62        0        0        0        0        0        0",
+                "subsystem": "block",
+                "trace/act_mask": "disabled",
+                "trace/enable": "0",
+                "trace/end_lba": "disabled",
+                "trace/pid": "disabled",
+                "trace/start_lba": "disabled",
+                "uevent": "MAJOR=259\nMINOR=1\nDEVNAME=md126p1\nDEVTYPE=partition\nDISKSEQ=13\nPARTN=1"
+            },
+            "partitiontable": {
+                "label": "dos",
+                "id": "0x00000000",
+                "device": "/dev/md126p1",
+                "unit": "sectors",
+                "sectorsize": 512
+            }
+        },
+        "/dev/md126p2": {
+            "CURRENT_TAGS": ":systemd:",
+            "DEVLINKS": "/dev/disk/by-partuuid/a32ba6c7-9650-4a1d-bb71-2772395f2737 /dev/md/Volume1_0p2 /dev/disk/by-uuid/58DC-9740 /dev/disk/by-id/md-uuid-2b219152:a527314e:2421b1aa:763fe1c4-part2",
+            "DEVNAME": "/dev/md126p2",
+            "DEVPATH": "/devices/virtual/block/md126/md126p2",
+            "DEVTYPE": "partition",
+            "DISKSEQ": "13",
+            "ID_FS_BLOCKSIZE": "8192",
+            "ID_FS_SIZE": "12884901888",
+            "ID_FS_TYPE": "vfat",
+            "ID_FS_USAGE": "filesystem",
+            "ID_FS_UUID": "58DC-9740",
+            "ID_FS_UUID_ENC": "58DC-9740",
+            "ID_FS_VERSION": "FAT32",
+            "ID_IGNORE_DISKSEQ": "1",
+            "ID_PART_ENTRY_DISK": "9:126",
+            "ID_PART_ENTRY_NUMBER": "2",
+            "ID_PART_ENTRY_OFFSET": "2203648",
+            "ID_PART_ENTRY_SCHEME": "gpt",
+            "ID_PART_ENTRY_SIZE": "25165824",
+            "ID_PART_ENTRY_TYPE": "e3c9e316-0b5c-4db8-817d-f92df00215ae",
+            "ID_PART_ENTRY_UUID": "a32ba6c7-9650-4a1d-bb71-2772395f2737",
+            "MAJOR": "259",
+            "MD_CONTAINER": "/dev/md/imsm0",
+            "MD_DEVICES": "2",
+            "MD_DEVNAME": "Volume1_0",
+            "MD_LEVEL": "raid1",
+            "MD_MEMBER": "0",
+            "MD_MON_THIS": "../md127",
+            "MD_UUID": "2b219152:a527314e:2421b1aa:763fe1c4",
+            "MINOR": "2",
+            "PARTN": "2",
+            "SUBSYSTEM": "block",
+            "SYSTEMD_WANTS": "mdmonitor.service mdmon@md127.service",
+            "TAGS": ":systemd:",
+            "UDISKS_IGNORE": "1",
+            "USEC_INITIALIZED": "1651687",
+            "attrs": {
+                "alignment_offset": "0",
+                "dev": "259:2",
+                "discard_alignment": "0",
+                "inflight": "       0        0",
+                "partition": "2",
+                "power/async": "disabled",
+                "power/autosuspend_delay_ms": null,
+                "power/control": "auto",
+                "power/runtime_active_kids": "0",
+                "power/runtime_active_time": "0",
+                "power/runtime_enabled": "disabled",
+                "power/runtime_status": "unsupported",
+                "power/runtime_suspended_time": "0",
+                "power/runtime_usage": "0",
+                "ro": "0",
+                "size": "12884901888",
+                "start": "2203648",
+                "stat": "   56642        0  8892993    12846        0        0        0        0        0     7868    12846        0        0        0        0        0        0",
+                "subsystem": "block",
+                "trace/act_mask": "disabled",
+                "trace/enable": "0",
+                "trace/end_lba": "disabled",
+                "trace/pid": "disabled",
+                "trace/start_lba": "disabled",
+                "uevent": "MAJOR=259\nMINOR=2\nDEVNAME=md126p2\nDEVTYPE=partition\nDISKSEQ=13\nPARTN=2"
+            },
+            "partitiontable": {
+                "label": "dos",
+                "id": "0x00000000",
+                "device": "/dev/md126p2",
+                "unit": "sectors",
+                "sectorsize": 512
+            }
+        },
+        "/dev/md126p3": {
+            "CURRENT_TAGS": ":systemd:",
+            "DEVLINKS": "/dev/disk/by-partuuid/c93e447d-4fdc-4937-8fe2-09c0b0d04317 /dev/disk/by-id/md-uuid-2b219152:a527314e:2421b1aa:763fe1c4-part3 /dev/disk/by-uuid/ecddad07-31c1-4681-bc1a-1e5ec9aeb7c1 /dev/md/Volume1_0p3",
+            "DEVNAME": "/dev/md126p3",
+            "DEVPATH": "/devices/virtual/block/md126/md126p3",
+            "DEVTYPE": "partition",
+            "DISKSEQ": "13",
+            "ID_FS_BLOCKSIZE": "4096",
+            "ID_FS_LASTBLOCK": "996774656",
+            "ID_FS_SIZE": "4082788990976",
+            "ID_FS_TYPE": "ext4",
+            "ID_FS_USAGE": "filesystem",
+            "ID_FS_UUID": "ecddad07-31c1-4681-bc1a-1e5ec9aeb7c1",
+            "ID_FS_UUID_ENC": "ecddad07-31c1-4681-bc1a-1e5ec9aeb7c1",
+            "ID_FS_VERSION": "1.0",
+            "ID_IGNORE_DISKSEQ": "1",
+            "ID_PART_ENTRY_DISK": "9:126",
+            "ID_PART_ENTRY_NUMBER": "3",
+            "ID_PART_ENTRY_OFFSET": "27369472",
+            "ID_PART_ENTRY_SCHEME": "gpt",
+            "ID_PART_ENTRY_SIZE": "7974197248",
+            "ID_PART_ENTRY_TYPE": "0fc63daf-8483-4772-8e79-3d69d8477de4",
+            "ID_PART_ENTRY_UUID": "c93e447d-4fdc-4937-8fe2-09c0b0d04317",
+            "MAJOR": "259",
+            "MD_CONTAINER": "/dev/md/imsm0",
+            "MD_DEVICES": "2",
+            "MD_DEVNAME": "Volume1_0",
+            "MD_LEVEL": "raid1",
+            "MD_MEMBER": "0",
+            "MD_MON_THIS": "../md127",
+            "MD_UUID": "2b219152:a527314e:2421b1aa:763fe1c4",
+            "MINOR": "3",
+            "PARTN": "3",
+            "SUBSYSTEM": "block",
+            "SYSTEMD_WANTS": "mdmonitor.service mdmon@md127.service",
+            "TAGS": ":systemd:",
+            "UDISKS_IGNORE": "1",
+            "USEC_INITIALIZED": "1651700",
+            "attrs": {
+                "alignment_offset": "0",
+                "dev": "259:3",
+                "discard_alignment": "0",
+                "inflight": "       0        0",
+                "partition": "3",
+                "power/async": "disabled",
+                "power/autosuspend_delay_ms": null,
+                "power/control": "auto",
+                "power/runtime_active_kids": "0",
+                "power/runtime_active_time": "0",
+                "power/runtime_enabled": "disabled",
+                "power/runtime_status": "unsupported",
+                "power/runtime_suspended_time": "0",
+                "power/runtime_usage": "0",
+                "ro": "0",
+                "size": "4082788990976",
+                "start": "27369472",
+                "stat": "     567        0    47584       90        0        0        0        0        0       70       90        0        0        0        0        0        0",
+                "subsystem": "block",
+                "trace/act_mask": "disabled",
+                "trace/enable": "0",
+                "trace/end_lba": "disabled",
+                "trace/pid": "disabled",
+                "trace/start_lba": "disabled",
+                "uevent": "MAJOR=259\nMINOR=3\nDEVNAME=md126p3\nDEVTYPE=partition\nDISKSEQ=13\nPARTN=3"
+            }
+        },
+        "/dev/md127": {
+            "CURRENT_TAGS": ":systemd:",
+            "DEVLINKS": "/dev/disk/by-id/md-uuid-9fe673fb:76093732:2e12989f:d3e828f1 /dev/md/imsm0",
+            "DEVNAME": "/dev/md127",
+            "DEVPATH": "/devices/virtual/block/md127",
+            "DEVTYPE": "disk",
+            "DISKSEQ": "11",
+            "ID_IGNORE_DISKSEQ": "1",
+            "MAJOR": "9",
+            "MD_DEVICES": "2",
+            "MD_DEVNAME": "imsm0",
+            "MD_LEVEL": "container",
+            "MD_METADATA": "imsm",
+            "MD_UUID": "9fe673fb:76093732:2e12989f:d3e828f1",
+            "MINOR": "127",
+            "SUBSYSTEM": "block",
+            "SYSTEMD_READY": "0",
+            "TAGS": ":systemd:",
+            "UDISKS_IGNORE": "1",
+            "UDISKS_MD_DEVICES": "2",
+            "UDISKS_MD_DEVICE_dev_nvme0n1_DEV": "/dev/nvme0n1",
+            "UDISKS_MD_DEVICE_dev_nvme0n1_ROLE": "spare",
+            "UDISKS_MD_DEVICE_dev_nvme1n1_DEV": "/dev/nvme1n1",
+            "UDISKS_MD_DEVICE_dev_nvme1n1_ROLE": "spare",
+            "UDISKS_MD_DEVNAME": "imsm0",
+            "UDISKS_MD_LEVEL": "container",
+            "UDISKS_MD_METADATA": "imsm",
+            "UDISKS_MD_UUID": "9fe673fb:76093732:2e12989f:d3e828f1",
+            "USEC_INITIALIZED": "1577302",
+            "attrs": {
+                "alignment_offset": "0",
+                "bdi": null,
+                "capability": "0",
+                "dev": "9:127",
+                "discard_alignment": "0",
+                "diskseq": "11",
+                "events": "",
+                "events_async": "",
+                "events_poll_msecs": "-1",
+                "ext_range": "256",
+                "hidden": "0",
+                "inflight": "       0        0",
+                "integrity/device_is_integrity_capable": "0",
+                "integrity/format": "none",
+                "integrity/protection_interval_bytes": "0",
+                "integrity/read_verify": "0",
+                "integrity/tag_size": "0",
+                "integrity/write_generate": "0",
+                "md/array_size": "default",
+                "md/array_state": "inactive",
+                "md/bitmap/backlog": "0",
+                "md/bitmap/can_clear": "",
+                "md/bitmap/chunksize": "0",
+                "md/bitmap/location": "none",
+                "md/bitmap/max_backlog_used": "0",
+                "md/bitmap/metadata": "internal",
+                "md/bitmap/space": "0",
+                "md/bitmap/time_base": "0",
+                "md/chunk_size": "0",
+                "md/component_size": "0",
+                "md/consistency_policy": "unknown",
+                "md/dev-nvme0n1/bad_blocks": "",
+                "md/dev-nvme0n1/block": null,
+                "md/dev-nvme0n1/errors": "0",
+                "md/dev-nvme0n1/new_offset": "8001568768",
+                "md/dev-nvme0n1/offset": "8001568768",
+                "md/dev-nvme0n1/ppl_sector": "0",
+                "md/dev-nvme0n1/ppl_size": "0",
+                "md/dev-nvme0n1/recovery_start": "0",
+                "md/dev-nvme0n1/size": "2392",
+                "md/dev-nvme0n1/slot": "none",
+                "md/dev-nvme0n1/state": "spare,external_bbl",
+                "md/dev-nvme0n1/unacknowledged_bad_blocks": "",
+                "md/dev-nvme1n1/bad_blocks": "",
+                "md/dev-nvme1n1/block": null,
+                "md/dev-nvme1n1/errors": "0",
+                "md/dev-nvme1n1/new_offset": "8001568768",
+                "md/dev-nvme1n1/offset": "8001568768",
+                "md/dev-nvme1n1/ppl_sector": "0",
+                "md/dev-nvme1n1/ppl_size": "0",
+                "md/dev-nvme1n1/recovery_start": "0",
+                "md/dev-nvme1n1/size": "2392",
+                "md/dev-nvme1n1/slot": "none",
+                "md/dev-nvme1n1/state": "spare,external_bbl",
+                "md/dev-nvme1n1/unacknowledged_bad_blocks": "",
+                "md/fail_last_dev": "0",
+                "md/layout": "0",
+                "md/level": "",
+                "md/max_read_errors": "0",
+                "md/metadata_version": "external:imsm",
+                "md/raid_disks": "",
+                "md/reshape_direction": "forwards",
+                "md/reshape_position": "none",
+                "md/resync_start": "0",
+                "md/safe_mode_delay": "0.000",
+                "md/serialize_policy": "n/a",
+                "md/uuid": "00000000-0000-0000-0000-000000000000",
+                "partscan": "1",
+                "power/async": "disabled",
+                "power/autosuspend_delay_ms": null,
+                "power/control": "auto",
+                "power/runtime_active_kids": "0",
+                "power/runtime_active_time": "0",
+                "power/runtime_enabled": "disabled",
+                "power/runtime_status": "unsupported",
+                "power/runtime_suspended_time": "0",
+                "power/runtime_usage": "0",
+                "queue/add_random": "0",
+                "queue/chunk_sectors": "0",
+                "queue/dax": "0",
+                "queue/discard_granularity": "512",
+                "queue/discard_max_bytes": "0",
+                "queue/discard_max_hw_bytes": "0",
+                "queue/discard_zeroes_data": "0",
+                "queue/dma_alignment": "511",
+                "queue/fua": "1",
+                "queue/hw_sector_size": "512",
+                "queue/io_poll": "0",
+                "queue/io_poll_delay": "-1",
+                "queue/iostats": "0",
+                "queue/logical_block_size": "512",
+                "queue/max_discard_segments": "65535",
+                "queue/max_hw_sectors_kb": "2147483647",
+                "queue/max_integrity_segments": "0",
+                "queue/max_sectors_kb": "2147483647",
+                "queue/max_segment_size": "4294967295",
+                "queue/max_segments": "65535",
+                "queue/minimum_io_size": "512",
+                "queue/nomerges": "0",
+                "queue/nr_zones": "0",
+                "queue/optimal_io_size": "0",
+                "queue/physical_block_size": "512",
+                "queue/read_ahead_kb": "128",
+                "queue/rotational": "1",
+                "queue/stable_writes": "0",
+                "queue/virt_boundary_mask": "0",
+                "queue/write_cache": "write back",
+                "queue/write_same_max_bytes": "0",
+                "queue/write_zeroes_max_bytes": "2199023255040",
+                "queue/zone_append_max_bytes": "2199023255040",
+                "queue/zone_write_granularity": "0",
+                "queue/zoned": "none",
+                "range": "1",
+                "removable": "0",
+                "ro": "0",
+                "size": "0",
+                "slaves/nvme0n1": null,
+                "slaves/nvme1n1": null,
+                "stat": "       0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0",
+                "subsystem": "block",
+                "trace/act_mask": "disabled",
+                "trace/enable": "0",
+                "trace/end_lba": "disabled",
+                "trace/pid": "disabled",
+                "trace/start_lba": "disabled",
+                "uevent": "MAJOR=9\nMINOR=127\nDEVNAME=md127\nDEVTYPE=disk\nDISKSEQ=11"
+            }
+        }
+    },
+    "zfs": {
+        "zpools": {}
+    },
+    "filesystem": {
+        "/dev/md126p1": {
+            "BLOCKSIZE": "4096",
+            "SIZE": "1127219200",
+            "TYPE": "vfat",
+            "USAGE": "filesystem",
+            "UUID": "C6C4-C1B0",
+            "UUID_ENC": "C6C4-C1B0",
+            "VERSION": "FAT32",
+            "ESTIMATED_MIN_SIZE": -1
+        },
+        "/dev/md126p2": {
+            "BLOCKSIZE": "8192",
+            "SIZE": "12884901888",
+            "TYPE": "vfat",
+            "USAGE": "filesystem",
+            "UUID": "58DC-9740",
+            "UUID_ENC": "58DC-9740",
+            "VERSION": "FAT32",
+            "ESTIMATED_MIN_SIZE": -1
+        },
+        "/dev/md126p3": {
+            "BLOCKSIZE": "4096",
+            "LASTBLOCK": "996774656",
+            "SIZE": 4082788990976,
+            "TYPE": "ext4",
+            "USAGE": "filesystem",
+            "UUID": "ecddad07-31c1-4681-bc1a-1e5ec9aeb7c1",
+            "UUID_ENC": "ecddad07-31c1-4681-bc1a-1e5ec9aeb7c1",
+            "VERSION": "1.0",
+            "ESTIMATED_MIN_SIZE": 22938783744
+        }
+    },
+    "os": {
+        "/dev/md126p3": {
+            "long": "Ubuntu 24.04.1 LTS",
+            "label": "Ubuntu",
+            "type": "linux",
+            "version": "24.04.1"
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/unittests/test_storage_config.py b/tests/unittests/test_storage_config.py
index 7b0f68c..d1f3022 100644
--- a/tests/unittests/test_storage_config.py
+++ b/tests/unittests/test_storage_config.py
@@ -1,6 +1,8 @@
 # This file is part of curtin. See LICENSE file for copyright and license info.
 import copy
 import json
+from unittest import mock
+
 from .helpers import CiTestCase, skipUnlessJsonSchema
 from curtin import storage_config
 from curtin.storage_config import ProbertParser as baseparser
@@ -143,6 +145,38 @@ class TestProbertParser(CiTestCase):
 
         self.assertIsNotNone(bdparser(probe_data))
 
+    def test_detect_partition_scheme__unpartitioned(self):
+        blockdev = {
+            "DEVNAME": "/dev/sda",
+            "DEVTYPE": "disk",
+        }
+        self.assertIsNone(baseparser.detect_partition_scheme(blockdev))
+
+    def test_detect_partition_scheme__gpt(self):
+        blockdev = {
+            "DEVNAME": "/dev/sda",
+            "DEVTYPE": "disk",
+            "ID_PART_TABLE_TYPE": "gpt",
+        }
+        self.assertEqual("gpt", baseparser.detect_partition_scheme(blockdev))
+
+    def test_detect_partition_scheme__dos(self):
+        blockdev = {
+            "DEVNAME": "/dev/sda",
+            "DEVTYPE": "disk",
+            "ID_PART_TABLE_TYPE": "dos",
+        }
+        self.assertEqual("dos", baseparser.detect_partition_scheme(blockdev))
+
+    def test_detect_partition_scheme__something_else(self):
+        blockdev = {
+            "DEVNAME": "/dev/sda",
+            "DEVTYPE": "disk",
+            "ID_PART_TABLE_TYPE": "foobar",
+        }
+        self.assertEqual(
+            "unsupported", baseparser.detect_partition_scheme(blockdev))
+
 
 def _get_data(datafile):
     data = util.load_file('tests/data/%s' % datafile)
@@ -560,6 +594,7 @@ class TestBlockdevParser(CiTestCase):
             'size': 10734272512,
             'type': 'partition',
             'partition_type': '0fc63daf-8483-4772-8e79-3d69d8477de4',
+            'uuid': '760493ac-7945-44c5-a6bd-58fcd6632ea7',
             }
         self.assertDictEqual(expected_dict, self.bdevp.asdict(blockdev))
 
@@ -611,6 +646,27 @@ class TestBlockdevParser(CiTestCase):
         actual = self.bdevp.asdict(blockdev)
         self.assertEqual(5000 << 20, actual['size'])
 
+    def test_blockdev_partition_from_imsm(self):
+        """
+        partition uuid should exist in absence of ID_PART_TABLE_TYPE in
+        partition
+        """
+        self.probe_data = _get_data('probert_storage_imsm_with_parts.json')
+        self.bdevp = BlockdevParser(self.probe_data)
+        blockdev = self.bdevp.blockdev_data['/dev/md126p2']
+        expected_dict = {
+            'device': 'raid-md126',
+            'flag': 'msftres',
+            'id': 'raid-md126p2',
+            'number': 2,
+            'offset': 1128267776,
+            'partition_type': 'e3c9e316-0b5c-4db8-817d-f92df00215ae',
+            'path': '/dev/md126p2',
+            'size': 12884901888,
+            'type': 'partition',
+            'uuid': 'a32ba6c7-9650-4a1d-bb71-2772395f2737'}
+        self.assertDictEqual(expected_dict, self.bdevp.asdict(blockdev))
+
 
 class TestFilesystemParser(CiTestCase):
 
@@ -1050,6 +1106,7 @@ class TestExtractStorageConfig(CiTestCase):
         self.assertEqual({'id': 'raid-md1', 'type': 'raid', 'metadata': '1.2',
                           'raidlevel': 'raid1', 'name': 'md1',
                           'path': '/dev/md1',
+                          'ptable': 'gpt',
                           'devices': ['partition-vdb1', 'partition-vdc1'],
                           'spare_devices': []}, raids[0])
         self.assertEqual({
@@ -1061,7 +1118,8 @@ class TestExtractStorageConfig(CiTestCase):
             'number': 1,
             'partition_type': '0fc63daf-8483-4772-8e79-3d69d8477de4',
             'device': 'raid-md1',
-            'offset': 1048576},
+            'offset': 1048576,
+            'uuid': '5b3f90c0-2432-45c1-98e2-6e9e6649430e'},
             raid_partitions[0])
 
     @skipUnlessJsonSchema()

Follow ups