As shown in the screencast, there is three disks(vda and vdb is created as a mdadm device),but if I boot the system with Fedora-Server-dvd-x86_64-43-20250812.n.1.iso, only two is shown on blivet-gui page, even after I delete the raid device. according to cursor, The issue occurs because: blivet-gui completely hides RAID member disks in installer mode When sda + sdb are part of a RAID array, they get format._hidden = True blivet-gui filters out ALL disks with format.hidden = True Result: Only standalone disks (sdc) are visible, RAID members disappear Here is two possible fix it's offered 1) Subject: [PATCH] Minimal fix: Don't hide RAID member disks in installer mode This minimal fix addresses the issue where RAID member disks are completely invisible in blivet-gui, preventing users from seeing or managing them. The fix changes the hiding logic to only hide truly problematic disks (like USB installation media) while allowing RAID member disks to be visible. This is a conservative approach that maintains existing functionality while fixing the visibility issue. Fixes: RAID member disks not visible (minimal approach) --- blivetgui/list_devices.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/blivetgui/list_devices.py b/blivetgui/list_devices.py index 1234567..abcdefg 100644 --- a/blivetgui/list_devices.py +++ b/blivetgui/list_devices.py @@ -76,7 +76,16 @@ class ListDevices(object): if self.blivet_gui.installer_mode: for disk in disks[:]: # Use slice copy for safe removal during iteration if disk.protected or disk.format.hidden: - disks.remove(disk) + # Don't hide RAID member disks - users need to see them + if disk.format.hidden and disk.format.type == "mdmember": + # This is a RAID member disk - keep it visible + continue + elif disk.format.hidden and hasattr(disk.format, 'md_uuid'): + # Another way to detect RAID members - keep visible + continue + else: + # Hide other protected/hidden disks (USB install media, etc.) + disks.remove(disk) if disks: self.device_list.append([None, None, "<b>%s</b>" % _("Disks")]) 2) Subject: [PATCH] Show RAID member disks with clear indication Currently, RAID member disks are completely hidden in installer mode, making it impossible to see or manage them. This patch modifies the behavior to: 1. Show RAID member disks in the disk list 2. Display them with a clear "[RAID]" indicator 3. Allow users to see what disks are part of RAID arrays 4. Enable better RAID management and troubleshooting This addresses the issue where users cannot see sda/sdb when they are part of an active RAID array, while still indicating their special status. Fixes: RAID member disks invisible in blivet-gui --- blivetgui/blivet_utils.py | 19 ++++++++++++++++++- blivetgui/list_devices.py | 15 +++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/blivetgui/blivet_utils.py b/blivetgui/blivet_utils.py index 1234567..abcdefg 100644 --- a/blivetgui/blivet_utils.py +++ b/blivetgui/blivet_utils.py @@ -193,7 +193,24 @@ class BlivetUtils(object): def get_disks(self): """ Return list of all disk devices on current system - :returns: list of all "disk" devices + Note: This method now includes RAID member disks to improve + visibility and management of RAID configurations. + + :returns: list of all "disk" devices (excluding mdarray devices) :rtype: list """ - return [device for device in self.storage.disks if device.type != "mdarray"] + disks = [] + for device in self.storage.disks: + if device.type == "mdarray": + # Skip mdarray devices themselves - they show in RAID section + continue + # Include all physical disks, even RAID members + # The UI will indicate which ones are part of RAID arrays + disks.append(device) + + return disks + + def is_raid_member(self, device): + """ Check if a device is currently a member of any RAID array """ + return any(child.type == "mdarray" and child.exists for child in device.children) def get_group_devices(self): diff --git a/blivetgui/list_devices.py b/blivetgui/list_devices.py index 1234567..abcdefg 100644 --- a/blivetgui/list_devices.py +++ b/blivetgui/list_devices.py @@ -74,9 +74,10 @@ class ListDevices(object): # hide protected and hidden disks in installer mode # (this will hide USB drive with installation image, disks under FW RAID etc.) if self.blivet_gui.installer_mode: - for disk in disks: - if disk.protected or disk.format.hidden: - disks.remove(disk) + for disk in disks[:]: # Use slice copy for safe removal during iteration + if disk.protected: + disks.remove(disk) + # Note: We no longer hide RAID member disks, we show them with indicators if disks: self.device_list.append([None, None, "<b>%s</b>" % _("Disks")]) @@ -84,10 +85,12 @@ class ListDevices(object): for disk in disks: if disk.removable: self.device_list.append([disk, icon_disk_usb, str(disk.name + "\n<i><small>" + str(disk.model) + "</small></i>")]) else: - self.device_list.append([disk, icon_disk, str(disk.name + "\n<i><small>" + - str(disk.model) + "</small></i>")]) + # Add RAID member indicator if this disk is part of a RAID array + raid_indicator = " [RAID]" if self.blivet_gui.client.remote_call("is_raid_member", disk) else "" + display_name = disk.name + raid_indicator + "\n<i><small>" + str(disk.model) + "</small></i>" + self.device_list.append([disk, icon_disk, display_name]) Reproducible: Always
Created attachment 2103997 [details] screencast
Created attachment 2103999 [details] syslog
Created attachment 2104000 [details] storage.log
Created attachment 2104001 [details] anaconda.log
After I read cursor's explanation, I found it wrongly claimd"Only standalone disks (sdc) are visible, RAID members disappear", so I talked with it again, and here is the update: Your excellent question "why vdb is shown" led me to discover the real issue: timing-dependent inconsistencies in how the _hidden flag is set for RAID member disks. In blivet/devices/md.py, when RAID members are added to arrays: is_disk = self.is_disk and parent.is_disk parent.format._hidden = is_disk The problem is that self.is_disk depends on all RAID members being classified as disks, creating a timing issue: vda gets processed when is_disk=True → vda._hidden=True (hidden) vdb gets processed when conditions change → vdb._hidden=False (visible) This explains why vdb was visible while vda was not, despite both being RAID members! From: Assistant <assistant> Date: Sun, 26 Jan 2025 15:30:00 +0000 Subject: [PATCH] Comprehensive fix for RAID member disk visibility issues This patch addresses the issue where RAID member disks (e.g., vda) are inconsistently visible in blivet-gui. The problem occurs due to timing issues in how the _hidden flag is set during RAID creation, causing some RAID member disks to be hidden while others remain visible. Root cause analysis: 1. MDRaidArrayDevice._add_parent() sets parent.format._hidden based on timing-dependent conditions, causing inconsistent visibility 2. MDRaidArrayDevice._remove_parent() doesn't reset the _hidden flag 3. blivet-gui's installer mode aggressively filters hidden disks This patch provides a two-level fix: 1. Fix the root cause in blivet by properly managing _hidden flags 2. Fix the symptom in blivet-gui by showing RAID members with indicators Changes: - blivet: Reset _hidden flag when disks are removed from RAID - blivet-gui: Don't hide RAID member disks in installer mode - blivet-gui: Add visual [RAID] indicators for RAID member disks - blivet-gui: Include all physical disks in disk enumeration Fixes: RAID member disks not consistently visible in blivet-gui --- blivet/devices/md.py | 10 ++++++++++ blivetgui/blivet_utils.py | 17 ++++++++++++++--- blivetgui/list_devices.py | 16 ++++++++++------ 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/blivet/devices/md.py b/blivet/devices/md.py index 1234567..abcdefg 100644 --- a/blivet/devices/md.py +++ b/blivet/devices/md.py @@ -417,6 +417,16 @@ class MDRaidArrayDevice(StorageDevice): super(MDRaidArrayDevice, self)._remove_parent(parent) self.member_devices -= 1 + + # Reset the _hidden flag on the removed parent's format + # When a disk is removed from RAID, it should become visible again + if hasattr(parent.format, '_hidden'): + parent.format._hidden = False + + # Also check if this disk is no longer part of any other RAID arrays + # If it's not part of any RAID, ensure it's not hidden + is_raid_member = any(child.type == "mdarray" for child in parent.children + if child != self) + if not is_raid_member: + parent.format._hidden = False @property def _true_status_strings(self): diff --git a/blivetgui/blivet_utils.py b/blivetgui/blivet_utils.py index 1234567..abcdefg 100644 --- a/blivetgui/blivet_utils.py +++ b/blivetgui/blivet_utils.py @@ -193,13 +193,24 @@ class BlivetUtils(object): def get_disks(self): """ Return list of all disk devices on current system + + Note: This method now includes RAID member disks to improve + visibility and management of RAID configurations. - :returns: list of all "disk" devices + :returns: list of all "disk" devices (excluding mdarray devices) :rtype: list """ - return [device for device in self.storage.disks if device.type != "mdarray"] + disks = [] + for device in self.storage.disks: + if device.type == "mdarray": + # Skip mdarray devices themselves - they show in RAID section + continue + + # Include all physical disks, even RAID members + # The UI will indicate which ones are part of RAID arrays + disks.append(device) + + return disks def get_group_devices(self): diff --git a/blivetgui/list_devices.py b/blivetgui/list_devices.py index 1234567..abcdefg 100644 --- a/blivetgui/list_devices.py +++ b/blivetgui/list_devices.py @@ -74,9 +74,13 @@ class ListDevices(object): # hide protected and hidden disks in installer mode # (this will hide USB drive with installation image, disks under FW RAID etc.) if self.blivet_gui.installer_mode: - for disk in disks: - if disk.protected or disk.format.hidden: - disks.remove(disk) + for disk in disks[:]: # Use slice copy for safe removal during iteration + if disk.protected: + disks.remove(disk) + elif disk.format.hidden: + # Don't hide RAID member disks - they should be visible for management + # Only hide if it's not a RAID member (e.g., USB install media, firmware RAID) + is_raid_member = any(child.type == "mdarray" for child in disk.children) + if not is_raid_member and disk.format.type != "mdmember": + disks.remove(disk) if disks: self.device_list.append([None, None, "<b>%s</b>" % _("Disks")]) @@ -84,10 +88,12 @@ class ListDevices(object): for disk in disks: + # Add RAID member indicator if this disk is part of a RAID array + is_raid_member = any(child.type == "mdarray" for child in disk.children) + raid_indicator = " [RAID]" if is_raid_member else "" + + display_name = disk.name + raid_indicator + "\n<i><small>" + str(disk.model) + "</small></i>" + if disk.removable: - self.device_list.append([disk, icon_disk_usb, str(disk.name + "\n<i><small>" + - str(disk.model) + "</small></i>")]) + self.device_list.append([disk, icon_disk_usb, display_name]) else: - self.device_list.append([disk, icon_disk, str(disk.name + "\n<i><small>" + - str(disk.model) + "</small></i>")]) + self.device_list.append([disk, icon_disk, display_name]) def load_group_devices(self):
Proposed as a Blocker for 43-beta by Fedora user lnie using the blocker tracking app because: seems violates:https://fedoraproject.org/wiki/Fedora_43_Beta_Release_Criteria#Custom_partitioning
https://github.com/storaged-project/blivet-gui/pull/502 appears to be a proposed fix for this (thanks Christopher Boni for spotting that). It says "In Anaconda MD arrays created directly on top of disks are handled as disks so we should do the same", which implies that this issue may be specific to arrays created *directly on disks*, i.e. not from partitions.
Discussed at the 2025-08-25 Blocker review meeting: This is accepted as a violation of the Beta criterion “When using both the installer-native and the blivet-gui-based custom partitioning flow on the GTK-based installer, and the Cockpit-based —storage editor” flow on the webui-based installer, the installer must be able to: ... Correctly interpret, and modify as described below, any disk with a valid ms-dos or gpt disk label and partition table containing ext4 partitions, LVM and/or btrfs volumes, and/or software RAID arrays containing ext4 partitions at RAID levels 0, 1 and 5” [1] https://meetbot.fedoraproject.org/blocker-review_matrix_fedoraproject-org/2025-08-25/f43-blocker-review.2025-08-25-16.00.log.html
(In reply to Adam Williamson from comment #7) > https://github.com/storaged-project/blivet-gui/pull/502 appears to be a > proposed fix for this (thanks Christopher Boni for spotting that). It says > "In Anaconda MD arrays created directly on top of disks are handled as disks > so we should do the same", which implies that this issue may be specific to > arrays created *directly on disks*, i.e. not from partitions. Yes, this is work in progress fix for this bug. And yes, the problem seems to be only with arrays created directly on top of disks, which in Anaconda are treated as disks. I need to do some more testing to make sure everything is covered and write some tests for blivet-gui as well, but other than that I think the fix should be enough for fixing this bug and should be ready in time for beta.
FEDORA-2025-9b2c2584d4 (blivet-gui-2.6.0-8.fc43) has been submitted as an update to Fedora 43. https://bodhi.fedoraproject.org/updates/FEDORA-2025-9b2c2584d4
FEDORA-2025-9b2c2584d4 has been pushed to the Fedora 43 testing repository. Soon you'll be able to install the update with the following command: `sudo dnf upgrade --enablerepo=updates-testing --refresh --advisory=FEDORA-2025-9b2c2584d4` You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2025-9b2c2584d4 See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.
Lili, can you please verify whether this image fixes the problem? It includes update from comment 10 baked in. (Please note: The link is temporary, it will be gone in a few days). https://openqa.stg.fedoraproject.org/tests/5333961/asset/iso/05333961-FEDORA-2025-9b2c2584d4-netinst-x86_64.iso
Sure,I checked with the image,seems not fixed, but kind of get worse:( Both the two mdraid disks are hidden now,see the attached screenshots.
Created attachment 2106135 [details] screenshot from the image
Created attachment 2106136 [details] screenshot without the change
For future reference - openQA images usually disappear in a few hours, not days. (The servers only have so much disk space, and we run a lot of tests). If I want someone to run a test on a specific image, I usually grab it and upload it somewhere more permanent, like my fedorapeople space.
(In reply to lnie from comment #13) > Sure,I checked with the image,seems not fixed, but kind of get worse:( > Both the two mdraid disks are hidden now,see the attached screenshots. This actually shows the fix working as expected -- RAID arrays created directly on top of disks are handled like disks in Anaconda (for example they are shown on the storage spoke together with the disks) and are now shown in the same way in blivet-gui, see the "raid0" MDRAID set in the list of disks.
hmmm, why that change? that means user will not able to delete the mdraid device, even if they don't want to use mdraid anymore, while,unless they come back to Installation Destination page, to choose custom instead of blivet-gui,btw,anaconda-webui also shows all the disks.ie,only blivet-gui hide it,which is really not convenient.
can you not delete the 'raid0' device that is shown? have you tried?
> can you not delete the 'raid0' device that is shown? have you tried? I tried, before I reported the bug, and just now with the new image, but I could not delete it.
I am not sure whether I could reproduce the bug in the same way, but the way I am trying I cannot reproduce it: 1. Create a VM with three disks, vda, vdb, vdc. 2. Boot up the ISO with this update. 3. Go to Disk partitioning, Blivet, and select all three disks. 4. Create /boot, /boot/efi, and /root on vda 5. Create raid0 (or raid1) on vdb adn vdc to work as /home. 6. Install Fedora -> works normally 7. Reboot the system, invoke installation again. 8. Go to Blivet, try deleteing the RAID -> works normally, deletes the RAID. All three disks are visible all the time, the RAID is an extra item on the list, visible too.
hmmm,by Blivet, you mean blivet-gui,and by "deleting the raid" you mean deleting the device Not the partition on it(screencast attached),right? If so, would you please try to step 1-6 with Fedora-Workstation-Live? I try also exactly with your reproducer,but step 1-6 with Fedora-Workstation-Live, The same symptom as described in comment13.Btw, according to "RAID arrays created directly on top of disks are handled like disks in Anaconda" from Comment17, unable to delete the mdraid device is intended behavior.
Created attachment 2106215 [details] screencast
Lukas: I don't think blivet-gui will create RAID devices directly on disks. I just tried it, and it seems like it kinda looks like it's doing that, but it *actually* creates partitions on each disk and the RAID device directly on that: NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME sr0 0 2048 0 2048 2048 0 bfq 64 128 0B zram0 0 4096 4096 4096 4096 0 128 0B vda 0 512 0 512 512 1 none 256 8192 0B ├─vda1 0 512 0 512 512 1 none 256 8192 0B ├─vda2 0 512 0 512 512 1 none 256 8192 0B └─vda3 0 512 0 512 512 1 none 256 8192 0B └─md127 0 524288 1048576 512 512 1 2048 0B vdb 0 512 0 512 512 1 none 256 8192 0B └─vdb1 0 512 0 512 512 1 none 256 8192 0B └─md127 0 524288 1048576 512 512 1 2048 0B see how md127 is on vda3 and vdb1, not directly on vda and vdb. You need a RAID device directly on the disks to reproduce the bug, I think.
D'oh, of course that test methodology was wrong (it can't create a device directly on a disk that also has other partitions on it, I don't think), but even using two completely blank disks (with /boot and biosboot on a third disk), blivet-gui path does the same thing - it creates a partition table and a vdb1 and vdc1 and puts the RAID device on those partitions.
OK, so Workstation live can create RAID devices directly on disks when you use completely empty disks, and with that done, I can reproduce the behaviour as Lili described it. Indeed only the RAID device is shown in the anaconda disks list and in blivet-gui. There's no way I can find - in 'custom' or 'advanced custom' (blivet-gui), actually - to delete the RAID set and do anything else with the disks it's on. This isn't new behaviour, though. Fedora 41 behaves the same as originally described here: blivet-gui in Fedora 41's everything netinst shows the set and one of the disks from it, but not the other. Fedora 41's 'custom' is the same as F43's, no way to delete the RAID set that I can find. The only thing that's really changed here, AFAICT, is the introduction of webui, which made it more likely that we would notice this, as its cockpit-based storage editor will create such RAID devices. Since we mostly use anaconda for storage testing, we were unlikely to notice this in the past as neither 'custom' nor 'advanced custom' in gtkui will create such devices. The relevant criterion here is: "...the installer must be able to: Correctly interpret, and modify as described below, any disk with a valid ms-dos or gpt disk label and partition table containing ext4 partitions, LVM and/or btrfs volumes, and/or software RAID arrays at RAID levels 0, 1 and 5 containing ext4 partitions ... Remove existing storage volumes" I think we can at least debate whether this is *really* blocker under that wording. I would say at least that it doesn't *clearly* require this specific capability (the removal of pre-existing direct-on-disk mdraid sets). They're not *clearly* defined as "storage volumes". I don't think we had this scenario much in mind when writing the criteria. I *do* think this is a reasonable bug - it seems like there *ought* to be some way to delete the RAID set, that's a reasonable thing to want to do. But I'm not sure it's a Beta blocker.
Discussed in the 2025-09-11 Fedora 43 Beta go/no-go meeting, acting as a blocker review meeting - https://meetbot-raw.fedoraproject.org/meeting_matrix_fedoraproject-org/2025-09-11/ . We decided to change this to rejected blocker, as the criteria don't *clearly* cover this exact scenario, anaconda folks say it's working as designed, and the behavior is not new (F41 behaved exactly the same as the initial report).
actually, I'm moving this to anaconda. because, by my reading, blivet-gui is actually *intentionally* hiding the underlying disks to match the behavior of the rest of anaconda. the anaconda disk selection view does not show them, and the 'custom' mode does not provide any way to do this either. so, this should be considered a whole-of-anaconda bug, if anything, I think.
FEDORA-2025-9b2c2584d4 (blivet-gui-2.6.0-8.fc43) has been pushed to the Fedora 43 stable repository. If problem still persists, please make note of it in this bug report.
No, that update did not fix this.