Fail drives for old age but allow further testing
* Addresses issue #103
This commit is contained in:
parent
0077240255
commit
8c6fcfe99c
2 changed files with 17 additions and 2 deletions
|
|
@ -166,6 +166,18 @@ class DiskObj():
|
||||||
# self.dd_skip_extra == 0 is fine
|
# self.dd_skip_extra == 0 is fine
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def is_aging(self):
|
||||||
|
"""Check if power-on hours is above the threshold, returns bool."""
|
||||||
|
if self.nvme_attributes:
|
||||||
|
poh = self.nvme_attributes.get('power_on_hours', {}).get('raw', -1)
|
||||||
|
elif self.smart_attributes:
|
||||||
|
poh = self.smart_attributes.get(9, {}).get('raw', -1)
|
||||||
|
|
||||||
|
error_thresh = ATTRIBUTES['SMART'][9]['Error']
|
||||||
|
max_thresh = ATTRIBUTES['SMART'][9]['Maximum']
|
||||||
|
|
||||||
|
return error_thresh <= poh < max_thresh
|
||||||
|
|
||||||
def check_attributes(self):
|
def check_attributes(self):
|
||||||
"""Check NVMe / SMART attributes for errors, returns bool."""
|
"""Check NVMe / SMART attributes for errors, returns bool."""
|
||||||
attr_type = self.attr_type
|
attr_type = self.attr_type
|
||||||
|
|
@ -1745,6 +1757,9 @@ def run_nvme_smart_tests(state, test, update_mode=False):
|
||||||
if test.failed and not update_mode:
|
if test.failed and not update_mode:
|
||||||
for t in ['badblocks', 'I/O Benchmark']:
|
for t in ['badblocks', 'I/O Benchmark']:
|
||||||
dev.disable_test(t, 'Denied')
|
dev.disable_test(t, 'Denied')
|
||||||
|
if dev.is_aging() and not update_mode:
|
||||||
|
test.failed = True
|
||||||
|
test.update_status('FAIL')
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
update_progress_pane(state)
|
update_progress_pane(state)
|
||||||
|
|
|
||||||
|
|
@ -76,12 +76,12 @@ ATTRIBUTES = {
|
||||||
'NVMe': {
|
'NVMe': {
|
||||||
'critical_warning': {'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
'critical_warning': {'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
||||||
'media_errors': {'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
'media_errors': {'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
||||||
'power_on_hours': {'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': None, },
|
'power_on_hours': {'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': 122724,},
|
||||||
'unsafe_shutdowns': {'Critical': False, 'Ignore': True, 'Warning': 1, 'Error': None, 'Maximum': None, },
|
'unsafe_shutdowns': {'Critical': False, 'Ignore': True, 'Warning': 1, 'Error': None, 'Maximum': None, },
|
||||||
},
|
},
|
||||||
'SMART': {
|
'SMART': {
|
||||||
5: {'Hex': '05', 'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
5: {'Hex': '05', 'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, },
|
||||||
9: {'Hex': '09', 'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': None, },
|
9: {'Hex': '09', 'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': 122724,},
|
||||||
10: {'Hex': '10', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
|
10: {'Hex': '10', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
|
||||||
184: {'Hex': 'B8', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
|
184: {'Hex': 'B8', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
|
||||||
187: {'Hex': 'BB', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
|
187: {'Hex': 'BB', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, },
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue