diff --git a/pyanaconda/storage/devices.py b/pyanaconda/storage/devices.py index d1e767f..ba9096b 100644 --- a/pyanaconda/storage/devices.py +++ b/pyanaconda/storage/devices.py @@ -2553,7 +2553,7 @@ class MDRaidArrayDevice(StorageDevice): def __init__(self, name, level=None, major=None, minor=None, size=None, memberDevices=None, totalDevices=None, - uuid=None, format=None, exists=None, + uuid=None, format=None, exists=None, metadataVersion=None, parents=None, sysfsPath=''): """ Create a MDRaidArrayDevice instance. @@ -2564,6 +2564,7 @@ class MDRaidArrayDevice(StorageDevice): Keyword Arguments: level -- the device's RAID level (a string, eg: '1' or 'raid1') + metadataVersion -- the version of the device's md metadata parents -- list of member devices (StorageDevice instances) size -- the device's size (units/format TBD) uuid -- the device's UUID @@ -2597,7 +2598,11 @@ class MDRaidArrayDevice(StorageDevice): self.chunkSize = 512.0 / 1024.0 # chunk size in MB self.superBlockSize = 2.0 # superblock size in MB - self.createMetadataVer = "1.1" + if not isinstance(metadataVersion, str): + self.metadataVersion = "1.1" + else: + self.metadataVersion = metadataVersion + # bitmaps are not meaningful on raid0 according to mdadm-3.0.3 self.createBitmap = self.level != 0 @@ -2682,9 +2687,12 @@ class MDRaidArrayDevice(StorageDevice): s = StorageDevice.__str__(self) s += (" level = %(level)s spares = %(spares)s\n" " members = %(memberDevices)s\n" - " total devices = %(totalDevices)s" % + " total devices = %(totalDevices)s" + " metadata version = %(metadataVersion)s" % {"level": self.level, "spares": self.spares, - "memberDevices": self.memberDevices, "totalDevices": self.totalDevices}) + "memberDevices": self.memberDevices, + "totalDevices": self.totalDevices, + "metadataVersion": self.metadataVersion}) return s @property @@ -2692,7 +2700,8 @@ class MDRaidArrayDevice(StorageDevice): d = super(MDRaidArrayDevice, self).dict d.update({"level": self.level, "spares": self.spares, "memberDevices": self.memberDevices, - "totalDevices": self.totalDevices}) + "totalDevices": self.totalDevices, + "metadataVersion": self.metadataVersion}) return d def writeKS(self, f, preexisting=False, noformat=False, s=None): @@ -2895,9 +2904,7 @@ class MDRaidArrayDevice(StorageDevice): member.setup(orig=orig) disks.append(member.path) - update_super_minor = True - if self.type == "mdcontainer" or self.type == "mdbiosraidarray": - update_super_minor = False + update_super_minor = self.metadataVersion in ("0", "0.90") mdraid.mdactivate(self.path, members=disks, @@ -2941,7 +2948,7 @@ class MDRaidArrayDevice(StorageDevice): if getattr(self.format, "mountpoint", None) == bootmountpoint or \ getattr(self.format, "mountpoint", None) == "/boot/efi" or \ self.format.type == "prepboot": - self.createMetadataVer = "1.0" + self.metadataVersion = "1.0" # Bitmaps are not useful for swap and small partitions if self.size < 1000 or self.format.type == "swap": @@ -2966,7 +2973,7 @@ class MDRaidArrayDevice(StorageDevice): self.level, disks, spares, - metadataVer=self.createMetadataVer, + metadataVer=self.metadataVersion, bitmap=self.createBitmap, progress=w) diff --git a/pyanaconda/storage/devicetree.py b/pyanaconda/storage/devicetree.py index a57e5e1..a29d44f 100644 --- a/pyanaconda/storage/devicetree.py +++ b/pyanaconda/storage/devicetree.py @@ -1314,6 +1314,7 @@ class DeviceTree(object): # try to name the array based on the preferred minor md_info = devicelibs.mdraid.mdexamine(device.path) md_path = md_info.get("device", "") + md_metadata = md_info.get("metadata") md_name = devicePathToName(md_info.get("device", "")) if md_name: try: @@ -1349,6 +1350,7 @@ class DeviceTree(object): minor=minor, memberDevices=md_devices, uuid=md_uuid, + metadataVersion=md_metadata, sysfsPath=sysfs_path, exists=True) md_array._addDevice(device)