diff options
Diffstat (limited to 'misc/diskhealth')
-rwxr-xr-x | misc/diskhealth | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/misc/diskhealth b/misc/diskhealth new file mode 100755 index 0000000..5cce07b --- /dev/null +++ b/misc/diskhealth @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 + +import subprocess +import json +from pprint import pprint + +smart_result = subprocess.run(["sudo", "smartctl", "-Aij", "/dev/sda"], capture_output=True, text=True) + +smart_result = json.loads(smart_result.stdout) + +sector_size = smart_result["logical_block_size"] + +from typing import NamedTuple +class RawValue(NamedTuple): + value: int + string: str + +class Flags(NamedTuple): + value: int + string: str + prefailure: bool + updated_online: bool + performance: bool + error_rate: bool + event_count: bool + auto_keep: bool + +class SmartAttribute(NamedTuple): + id: int + name: str + value: int + worst: int + thresh: int + when_failed: str + flags: dict + raw: dict + +attributes = {} + +for attr in smart_result["ata_smart_attributes"]["table"]: + attr_l = SmartAttribute(**attr) + attributes[attr_l.id] = attr_l + +if 241 in attributes: + lbas_written = attributes[241].raw["value"] + print((lbas_written * sector_size) / 10**12) |