summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2009-07-09 09:09:26 +0200
committerHans de Goede <hdegoede@redhat.com>2009-07-09 09:09:26 +0200
commit612ec7a3417680fed659e8e7bc216b2870bd1488 (patch)
tree185de2ae494dce0d124294cab994010a79fe8607
parent5f083354638243926be4c1f87da190390fe6c807 (diff)
downloadanaconda-612ec7a3417680fed659e8e7bc216b2870bd1488.tar.gz
anaconda-612ec7a3417680fed659e8e7bc216b2870bd1488.tar.xz
anaconda-612ec7a3417680fed659e8e7bc216b2870bd1488.zip
Add support for biosraid using mdadm
-rw-r--r--storage/devices.py9
-rw-r--r--storage/devicetree.py14
-rw-r--r--storage/udev.py9
3 files changed, 20 insertions, 12 deletions
diff --git a/storage/devices.py b/storage/devices.py
index 82ebef732..b46479bbe 100644
--- a/storage/devices.py
+++ b/storage/devices.py
@@ -2220,10 +2220,13 @@ class MDRaidArrayDevice(StorageDevice):
StorageDevice.__init__(self, name, format=format, exists=exists,
minor=minor, size=size,
parents=parents, sysfsPath=sysfsPath)
- if level is not None:
+
+ self.level = level
+ if level == "container":
+ self._type = "mdcontainer"
+ elif level is not None:
self.level = mdraid.raidLevel(level)
- else:
- self.level = level
+
self.uuid = uuid
self._totalDevices = numeric_type(totalDevices)
self._memberDevices = numeric_type(memberDevices)
diff --git a/storage/devicetree.py b/storage/devicetree.py
index e3826ef99..b856c6c19 100644
--- a/storage/devicetree.py
+++ b/storage/devicetree.py
@@ -888,8 +888,10 @@ class DeviceTree(object):
return True
# Ignore partitions found on the raw disks which are part of a
- # dmraidset
- for set in self.getDevicesByType("dm-raid array"):
+ # biosraidset
+ sets = self.getDevicesByType("dm-raid array")
+ sets.extend(self.getDevicesByType("mdcontainer"))
+ for set in sets:
for disk in set.parents:
if disk.name == os.path.basename(os.path.dirname(sysfs_path)):
return True
@@ -1189,13 +1191,13 @@ class DeviceTree(object):
log.debug("%s is a cdrom" % name)
if device is None:
device = self.addUdevOpticalDevice(info)
- elif udev_device_is_dmraid(info):
+ elif udev_device_is_biosraid(info):
# This is special handling to avoid the "unrecognized disklabel"
- # code since dmraid member disks won't have a disklabel. We
+ # code since biosraid member disks won't have a disklabel. We
# use a StorageDevice because DiskDevices need disklabels.
# Quite lame, but it doesn't matter much since we won't use
# the StorageDevice instances for anything.
- log.debug("%s is part of a dmraid" % name)
+ log.debug("%s is part of a biosraid" % name)
if device is None:
device = StorageDevice(name,
major=udev_device_get_major(info),
@@ -1498,7 +1500,7 @@ class DeviceTree(object):
if format_type == "crypto_LUKS":
# luks/dmcrypt
kwargs["name"] = "luks-%s" % uuid
- elif format_type == "linux_raid_member":
+ elif format_type in formats.mdraid.MDRaidMember._udevTypes:
# mdraid
try:
kwargs["mdUuid"] = udev_device_get_md_uuid(info)
diff --git a/storage/udev.py b/storage/udev.py
index 7571baf9f..e97d5d528 100644
--- a/storage/udev.py
+++ b/storage/udev.py
@@ -318,16 +318,19 @@ def udev_device_get_lv_sizes(info):
return [float(s) / 1024 for s in sizes]
-def udev_device_is_dmraid(info):
+def udev_device_is_biosraid(info):
# Note that this function does *not* identify raid sets.
# Tests to see if device is parto of a dmraid set.
- # dmraid and mdriad have the same ID_FS_USAGE string, ID_FS_TYPE has a
+ # dmraid and mdraid have the same ID_FS_USAGE string, ID_FS_TYPE has a
# string that describes the type of dmraid (isw_raid_member...), I don't
# want to maintain a list and mdraid's ID_FS_TYPE='linux_raid_member', so
# dmraid will be everything that is raid and not linux_raid_member
from formats.dmraid import DMRaidMember
+ from formats.mdraid import MDRaidMember
if info.has_key("ID_FS_TYPE") and \
- info["ID_FS_TYPE"] in DMRaidMember._udevTypes:
+ (info["ID_FS_TYPE"] in DMRaidMember._udevTypes or \
+ info["ID_FS_TYPE"] in MDRaidMember._udevTypes) and \
+ info["ID_FS_TYPE"] != "linux_raid_member":
return True
return False