From ed2884b74fe2decc9cd912c11dc6e88581646434 Mon Sep 17 00:00:00 2001 From: Daniel Berteaud Date: Tue, 3 Mar 2020 15:29:57 +0100 Subject: [PATCH] Better detection of smart capable drives --- lib/Zabbix/Agent/Addons/Disks.pm | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/Zabbix/Agent/Addons/Disks.pm b/lib/Zabbix/Agent/Addons/Disks.pm index 8387678..1eaf3d2 100644 --- a/lib/Zabbix/Agent/Addons/Disks.pm +++ b/lib/Zabbix/Agent/Addons/Disks.pm @@ -27,10 +27,22 @@ sub list_smart_hdd{ my ($param) = shift || {}; my @shd = (); if (-x "/usr/sbin/smartctl"){ - foreach my $block (list_block_dev()){ + BLOCK: foreach my $block (list_block_dev()){ # Skip block we already know won't support SMART next if ($block =~ m/^(ram|loop|md|dm\-)\d+/); - next unless (system("/usr/sbin/smartctl -A /dev/$block >/dev/null 2>&1") == 0); + my $smart_enabled = 0; + my @smart_info = qx(/usr/sbin/smartctl -i /dev/$block); + next unless ($? == 0); + foreach my $line (@smart_info){ + if ($line =~ m/^SMART support is:\s+Enabled/i){ + $smart_enabled = 1; + } elsif ($line =~ m/^Transport protocol:\s+iSCSI/i){ + # Skip iSCSI block + next BLOCK; + } + } + # Skip block unless S.M.A.R.T is advertized as enabled + next unless ($smart_enabled); if ($param->{skip_remouvable} && -e "/sys/block/$block/removable"){ open REMOVABLE, "/sys/block/$block/removable"; my $removable = join "", ;