From 05f908b68f728cc109f6a415a50bd8701e264755 Mon Sep 17 00:00:00 2001 From: yueyuankun Date: Fri, 9 Jun 2023 16:52:53 +0800 Subject: [PATCH] DDF RAID support using mdadm --- backport-DDF-RAID-support-using-mdadm.patch | 107 ++++++++++++++++++++ python-blivet.spec | 9 +- 2 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 backport-DDF-RAID-support-using-mdadm.patch diff --git a/backport-DDF-RAID-support-using-mdadm.patch b/backport-DDF-RAID-support-using-mdadm.patch new file mode 100644 index 0000000..976b97e --- /dev/null +++ b/backport-DDF-RAID-support-using-mdadm.patch @@ -0,0 +1,107 @@ +From 898178047ac4bc97ddccb193cb0e11f7fdf18196 Mon Sep 17 00:00:00 2001 +From: Vojtech Trefny +Date: Wed, 17 Aug 2022 14:24:21 +0200 +Subject: [PATCH 1/3] Use MD populator instead of DM to handle DDF RAID format + +--- + blivet/formats/dmraid.py | 2 +- + blivet/formats/mdraid.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/blivet/formats/dmraid.py b/blivet/formats/dmraid.py +index 2ba9dcfe5..ce15905dc 100644 +--- a/blivet/formats/dmraid.py ++++ b/blivet/formats/dmraid.py +@@ -43,7 +43,7 @@ class DMRaidMember(DeviceFormat): + # + # One problem that presents is the possibility of someone passing + # a dmraid member to the MDRaidArrayDevice constructor. +- _udev_types = ["adaptec_raid_member", "ddf_raid_member", ++ _udev_types = ["adaptec_raid_member", + "hpt37x_raid_member", "hpt45x_raid_member", + "isw_raid_member", + "jmicron_raid_member", "lsi_mega_raid_member", +diff --git a/blivet/formats/mdraid.py b/blivet/formats/mdraid.py +index 41ddef810..4aa3f3b07 100644 +--- a/blivet/formats/mdraid.py ++++ b/blivet/formats/mdraid.py +@@ -41,7 +41,7 @@ class MDRaidMember(DeviceFormat): + """ An mdraid member disk. """ + _type = "mdmember" + _name = N_("software RAID") +- _udev_types = ["linux_raid_member"] ++ _udev_types = ["linux_raid_member", "ddf_raid_member"] + parted_flag = PARTITION_RAID + _formattable = True # can be formatted + _supported = True # is supported + +From c487c6178ee9859163379946c1bdc3b2df1857b1 Mon Sep 17 00:00:00 2001 +From: Vojtech Trefny +Date: Wed, 17 Aug 2022 14:24:58 +0200 +Subject: [PATCH 2/3] Do not read DDF RAID UUID from udev + +The UUID we get from udev isn't the array UUID, we need to get +that using libblockdev. +--- + blivet/populator/helpers/mdraid.py | 16 ++++++++++------ + 1 file changed, 10 insertions(+), 6 deletions(-) + +diff --git a/blivet/populator/helpers/mdraid.py b/blivet/populator/helpers/mdraid.py +index 76aebf250..9bec11efb 100644 +--- a/blivet/populator/helpers/mdraid.py ++++ b/blivet/populator/helpers/mdraid.py +@@ -98,17 +98,21 @@ class MDFormatPopulator(FormatPopulator): + + def _get_kwargs(self): + kwargs = super(MDFormatPopulator, self)._get_kwargs() +- try: +- # ID_FS_UUID contains the array UUID +- kwargs["md_uuid"] = udev.device_get_uuid(self.data) +- except KeyError: +- log.warning("mdraid member %s has no md uuid", udev.device_get_name(self.data)) ++ kwargs["biosraid"] = udev.device_is_biosraid_member(self.data) ++ if not kwargs["biosraid"]: ++ try: ++ # ID_FS_UUID contains the array UUID ++ kwargs["md_uuid"] = udev.device_get_uuid(self.data) ++ except KeyError: ++ log.warning("mdraid member %s has no md uuid", udev.device_get_name(self.data)) ++ else: ++ # for BIOS RAIDs we can't get the UUID from udev, we'll get it from mdadm in `run` below ++ kwargs["md_uuid"] = None + + # reset the uuid to the member-specific value + # this will be None for members of v0 metadata arrays + kwargs["uuid"] = udev.device_get_md_device_uuid(self.data) + +- kwargs["biosraid"] = udev.device_is_biosraid_member(self.data) + return kwargs + + def run(self): + +From 325681bcd40fc4f0e13a4d23c889e1f7cc043cc1 Mon Sep 17 00:00:00 2001 +From: Vojtech Trefny +Date: Thu, 17 Mar 2022 15:48:25 +0100 +Subject: [PATCH 3/3] Do not crash when a disk populator doesn't return kwargs + +This happens when trying to use Blivet on a system with a BIOS +RAID without dmraid installed. Because we don't fully support +BIOS RAIDs using MD the MDBiosRaidDevicePopulator helper fails +to get kwargs for the BIOS RAID "disk" and populate fails. +--- + blivet/populator/helpers/disk.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/blivet/populator/helpers/disk.py b/blivet/populator/helpers/disk.py +index 2e5026f7e..9db7b810d 100644 +--- a/blivet/populator/helpers/disk.py ++++ b/blivet/populator/helpers/disk.py +@@ -68,6 +68,8 @@ def run(self): + log_method_call(self, name=name) + + kwargs = self._get_kwargs() ++ if not kwargs: ++ return + device = self._device_class(name, **kwargs) + self._devicetree._add_device(device) + return device diff --git a/python-blivet.spec b/python-blivet.spec index bd27b1f..0e83e56 100644 --- a/python-blivet.spec +++ b/python-blivet.spec @@ -3,7 +3,7 @@ Name: python-blivet Version: 3.4.2 -Release: 7 +Release: 8 Epoch: 1 Summary: A python module for system storage configuration License: LGPLv2+ @@ -31,6 +31,7 @@ patch6002: backport-Exclude-unusable-disks-from-PartitionFactory-2.patch Patch6003: 0001-add-loongarch64-support-for-blivet.patch %endif patch6004: backport-Add-a-basic-read-only-support-for-UDF-filesystem.patch +patch6005: backport-DDF-RAID-support-using-mdadm.patch %description The python-blivet package is a python module for examining and modifying @@ -131,6 +132,12 @@ make PYTHON=%{__python2} DESTDIR=%{buildroot} install %doc README.md %changelog +* Fri Jun 09 2023 yueyuankun - 1:3.4.2-8 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC:DDF RAID support using mdadm + * Mon Feb 13 2023 hanhuihui - 1:3.4.2-7 - Type:bugfix - ID:NA -- Gitee