Detect md arrays via /proc/mdstat for RAID status

This commit is contained in:
2026-02-25 01:39:11 +03:00
parent 2ad423fb6a
commit ee361abb99

View File

@@ -1,5 +1,6 @@
import subprocess import subprocess
import os import os
import re
def _cmd(cmd: str) -> str: def _cmd(cmd: str) -> str:
@@ -83,16 +84,25 @@ def list_disks() -> list[str]:
def list_md_arrays() -> list[str]: def list_md_arrays() -> list[str]:
out = _cmd("lsblk -dn -o NAME,TYPE") # Prefer /proc/mdstat: it reliably lists active md arrays
arrays = [] # even when lsblk tree/filters differ across distros.
out = _cmd("cat /proc/mdstat")
arrays: set[str] = set()
for line in out.splitlines(): for line in out.splitlines():
parts = line.split() m = re.match(r"^\s*(md\d+)\s*:", line)
if len(parts) != 2: if m:
continue arrays.add(f"/dev/{m.group(1)}")
name, typ = parts
if typ.startswith("raid") and name.startswith("md"): if arrays:
arrays.append(f"/dev/{name}") return sorted(arrays)
return 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: def md_array_status(dev: str) -> str: