From cb5afd12d8182c68bd0d9992bd27f5d4e2460217 Mon Sep 17 00:00:00 2001 From: Martin Wilck Date: Fri, 9 Aug 2013 14:31:05 +0200 Subject: [PATCH 1/2] storage: have DDF disks handled by mdadm This patch changes the behavior of anaconda when DDF RAID members are encountered. These used to be handled by dmraid. Use mdadm now, as for IMSM RAID members. Signed-off-by: Martin Wilck --- 70-anaconda.rules | 1 + storage/__init__.py | 2 +- storage/formats/dmraid.py | 2 ++ storage/formats/mdraid.py | 4 ++++ storage/udev.py | 2 +- 5 files changed, 9 insertions(+), 2 deletions(-) diff --git a/70-anaconda.rules b/70-anaconda.rules index 139c1f5..307ac59 100644 --- a/70-anaconda.rules +++ b/70-anaconda.rules @@ -18,6 +18,7 @@ KERNEL=="dm-*", ENV{DM_SUSPENDED}=="Suspended", GOTO="anaconda_end" # probe raid metadata of mdraid member devices ENV{ID_FS_TYPE}=="linux_raid_member", IMPORT{program}="$env{ANACBIN}/mdadm --examine --export $tempnode" ENV{ID_FS_TYPE}=="isw_raid_member", IMPORT{program}="$env{ANACBIN}/mdadm --examine --export $tempnode" +ENV{ID_FS_TYPE}=="ddf_raid_member", IMPORT{program}="$env{ANACBIN}/mdadm --examine --export $tempnode" # probe metadata of LVM2 physical volumes ENV{ID_FS_TYPE}=="LVM2_member", IMPORT{program}="$env{ANACBIN}/lvm pvs --config 'global {locking_type=4}' --units k --nosuffix --nameprefixes --rows --unquoted --noheadings -opv_name,pv_uuid,pv_size,pv_pe_count,pv_pe_alloc_count,pe_start,vg_name,vg_uuid,vg_size,vg_free,vg_extent_size,vg_extent_count,vg_free_count,pv_count $tempnode" diff --git a/storage/__init__.py b/storage/__init__.py index 1e32d9d..26369d8 100644 --- a/storage/__init__.py +++ b/storage/__init__.py @@ -2270,7 +2270,7 @@ class FSSet(object): conf = "# mdadm.conf written out by anaconda\n" conf += "MAILADDR root\n" - conf += "AUTO +imsm +1.x -all\n" + conf += "AUTO +ddf +imsm +1.x -all\n" devices = self.mountpoints.values() + self.swapDevices for array in arrays: for device in devices: diff --git a/storage/formats/dmraid.py b/storage/formats/dmraid.py index 75d7a6e..ff9b234 100644 --- a/storage/formats/dmraid.py +++ b/storage/formats/dmraid.py @@ -105,6 +105,8 @@ class DMRaidMember(DeviceFormat): if not flags.cmdline.has_key("noiswmd"): DMRaidMember._udevTypes.remove("isw_raid_member") +if not flags.cmdline.has_key("noddfmd"): + DMRaidMember._udevTypes.remove("ddf_raid_member") # The anaconda cmdline has not been parsed yet when we're first imported, # so we can not use flags.dmraid here diff --git a/storage/formats/mdraid.py b/storage/formats/mdraid.py index b167073..a49e1c9 100644 --- a/storage/formats/mdraid.py +++ b/storage/formats/mdraid.py @@ -120,5 +120,9 @@ if not flags.cmdline.has_key("noiswmd") and \ not flags.cmdline.has_key("nodmraid"): MDRaidMember._udevTypes.append("isw_raid_member") +if not flags.cmdline.has_key("noddfmd") and \ + not flags.cmdline.has_key("nodmraid"): + MDRaidMember._udevTypes.append("ddf_raid_member") + register_device_format(MDRaidMember) diff --git a/storage/udev.py b/storage/udev.py index b7983af..d1824e5 100644 --- a/storage/udev.py +++ b/storage/udev.py @@ -177,7 +177,7 @@ def udev_device_is_md(info): return False # isw raid set *members* have MD_METADATA set, but are not arrays! return info.has_key("MD_METADATA") and \ - info.get("ID_FS_TYPE") != "isw_raid_member" + (info.get("ID_FS_TYPE") not in ("isw_raid_member", "ddf_raid_member")) def udev_device_is_cciss(info): """ Return True if the device is a CCISS device. """ -- 1.7.3.4