[pve-devel] [PATCH v3 storage 3/4] disks: parse smart attributes using RE
Fabian Grünbichler
f.gruenbichler at proxmox.com
Wed Sep 28 13:42:24 CEST 2016
---
PVE/Diskmanage.pm | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm
index edc0ea8..bcd3883 100644
--- a/PVE/Diskmanage.pm
+++ b/PVE/Diskmanage.pm
@@ -81,19 +81,20 @@ sub get_smart_data {
$returncode = run_command([$SMARTCTL, '-H', '-A', '-f', 'brief', $disk], noerr => 1, outfunc => sub{
my ($line) = @_;
- if ($datastarted && $line =~ m/^[ \d]{2}\d/) {
- $line = trim($line);
- my @data = split /\s+/, $line;
+# ATA SMART attributes, e.g.:
+# ID# ATTRIBUTE_NAME FLAGS VALUE WORST THRESH FAIL RAW_VALUE
+# 1 Raw_Read_Error_Rate POSR-K 100 100 000 - 0
+ if ($datastarted && $line =~ m/^([ \d]{2}\d)\s+(\S+)\s+(\S{6})\s+(\d+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(.*)$/) {
my $entry = {};
- $entry->{name} = $data[1];
- $entry->{flags} = $data[2];
+ $entry->{name} = $2 if defined $2;
+ $entry->{flags} = $3 if defined $3;
# the +0 makes a number out of the strings
- $entry->{value} = $data[3] + 0;
- $entry->{worst} = $data[4] + 0;
- $entry->{threshold} = $data[5] + 0;
- $entry->{fail} = $data[6];
- $entry->{raw} = $data[7];
- $entry->{id} = $data[0];
+ $entry->{value} = $4+0 if defined $4;
+ $entry->{worst} = $5+0 if defined $5;
+ $entry->{threshold} = $6+0 if defined $6;
+ $entry->{fail} = $7 if defined $7;
+ $entry->{raw} = $8 if defined $8;
+ $entry->{id} = $1 if defined $1;
push @{$smartdata->{attributes}}, $entry;
} elsif ($line =~ m/self\-assessment test result: (.*)$/) {
$smartdata->{health} = $1;
--
2.1.4
More information about the pve-devel
mailing list