Disks: S.M.A.R.T.

Zur Beurteilung des Zustandes einer Festplatte dient SMART (Self-Monitoring, Analysis and Reporting Technology). Mit der Werkzeugsammlung smartmontools kann knapp die Hälfte der Festplattenausfälle vorausgesagt werden. Die folgenden Kommandos müssen mit root-Rechten ausgeführt werden.

yum -y install smartmontools

smartctl-Datenbank aktualisieren:

update-smart-drivedb

Es existieren folgende Self-Tests:

  • kurz und schmerzlos („short“). Dauert wenige Minuten.

  • Check auf Transportschäden („conveyance“).

  • Oberflächen-Test („long“, „extended self test“). Auf einer unbeschäftigten Seagate IronWolf mit 14TB Grösse dauert ein Extended Self-Test 18h.

Die Checks lassen sich wie folgt durchführen:

smartctl --test=short /dev/sda
smartctl --test=conveyance /dev/sda
smartctl --test=long /dev/sda

Nicht jeder Self-Test-Typ wird von jeder Disk unterstützt. Ob eine Disk zum Beispiel „Conveyance“-Tests unterstützt, sieht man so:

smartctl --xall /dev/sdb | grep -E '(Self-test|remaining)'

Alle Self-Tests sind „Drive Built-In“ und „Safe to user data“. Die Tests kann man daher auf Platten im laufenden Produktiv-Betrieb durchführen - die Tests brauchen dann einfach länger. Während der Test-Phase kann lediglich nicht auf die SMART-Daten zugegriffen werden.

Wer smartctl in einem Bash-Script in einem Cronjob aufrufen möchte, sollte den vollen Pfad (/usr/sbin/smartctl) angeben, da es sonst möglicherweise nicht gefunden wird.

Tipp

Ein schönes Tool unter GNOME ist GSmartControl. Damit lässt sich auch ein auf der entfernten Maschine per smartctl --xall /dev/sda erzeugter Output offline und sehr anschaulich untersuchen (im Tool im Menü „Device > Load smartctl Output as Virtual Device“ nutzbar).

Anwendung

Ist SMART für die Festplatte aktiv?

smartctl --info /dev/sda | grep -i 'SMART support is'

SMART für eine Festplatte (z.B. eine SSD) explizit einschalten:

smartctl --smart=on /dev/sda

Alle Infos über eine Festplatte auslesen:

smartctl --xall /dev/sda

Auf den Gesundheitszustand prüfen:

smartctl --health /dev/sde

Das Ergebnis bei einer Disk, die bereits ein auffälliges Verhalten zeigt:

smartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-957.10.1.el7.x86_64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: FAILED!
Drive failure expected in less than 24 hours. SAVE ALL DATA.
Failed Attributes:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
200 Multi_Zone_Error_Rate   0x0023   001   001   001    Pre-fail  Always   FAILING_NOW 0

Das Ergebnis bei einer gesunden Disk:

smartctl --health  /dev/sdd

smartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-957.10.1.el7.x86_64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

Nur Fehler reporten:

smartctl --health --quietmode=errorsonly

Ergebnis eines Tests ausgeben:

smartctl --log selftest /dev/sda

SMART-Errorlogs auslesen:

smartctl --log error /dev/sda

Festplatten-Seriennummern und ihre Device-Adresse ermitteln:

for hd in /dev/sd*; do
    echo -n "Device: $hd, "
    smartctl --xall $hd | grep -i serial
done

Gesundheitstest - prüfen, ob das Gerät bereits ausgefallen ist oder von sich denkt, in den nächsten 24h auszufallen:

smartctl --health --quietmode=errorsonly /dev/sda

Ist eine Disk im Sleep/Standby-Modus? Dieses Kommando weckt die Disk dabei nicht auf:

smartctl --info --nocheck=standby /dev/sda

Die Disk Operation-Modes bei HDDs bedeuten:

  • OFF: Disk-Scheiben rotieren nicht

  • SLEEP: Disk-Scheiben rotieren nicht; Lowest Power Mode

  • STANDBY: Disk-Scheiben rotieren nicht; Low Power Mode

  • IDLE, IDLE_A: normaler Operation-Mode

  • ACTIVE: normaler Operation-Mode

Disks an einem HP SmartArray Controller prüfen:

smartctl --xall --device cciss,0 /dev/sda
smartctl --xall --device cciss,1 /dev/sda

Disks hinter einem Adaptec-RAID-Controller prüfen:

smartctl --xall --device aacraid,0,0,1 /dev/sda

Ausgabe

Wie ist die Ausgabe zu interpretieren?

ID  ATTRIBUTE_NAME      FLAG   VALUE WORST THRESH TYPE     UPDATED WHEN_FAILED RAW_VALUE
1   Raw_Read_Error_Rate 0x000f 078   064   044    Pre-fail Always  -           69143536
12  Power_Cycle_Count   0x0032 100   100   020    Old_age  Always  -           30
VALUE

Normalisierter Wert, meist von 100 bis 0, teilweise von 255 bis 0. Normalerweise gilt: je höher der Wert, desto besser - ein Wert von 100 oder 255 bedeutet „zu 100% gut“. Temperaturen sind möglicherweise nicht normalisiert.

WORST

Bisher schlechtester, normalisierter Wert zur Lebenszeit der Festplatte.

THRESH (threshold)
  • „Pre-fail“: zeigt einen bevorstehenden Disk-Ausfall an, wenn VALUE kleiner oder gleich THRESH ist. Bei einem Wert, der gegen THRESH geht, Disk tauschen - ein Ausfall steht unmittelbar bevor.

  • „Old_age“: zeigt das End-of-Life (EOL) der Disk an, wegen Alter und/oder Abnutzung, wenn VALUE kleiner oder gleich THRESH ist. VALUEs vom Typ „Old_age“ sinken während der Lebensdauer der Disk kontinuierlich. Bei einem Wert, der gegen THRESH geht, also ebenfalls Disk tauschen.

RAW_VALUE

Herstellerabhängiger, meist nicht intuitiv interpretierbarer Wert. Teils auch nicht über Modell-Generationen hinweg konsistent, teilweise ist dessen Bedeutung auch nicht dokumentiert. Einzig Temperaturen lassen sich meist sicher herauslesen, eigentlich immer in °C.

Im Beispiel eine Disk, die in ID 5 („Reallocated Sector Count“) ihr nahes Ende ankündigt. Nahes Ende deshalb, da es sich hier um ein „Pre-failure“-Attribut handelt:

ID

Name

Failed

Norm-ed value

Worst

Threshold

Raw value

Type

1

Raw Read Error Rate

never

95

93

6

206’969’285

pre-failure

3

Spin-Up Time

never

100

100

0

0

pre-failure

4

Start / Stop Count

never

100

100

20

28

old age

5

Reallocated Sector Count

now

4

4

36

3’956

pre-failure

7

Seek Error Rate

never

74

60

30

27’571’332

pre-failure

9

Power-On Time

never

80

80

0

18’319

old age

10

Spin-Up Retry Count

never

100

100

97

0

pre-failure

12

Power Cycle Count

never

100

100

20

27

old age

183

Runtime Bad Blocks

never

96

96

0

4

old age

184

End to End Error

never

100

100

99

0

old age

187

Reported Uncorrectable

never

100

100

0

0

old age

188

Command Timeout

never

100

99

0

8’590’065’667

old age

189

High Fly Writes

never

100

100

0

0

old age

190

Airflow Temperature

never

78

58

45

22 (Min/Max 22/22)

old age

194

Temperature (Celsius)

never

22

42

0

22 (0 20 0 0 0)

old age

195

Hardware ECC Recovered

never

23

17

0

206’969’285

old age

197

Current Pending Sector Count

never

100

100

0

0

old age

198

Offline Uncorrectable

never

100

100

0

0

old age

199

UDMA CRC Error Count

never

200

200

0

4

old age

240

Head Flying Hours

never

100

253

0

18386 (132 95 0)

old age

241

Total LBAs Written

never

100

253

0

3’973’655’019

old age

242

Total LBAs Read

never

100

253

0

3’238’867’291

old age

Attribute

Ausgewählte SMART-Attribute und deren Bedeutung:

#1 Raw_Read_Error_Rate

Verursacht durch Kopf-/Oberflächenprobleme.

#3 Spin_Up_Time (Typ: Pre-fail)

Gibt Hinweise auf Motor-/Lagerschaden. Diesen Wert gibt es nicht bei SSDs.

#5 Reallocated_Sector_Ct (Typ: Pre-fail)

Verursacht durch Kopf-/Oberflächenprobleme. Anzahl der fehlerhaften Sektoren, die durch die Festplattenelektronik gegen Reservesektoren ausgetauscht wurden.

#7 Seek_Error_Rate

Probleme mit der Kopfmechanik. Diesen Wert gibt es nicht bei SSDs.

#11 Calibration_Retry_Count

Probleme mit der Kopfmechanik. Diesen Wert gibt es nicht bei SSDs.

#13 Soft_Read_Error_Rate

Verursacht durch Kopf-/Oberflächenprobleme.

#197 Current_Pending_Sector (Typ: Old_age)

Unlesbare Sektoren, deren Inhalt die Festplatte nicht mehr korrigieren kann. Mögliche Ursache sind beispielsweise Stromausfälle während des Schreibvorgangs. Solche Sektoren können wieder überschrieben werden, wodurch die Anzahl der Pending Sectors wieder sinkt. Diesen Wert gibt es nicht bei SSDs.

#201 Soft_Read_Error_Rate

Verursacht durch Kopf-/Oberflächenprobleme.

smartd

Die smartmontools liefern auch einen smartd-Daemon, den man auf Wunsch aktivieren kann, und der die Disks regelmässig nach ihren SMART-Werten befragt.

Nicht alle Disks reporten allerdings so, dass die smartmontools damit klarkommen. Entweder fehlen die Disks in der smartmontools-Datenbank, oder die Werte sind schlicht unbrauchbar. Die Attribute, die ignoriert werden sollen, setzt man vor dem ersten Schlüsselwort DEVICESCAN ein. Alle Angaben ab dort werden dann ignoriert (oder DEVICESCAN deaktivieren und nur die Disks angeben, die einen wirklich interessieren):

Pending Sectors (194) auf /dev/sdc ignorieren:

/etc/smartmontools/smartd.conf
/dev/sdc -a -I 194
...
DEVICESCAN -H -m root -M exec /usr/libexec/smartmontools/smartdnotify -n standby,10,q
...
systemctl reload smartd

Troubleshooting

„/usr/share/smartmontools/drivedb.h.error: rejected by /usr/sbin/smartctl, probably no longer compatible“, besonders auf CentOS 6

Dort kommt Version 5.43 der smartmontools zum Einsatz; die aktuellste Version ist aber Minimum 6.5. Die Datenbank-Datei „drivedb.h“ v6, die per Änderung:

$EDITOR /usr/sbin/update-smart-drivedb

...
SRCEXPR=‘http://sourceforge.net/p/smartmontools/code/HEAD/tree/$location/smartmontools/drivedb.h?format=raw'
...

geholt wird, passt daher nicht zur auf CentOS 6 eingesetzten Version. Hier muss man sich mit der letzten Version https://sourceforge.net/projects/smartmontools/files/smartmontools/5.43/ der drivedb.h begnügen.

Built on 2022-06-03