From ee361abb9960af8f798aa3b2b8e17c10c84ccae3 Mon Sep 17 00:00:00 2001 From: benya Date: Wed, 25 Feb 2026 01:39:11 +0300 Subject: [PATCH] Detect md arrays via /proc/mdstat for RAID status --- system_checks.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/system_checks.py b/system_checks.py index 815d29c..bb45570 100644 --- a/system_checks.py +++ b/system_checks.py @@ -1,5 +1,6 @@ import subprocess import os +import re def _cmd(cmd: str) -> str: @@ -83,16 +84,25 @@ def list_disks() -> list[str]: def list_md_arrays() -> list[str]: - out = _cmd("lsblk -dn -o NAME,TYPE") - arrays = [] + # Prefer /proc/mdstat: it reliably lists active md arrays + # even when lsblk tree/filters differ across distros. + out = _cmd("cat /proc/mdstat") + arrays: set[str] = set() for line in out.splitlines(): - parts = line.split() - if len(parts) != 2: - continue - name, typ = parts - if typ.startswith("raid") and name.startswith("md"): - arrays.append(f"/dev/{name}") - return arrays + m = re.match(r"^\s*(md\d+)\s*:", line) + if m: + arrays.add(f"/dev/{m.group(1)}") + + if arrays: + return sorted(arrays) + + # Fallback for environments where mdstat parsing is unavailable. + out = _cmd("ls -1 /dev/md* 2>/dev/null") + for line in out.splitlines(): + dev = line.strip() + if dev and re.match(r"^/dev/md\d+$", dev): + arrays.add(dev) + return sorted(arrays) def md_array_status(dev: str) -> str: