]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Add SMART attributes for SSD and NVMe
authorbunder2015 <omfgbunder@gmail.com>
Wed, 21 Feb 2018 21:52:47 +0000 (16:52 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 21 Feb 2018 21:52:47 +0000 (13:52 -0800)
This adds the SMART attributes required to probe Samsung SSD and NVMe
(and possibly others) disks when using the "zpool status -c" command.

Reviewed-by: loli10K <ezomori.nozomu@gmail.com>
Reviewed-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: bunder2015 <omfgbunder@gmail.com>
Closes #7183
Closes #7193

cmd/zpool/Makefile.am
cmd/zpool/zpool.d/nvme_err [new symlink]
cmd/zpool/zpool.d/smart

index d7e1741c1d051af48693b1b189f617cf8a68645e..74d864888c9e7be34bb10470b6273a30e2be3edf 100644 (file)
@@ -59,6 +59,7 @@ dist_zpoolexec_SCRIPTS = \
        zpool.d/pend_sec \
        zpool.d/off_ucor \
        zpool.d/ata_err \
+       zpool.d/nvme_err \
        zpool.d/pwr_cyc \
        zpool.d/upath \
        zpool.d/vendor
@@ -97,6 +98,7 @@ zpoolconfdefaults = \
        pend_sec \
        off_ucor \
        ata_err \
+       nvme_err \
        pwr_cyc \
        upath \
        vendor
diff --git a/cmd/zpool/zpool.d/nvme_err b/cmd/zpool/zpool.d/nvme_err
new file mode 120000 (symlink)
index 0000000..94f2286
--- /dev/null
@@ -0,0 +1 @@
+smart
\ No newline at end of file
index 3721f30edd2496d2d9c0f0665c4a776c246a17a6..4bc3af39dd873259517f76d4b38f9d3fbe6688b6 100755 (executable)
@@ -23,6 +23,7 @@ off_ucor:     Show SMART offline uncorrectable errors (ATA).
 ata_err:       Show SMART ATA errors (ATA).
 pwr_cyc:       Show SMART power cycle count (ATA).
 serial:                Show disk serial number.
+nvme_err:      Show SMART NVMe errors (NVMe).
 "
 
 script=$(basename "$0")
@@ -37,7 +38,7 @@ smartctl_path=$(which smartctl)
 if [ -b "$VDEV_UPATH" ] && [ -x "$smartctl_path" ]; then
        raw_out=$(eval "sudo $smartctl_path -a $VDEV_UPATH")
 
-       # Are we a SAS or ATA drive?  Look for the right line in smartctl:
+       # What kind of drive are we?  Look for the right line in smartctl:
        #
        # SAS:
        #       Transport protocol:   SAS
@@ -45,7 +46,10 @@ if [ -b "$VDEV_UPATH" ] && [ -x "$smartctl_path" ]; then
        # SATA:
        #       ATA Version is:   8
        #
-       type=$(echo "$raw_out" | grep -m 1 -Eo '^ATA|SAS$')
+       # NVMe:
+       #       SMART/Health Information (NVMe Log 0xnn, NSID 0xnn)
+       #
+       type=$(echo "$raw_out" | grep -m 1 -Eo '^ATA|NVMe|SAS$')
        out=$(echo "$raw_out" | awk '
 # SAS specific
 /read:/{print "rrd="$4"\nr_cor="$5"\nr_proc="$7"\nr_ucor="$8}
@@ -71,10 +75,21 @@ if [ -b "$VDEV_UPATH" ] && [ -x "$smartctl_path" ]; then
 
 # SATA common
 /Temperature_Celsius/{print "temp="$10}
+/Airflow_Temperature_Cel/{print "temp="$10}
 /SMART overall-health self-assessment test result:/{print "health="$6}
 /Power_On_Hours/{print "hours_on="$10}
 /Serial Number:/{print "serial="$3}
 
+# NVMe common
+/Temperature:/{print "temp="$2}
+/SMART overall-health self-assessment test result:/{print "health="$6}
+/Power On Hours:/{gsub("[^0-9]","",$4); print "hours_on="$4}
+/Serial Number:/{print "serial="$3}
+/Power Cycles:/{print "pwr_cyc="$3}
+
+# NVMe specific
+/Media and Data Integrity Errors:/{print "nvme_err="$6}
+
 END {ORS="\n"; print ""}
 ');
 fi
@@ -94,6 +109,8 @@ smart)
                scripts="temp|health|r_ucor|w_ucor"
        elif [ "$type" = "ATA" ] ; then
                scripts="temp|health|ata_err|realloc|rep_ucor|cmd_to|pend_sec|off_ucor"
+       elif [ "$type" = "NVMe" ] ; then
+               scripts="temp|health|nvme_err"
        fi
        ;;
 smartx)
@@ -102,6 +119,8 @@ smartx)
                scripts="hours_on|defect|nonmed|r_proc|w_proc"
        elif [ "$type" = "ATA" ] ; then
                scripts="hours_on|pwr_cyc"
+       elif [ "$type" = "NVMe" ] ; then
+               scripts="hours_on|pwr_cyc"
        fi
        ;;
 *)