http://www.black-board.net
Es ist nicht gestattet dieses Tutorial losgelöst von dem Namen BlackBoard und der URL zu verbreiten.
Das Tutorial befindet sich noch in der Entwicklung. Wenn du mitwirken möchtest, melde dich hier.
Dies ist ein Aufruf - wenn du Ahnung hast, mach mit!
1. Einleitung
Festplatten crashen selten spontan, meist kündigen sie ihr Sterben lange Zeit vorher an.
Wer beim booten des Rechners eine Meldung in der Art sieht:
SMART Failure Predicated on Hard Disk 0: HTS541080G9SA00-(S1)
WARNING: Immediately back-up your data and replace your hard disk drive. A failure may be imminent.
Press F1 to Continue
hat nochmal Glück gehabt. Mit dieser Meldung informiert SMART, dass ein Versagen der Festplatte bevorsteht und man diese austauschen sollte.
Als Serveradmin hat man dieses Glück in der Regel nicht, da es im Normalfall keinen Grund gibt den Server zu rebooten. Trifft der Admin keine entsprechenden Vorkehrungen kann ein Versagen der Platte zu unnötig langen Auszeiten führen. Dieses Tutorial soll dazu dienen dies zu verhindern und Probleme zu erkennen bevor sie fatale Auswirkungen haben.
2. S.M.A.R.T.
SMART steht für Self-Monitoring, Analysis ans Reporting Technology, über die alle modernen Festplatten verfügen (ab dem ATA-2 Standard, 1996). Neben der ständigen Protokollierung von Fehlern und Messwerten sind auch Funktionen für Selbsttests eingebaut. Es wäre natürlich hilfreich möglichst frühzeitig von Problemen oder einem bevorstehenden Festplattencrash zu erfahren, dafür sorgt unter Linux das Programm Smartmontools. Das Programm dient dazu die SMART-Funktionen der HD aufzurufen und zu steuern, mit Hilfe von smartd geschieht dies sogar automatisch.
Die Installation erfolgt über den Befehl (smartctl & smartd):
apt-get install smartmontools
3. smartctl
Festplattenstatus
Listing 1 - Infos zur Festplatte
loki:/home/he# smartctl -i /dev/hda
smartctl version 5.36 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF INFORMATION SECTION ===
Model Family: HITACHI Travelstar DK23XX/DK23XXB series
Device Model: HITACHI_DK23DA-20
Serial Number: 14MZUA
Firmware Version: 00J2A0A1
User Capacity: 20.003.880.960 bytes
Device is: In smartctl database [for details use: -P show]
ATA Version is: 5
ATA Standard is: ATA/ATAPI-5 T13 1321D revision 3
Local Time is: Wed Jan 17 00:24:03 2007 CET
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Listing 1a - nur anscheinend ein Problemfall
hermes:~# smartctl -i /dev/sda
smartctl version 5.32 Copyright (C) 2002-4 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
Device: ATA SAMSUNG SP2504C Version: VT10
Serial number: S09QJ1WL817127
Device type: disk
Local Time is: Fri Jan 19 23:30:58 2007 CET
Device does not support SMART
Listing 1 zeigt ein Printout wie es aussehen sollte, beim Zweiten Listing (1a) gibt es noch ein kleines Problem das aber sehr leicht zu lösen ist (Listing 1b). Um auch bei dieser Platte brauchbare Infos zu erhalten verwendet man die Option "
-d ata" (sie muss bei allen Aufrufen mit angegeben werden).
Weitere Infos gibt es unter
http://smartmontools.sourceforge.net/#testinghelp.
Listing 1b
hermes:~# smartctl -d ata -i /dev/sda
smartctl version 5.32 Copyright (C) 2002-4 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF INFORMATION SECTION ===
Device Model: SAMSUNG SP2504C
Serial Number: S09QJ1WL817127
Firmware Version: VT100-41
Device is: In smartctl database [for details use: -P show]
ATA Version is: 7
ATA Standard is: Not recognized. Minor revision code: 0x21
Local Time is: Fri Jan 19 23:35:51 2007 CET
==> WARNING: May need -F samsung or -F samsung2 enabled; see manual for details.
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Sollte SMART deaktiviert sein, kann man es einfach über die Option -s on aktivieren.
Der ATA-Standard definiert eine Vielzahhl von Attributen um die Eigenschaften des Gerätes zu erfassen. Eine Übersicht der einzelnen Attribute sowie ihrer Bedeutung gibt es unter: http://smartlinux.sourceforge.net/smart/attributes.php Leider bleibt das Format der Datenspeicherung dem Hersteller überlassen, was natürlich zu einigen Unterschieden führt. Aus diesem Grund besitzt Smartmontools eine eigene Datenbank, in welcher die Attributbelegung dokumentiert ist.
Ein Übersicht aller Attribute bekommt man über:
smartctl -A /dev/hda
Listing 2
loki:/home/he# smartctl -A /dev/hda
smartctl version 5.36 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000d 100 100 050 Pre-fail Offline - 12884901891
2 Throughput_Performance 0x0005 100 100 050 Pre-fail Offline - 4060
3 Spin_Up_Time 0x0007 100 100 050 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 098 098 000 Old_age Always - 2638
5 Reallocated_Sector_Ct 0x0033 001 001 010 Pre-fail Always FAILING_NOW 40
7 Seek_Error_Rate 0x000f 100 100 050 Pre-fail Always - 534
8 Seek_Time_Performance 0x0005 100 100 050 Pre-fail Offline - 1242
9 Power_On_Minutes 0x0032 089 089 000 Old_age Always - 5722h+36m
10 Spin_Retry_Count 0x0013 100 100 050 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 098 098 000 Old_age Always - 2074
191 G-Sense_Error_Rate 0x000a 100 100 000 Old_age Always - 13
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 219
193 Load_Cycle_Count 0x0032 014 014 000 Old_age Always - 521999/521779
194 Temperature_Celsius 0x0022 092 058 000 Old_age Always - 44 (Lifetime Min/Max 11/61)
195 Hardware_ECC_Recovered 0x001a 100 040 000 Old_age Always - 1973
196 Reallocated_Event_Count 0x0032 096 096 000 Old_age Always - 40
197 Current_Pending_Sector 0x0032 001 001 000 Old_age Always - 2788
198 Offline_Uncorrectable 0x0010 001 001 000 Old_age Offline - 11974368824036
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
223 Load_Retry_Count 0x0012 100 100 000 Old_age Always - 57
230 Head_Amplitude 0x0032 096 096 000 Old_age Always - 146790
250 Read_Error_Retry_Rate 0x000a 100 001 000 Old_age Always - 519
Wichtig zur Beurteilung der Werte ist die Spalte TYPE. Attribute die mit Old_age gekennzeichnet sind zeigen normale Alterungserscheinungen, Werte mit Pre-fail zeigen Attribute die zu einem Versagen führen können.
Unter VALUE sieht man den aktuellen Wert, WORST zeigt den bisher schlechtesten Wert und THRESH gibt die vom Hersteller definierte Schwelle an. Fällt der aktuelle auf den Schwellwert oder darunter wird das entsprechende Attribut als schadhaft markiert und im Healthstatus aufgeführt.
Der Gesundheitstatus der Platte lässt sich über smartctl -H /dev/hda abfragen.
Listing 3
loki:/home/he# smartctl -H /dev/hda
smartctl version 5.36 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== 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
5 Reallocated_Sector_Ct 0x0033 001 001 010 Pre-fail Always FAILING_NOW 40
In diesem Beispiel hat die Platte Fehler (Testresult: FAILED). Dies ist ein gutes Beispiel dafür, dass Platten i.d.R. ihr Versagen lange vorher ankündigen. Bisher sind noch keinerlei Einschränkungen spürbar, es ist hier auch nicht mit einem plötzlichen Crash zu rechnen. Sollte der Wert aber weiter sinken, wird sich dies stark auf die Performance der HD auswirken.
Sollte der Test keinerlei Fehler ergeben, bekommt man als Resultat PASSED.
Der Vollständigkeit halber sei auch erwähnt, dass SMART ein Errorlog bietet: smartctl -l error
Listing 4
loki:/home/he# smartctl -l error /dev/hda
smartctl version 5.36 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF READ SMART DATA SECTION ===
SMART Error Log Version: 1
ATA Error Count: 160 (device log contains only the most recent five errors)
CR = Command Register [HEX]
FR = Features Register [HEX]
SC = Sector Count Register [HEX]
SN = Sector Number Register [HEX]
CL = Cylinder Low Register [HEX]
CH = Cylinder High Register [HEX]
DH = Device/Head Register [HEX]
DC = Device Command Register [HEX]
ER = Error register [HEX]
ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.
Error 160 occurred at disk power-on lifetime: 5677 hours (236 days + 13 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
40 51 08 c7 cb 33 e0 Error: UNC at LBA = 0x0033cbc7 = 3394503
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
c4 00 08 c7 cb 33 e0 00 22:22:23.580 READ MULTIPLE
c4 00 08 bf cb 33 e0 00 22:22:23.580 READ MULTIPLE
c4 00 08 b7 cb 33 e0 00 22:22:23.580 READ MULTIPLE
c4 00 08 af cb 33 e0 00 22:22:23.570 READ MULTIPLE
c4 00 08 a7 cb 33 e0 00 22:22:23.570 READ MULTIPLE
Tests
Ist SMART für eine Festplatte aktiviert, werden die Systemperformancedaten ständig im Hintergrund mitgeschrieben (ohne Leistungseinbußen). Das gilt für alle Attribute, die in der Spalte UPDATED ein Always zu stehen haben (siehe auch Listing 2). Diese Methode nennt sich Online-Test.
Welche Tests die HD beherrscht und wie lange sie dauern findet man mit dem Aufruf smartctl -c heraus.
Listing 5
loki:/home/he# smartctl -c /dev/hda
smartctl version 5.36 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF READ SMART DATA SECTION ===
General SMART Values:
Offline data collection status: (0x00) Offline data collection activity
was never started.
Auto Offline Data Collection: Disabled.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: (1090) seconds.
Offline data collection
capabilities: (0x1b) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
Offline surface scan supported.
Self-test supported.
No Conveyance Self-test supported.
No Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
No General Purpose Logging support.
Short self-test routine
recommended polling time: ( 2) minutes.
Extended self-test routine
recommended polling time: ( 19) minutes
Im Gegensatz zu den Online-Tests kann es bei den Offline-Tests zu Einschränkungen der Performance kommen. Diese sollten in der Praxis aber kaum spürbar sein, denn sobald das OS auf die Platte zugreift wird der Test für den Zugriff unterbrochen.
In diesem Beispiel gibt es 3 verschiedene Tests: Offline, Short self-test und Extended self-test
Starten lassen sich die Tests über folgendes Kommando:
smartctl -t offline /dev/hda #Offline
smartctl -t short /dev/hda #Short self-test
smartctl -t long /dev/hda #Extended self-test
Natürlich kann man den Test auch jederzeit über smartctl -X /dev/hda abbrechen.
Nach einer gewissen Wartezeit (es erfolgt keine Mitteilung, wenn der Test beendet ist) kann man sich das Ergebnis dann über smartctl -l selftest /dev/hda ansehen.
Listing 6
loki:/home/he# smartctl -l selftest /dev/hda
smartctl version 5.36 [i686-pc-linux-gnu] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Self-test routine in progress 90% 5723 -
# 2 Short offline Completed: unknown failure 10% 5723 -
# 3 Extended offline Aborted by host 90% 5722 -
# 4 Short offline Completed: unknown failure 10% 5722 -
Im Printout steht der jüngste Test jeweils oben (hier läuft er noch). Wie man unter #2 sehr gut sieht bricht der Test automatisch ab sobald er auf einen Fehler stößt (es wurden nur 90% des Tests durchgeführt).
4. smartd
Bisher war es notwendig alles manuell anzustoßen, was natürlich für eine konsequente Überwachung ungeeignet ist. Hierfür gibt es smartd.
smartd ist ein Daemonprozess, der je nach Einstellung entsprechende Attribute abfragt und Tests startet. smartd protokolliert seine Meldungen über Syslog und im Fehlerfall besteht auch die Möglichkeit der Alarmierung über E-Mail.
Die Konfiguration erfolgt über die Datei /etc/smartd.conf. Da das Configfile sehr kurz ist und mehr als genug Erklärungen bietet wird an dieser Stelle nur kurz auf die Konfiguration sowie einige wichtige Punkte, welche für sinnvolles Monitoring unabdingbar sind, hingewiesen.
Um sich nicht unnötig die Logfiles vollzumüllen sollte man häufig wechselnde Attribute aus der Überwachung nehmen (Option: -I), z.B.:
- Temperatur
- Betriebszeit
- etc.
Die Alarmierung über E-Mail erfolgt über -m <E-Mail-Adresse>.
Listing 7 - Auszug aus der smartd.conf
# HERE IS A LIST OF DIRECTIVES FOR THIS CONFIGURATION FILE.
# PLEASE SEE THE smartd.conf MAN PAGE FOR DETAILS
#
# -d TYPE Set the device type: ata, scsi, marvell, removable, 3ware,N
# -T TYPE set the tolerance to one of: normal, permissive
# -o VAL Enable/disable automatic offline tests (on/off)
# -S VAL Enable/disable attribute autosave (on/off)
# -n MODE No check. MODE is one of: never, sleep, standby, idle
# -H Monitor SMART Health Status, report if failed
# -l TYPE Monitor SMART log. Type is one of: error, selftest
# -f Monitor for failure of any 'Usage' Attributes
# -m ADD Send warning email to ADD for -H, -l error, -l selftest, and -f
# -M TYPE Modify email warning behavior (see man page)
# -s REGE Start self-test when type/date matches regular expression (see man page)
# -p Report changes in 'Prefailure' Normalized Attributes
# -u Report changes in 'Usage' Normalized Attributes
# -t Equivalent to -p and -u Directives
# -r ID Also report Raw values of Attribute ID with -p, -u or -t
# -R ID Track changes in Attribute ID Raw value with -p, -u or -t
# -i ID Ignore Attribute ID for -f Directive
# -I ID Ignore Attribute ID for -p, -u or -t Directive
# -C ID Report if Current Pending Sector count non-zero
# -U ID Report if Offline Uncorrectable count non-zero
# -v N,ST Modifies labeling of Attribute N (see man page)
# -a Default: equivalent to -H -f -t -l error -l selftest -C 197 -U 198
# -F TYPE Use firmware bug workaround. Type is one of: none, samsung
# -P TYPE Drive-specific presets: use, ignore, show, showall
# # Comment: text after a hash sign is ignored
# Line continuation character
# Attribute ID is a decimal integer 1 <= ID <= 255
# except for -C and -U, where ID = 0 turns them off.
# All but -d, -m and -M Directives are only implemented for ATA devices
#
# If the test string DEVICESCAN is the first uncommented text
# then smartd will scan for devices /dev/hd[a-l] and /dev/sd[a-z]
# DEVICESCAN may be followed by any desired Directives.
5. Tipps
Grafische Auswertung
Wer ungern Logs nach relevanten Informationen durchsucht, kann sich mit Hilfe von Munin die Parameter natürlich auch grafisch auswerten lassen (sehr gut für das Langzeitmonitoring). Weiteres gibt es im Kapitel Monitoring mit Munin.
Verfügbare Plugins
- smart_: Ausgabe aller Attribute (hier wird der Wert unter VALUE ausgegeben)
- hddtemp_smartctl: Ausgabe der Temperatur in °C
Hitzetod?
Über das Attribut Temperature_Celsius lässt sich erkennen ob die Festplatte gut genug gekühlt wird. Wer nur an diesem Wert interessiert ist und dafür nicht extra smartmontools einsetzen möchte, dem sei das kleine Tool hddtemp ans Herz gelegt.
Gebrauchte Platten
Um festzustellen wie sehr eine Platte bisher strapaziert wurde, gibt es 2 entscheidende Werte:
Power_On - gesamte Betriebszeit
Power_Cycle_Count - wie oft wurde die HD ein-/ausgeschaltet
6. Links