Upload files to "/"
This commit is contained in:
71
check_md_raid_python
Normal file
71
check_md_raid_python
Normal file
@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import re
|
||||
import sys
|
||||
import os
|
||||
|
||||
MDSTAT_PATH = "/proc/mdstat"
|
||||
|
||||
def parse_mdstat():
|
||||
if not os.path.exists(MDSTAT_PATH):
|
||||
return [], "CRITICAL - /proc/mdstat not found", 2
|
||||
|
||||
arrays = {}
|
||||
current_array = None
|
||||
|
||||
try:
|
||||
with open(MDSTAT_PATH, "r") as f:
|
||||
for line in f:
|
||||
# RAID device line (e.g., "md127 : active raid1 sda1[0] sdb1[1]")
|
||||
match = re.match(r'^(md\d+)\s*:\s*(.*)', line)
|
||||
if match:
|
||||
current_array = match.group(1)
|
||||
arrays[current_array] = {'status': match.group(2), 'lines': [line.strip()]}
|
||||
elif current_array:
|
||||
arrays[current_array]['lines'].append(line.strip())
|
||||
except Exception as e:
|
||||
return [], f"CRITICAL - Error reading /proc/mdstat: {e}", 2
|
||||
|
||||
return arrays, None, None
|
||||
|
||||
def analyze_arrays(arrays):
|
||||
total = len(arrays)
|
||||
degraded = []
|
||||
recovering = []
|
||||
resyncing = []
|
||||
|
||||
for md, data in arrays.items():
|
||||
combined = " ".join(data['lines'])
|
||||
if re.search(r'\[.*_.*\]', combined):
|
||||
degraded.append(md)
|
||||
elif "recovery" in combined:
|
||||
recovering.append(md)
|
||||
elif "resync" in combined:
|
||||
resyncing.append(md)
|
||||
|
||||
return total, degraded, recovering, resyncing
|
||||
|
||||
def main():
|
||||
arrays, error_msg, exit_code = parse_mdstat()
|
||||
|
||||
if error_msg:
|
||||
print(error_msg)
|
||||
sys.exit(exit_code)
|
||||
|
||||
total, degraded, recovering, resyncing = analyze_arrays(arrays)
|
||||
|
||||
if recovering:
|
||||
print(f"WARNING - Checked {total} arrays, recovering: {', '.join(recovering)}")
|
||||
sys.exit(1)
|
||||
elif resyncing:
|
||||
print(f"WARNING - Checked {total} arrays, resync: {', '.join(resyncing)}")
|
||||
sys.exit(1)
|
||||
elif not degraded:
|
||||
print(f"OK - Checked {total} arrays. All arrays healthy.")
|
||||
sys.exit(0)
|
||||
else:
|
||||
print(f"CRITICAL - Checked {total} arrays, degraded: {', '.join(degraded)}")
|
||||
sys.exit(2)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Reference in New Issue
Block a user