Wenn die Platten altern, sollte man präventiv ab und an mal einen Check über die Platte laufen lassen, bevor Datenverlust droht. Dazu eignet ein Konglomerat aus smartmontools, badblocks und hdparm. Bei leeren oder gebraucht gekauften Platten lohnt sich unter Umständen auch ein Firmwareupdate und/oder ein schreibender Badblocktest vor dem Einsatz der Platte.
Vor dem Betrieb:
Neue/ungenutzte/gebrauchte Festplatten: Schreibtest der Platte
Kommt eine neue Platte ins System z.B. man übernimmt eine alte Platte von einem Freund, hat man noch die Möglichkeit, ohne Datenverlust die Platte zunächst auf die aktuellste Firmware zu bringen (siehe unten). Weiterhin denke ich, dass es sich lohnen kann die gesamte Platte nach defekten Blöcken zu durchsuchen – aber schreibend. Die schreibende Option schreibt in jeden Block der Platte patternbasiert Daten (man kann mit dem -t Parameter auch mehrere Testpatterns angeben, z.b. -t random für zufällige Patterns) und liest diese im Anschluss wieder. Das hat den Vorteil, dass das eingebaute Management in der Platte den defekten Sektor erkennen und auf einen neuen Bereich der Platte mappen kann. Meines Wissens nach werden unlesbare Sektoren vom Betriebssystem als solche markiert, jedoch tritt das Sektorenremapping der Platte nur beim Schreiben in kraft. Theoretisch sortiert so die Logik der Festplatte die defekten Sektoren auf der Oberfläche aus und springt dafür andere Sektoren in Reservebereichen an. Dennoch sei vor defekten Sektoren gewarnt, ist doch eine steigende Anzahl dergleichen ein Indikator für eine sterbende Platte. Aber wir alle wissen ja, Backup ist immer Pflicht 😉
Badblocks schreibend(löscht Platte):
-c 4096: 4096 Blöcke auf einmal
-o sdd_badblocks_rw_run1.txt: speichert die Ausgabe nach sdd_badblocks_rw_run1.txt
-w : „non-destructive read-write mode“ – quasi read-only
-s : zeige Fortschritt an
-v : verbose – erhöht die „Gesprächigkeit“ und zeigt Lese- und Schreibfehler auf der Konsole an.
badblocks -c 4096 -w -o sdd_badblocks_ro_run1.txt -s -v /dev/sdd Es wird nach defekten Blöcken gesucht (Lesen+Schreiben-Modus) Von Block 0 bis 1953514583 Es wird getestet Mit Muster 0xaa: 0.31% erledigt, 0:54 verstrichen. (0/0/0 Fehler)
… ein Tag später …
Es wird nach defekten Blöcken gesucht (Lesen+Schreiben-Modus) Von Block 0 bis 1953514583 Es wird getestet Mit Muster 0xaa: 11.58% erledigt, 21:46:03 verstrichen. (0/0/0 Fehler) 99.54% erledigt, 5:12:12 verstrichen. (0/0/0 Fehler) Lesen und Vergleichen:erledigt ) Es wird getestet Mit Muster 0x55: erledigt ) Lesen und Vergleichen:erledigt ) Es wird getestet Mit Muster 0xff: erledigt ) Lesen und Vergleichen:erledigt ) Es wird getestet Mit Muster 0x00: erledigt ) Lesen und Vergleichen:erledigt ) Durchgang beendet, 0 defekte Blöcke gefunden. (0/0/0 Fehler)
… also das war nur eine 2TB Platte. Bei den 4TB Modellen nochmal mehr Zeit einplanen für einen initialen Check. Wobei hier 4 Iterationen mit unterschiedlichen Patterns gefahren wurden. Das ist die Standardeinstellung für
Neue/ungenutzte/gebrauchte Festplatten: Firmware nötig bzw. möglich?
Zunächst kann man meist mit hdparm an die interessanten Informationen über seine Platte kommen. So ist u.a. auch die Firmwareversion in der Ausgabe von hdparm -i /dev/sdd enthalten.
:# hdparm -i /dev/sdd /dev/sdd: Model=SAMSUNG HD204UI, FwRev=1AQ10001, SerialNo=XXXXXXXXXXXXXX Config={ Fixed } RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4 BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=16 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=3907029168 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120} PIO modes: pio0 pio1 pio2 pio3 pio4 DMA modes: mdma0 mdma1 mdma2 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 AdvancedPM=yes: disabled (255) WriteCache=enabled Drive conforms to: unknown: ATA/ATAPI-0,1,2,3,4,5,6,7 * signifies the current active mode
Ist die Firmware von einem Bug betroffen, oder gibt es eine Neuere, empfiehlt sich meist, die neuste Version zu flashen.
Für die hier im Beispiel verwendete Platte (eine Samsung F4 2TB) hat Conrad vor ein paar Jahren eine Anleitung geschrieben: Samsung F4 Firmware Update. An dieser Stelle sei gesagt, dass Seagate die Festplattensparte von Samsung geschluckt hat und man mittlerweile bei Seagate gucken muss.
Im laufenden Betrieb:
Badblocks read-only(sanft):
Auch hier wird nach defekten Blöcken gesucht, jedoch kann nur geprüft werden, ob diese gelesen werden können. Der Nachteil der Methode ist, dass man nicht prüfen kann, ob ein Schreibvorgang an dieser Stelle auf der Platte möglich ist. Der Vorteil liegt jedoch darin, dass kein Inhalt überschrieben wird. Bei diesem Test sollte auf ein Pattern verzichtet werden, da badblocks sonst erwartet, dass Pattern zu lesen und eine Tonne an Fehlern ausgibt.
badblocks -c 4096 -n -o sdd_badblocks_ro_run1.txt -s -v /dev/sdd
-c 4096: 4096 Blöcke auf einmal
-o sdd_badblocks_ro_run1.txt: speichert die Ausgabe nach sdd_badblocks_ro_run1.txt
-n : „non-destructive read-write mode“ – quasi read-only
-s : zeige Fortschritt an
-v : verbose – erhöht die „Gesprächigkeit“ und zeigt Lese- und Schreibfehler auf der Konsole an.
S.M.A.R.T. Werte im Auge behalten
Natürlich dürfen die Smartwerte (S.M.A.R.T. = Self-Monitoring, Analysis and Reporting Technology), ausgelesen mit den Smartmontools über smartctl, nicht fehlen. Diese Werte sind besonders interessant um zu bewerten, ob eine gebrauchte Platte wirklich „nur am Wochenende“ gelaufen ist, oder aber 24/7 in einem NAS gearbeitet hat.
Anhand dieser Platte kann man sehen, dass sie schon 12108 Stunden gelaufen ist („Power_On_Hours“) und 1853 mal die Platter neu angedreht hat („Start_Stop_Count“). Das wären im Durchschnitt gut 6,5 Stunden Laufzeit pro Tag – vielleicht war sie also in einem Arbeitspc verbaut. Neben der Laufzeit ist aber der Zustand der Platteroberfläche bzw. das Zusammenspiel mit dem Lesekopf ebenfalls interessant. Die Werte „Reallocated_Event_Count“, „Current_Pending_Sector“ und „Offline_Uncorrectable“ geben an, wieviele Sektoren schon neu zugewiesen wurden, wieviele in der Schwebe sind (also auf dem Weg zum neu zugewiesenen) und wieviele Sektoren gänzlich verloren sind. Im Idealfall sind hier alle Werte 0. Unter Umständen kann es sein, dass auch mal ein schadhafter Block auftritt und es zu keinen Folgeproblemen kommt, wächst die Zahl der defekten Sektoren jedoch, sollte man sich gedanklich schon von der Platte verabschieden.
:~# smartctl --all /dev/sdd smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.16.0-0.bpo.4-amd64] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net === START OF INFORMATION SECTION === Model Family: SAMSUNG SpinPoint F4 EG (AFT) Device Model: SAMSUNG HD204UI Serial Number: XXXXXXXXXXXXXX LU WWN Device Id: 5 0024e9 2040b96a9 Firmware Version: 1AQ10001 User Capacity: 2.000.398.934.016 bytes [2,00 TB] Sector Size: 512 bytes logical/physical Device is: In smartctl database [for details use: -P show] ATA Version is: 8 ATA Standard is: ATA-8-ACS revision 6 Local Time is: Mon Jul 20 17:33:25 2015 CEST ==> WARNING: Using smartmontools or hdparm with this drive may result in data loss due to a firmware bug. ****** THIS DRIVE MAY OR MAY NOT BE AFFECTED! ****** Buggy and fixed firmware report same version number! See the following web pages for details: http://www.samsung.com/global/business/hdd/faqView.do?b2b_bbs_msg_id=386 http://sourceforge.net/apps/trac/smartmontools/wiki/SamsungF4EGBadBlocks SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED 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: (20940) seconds. Offline data collection capabilities: (0x5b) 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. 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. General Purpose Logging supported. Short self-test routine recommended polling time: ( 2) minutes. Extended self-test routine recommended polling time: ( 255) minutes. SCT capabilities: (0x003f) SCT Status supported. SCT Error Recovery Control supported. SCT Feature Control supported. SCT Data Table supported. 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 0x002f 100 100 051 Pre-fail Always - 1704 2 Throughput_Performance 0x0026 252 252 000 Old_age Always - 0 3 Spin_Up_Time 0x0023 067 066 025 Pre-fail Always - 10094 4 Start_Stop_Count 0x0032 099 099 000 Old_age Always - 1853 5 Reallocated_Sector_Ct 0x0033 252 252 010 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 252 252 051 Old_age Always - 0 8 Seek_Time_Performance 0x0024 252 252 015 Old_age Offline - 0 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 12108 10 Spin_Retry_Count 0x0032 252 252 051 Old_age Always - 0 11 Calibration_Retry_Count 0x0032 252 252 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 350 181 Program_Fail_Cnt_Total 0x0022 100 100 000 Old_age Always - 2065 191 G-Sense_Error_Rate 0x0022 100 100 000 Old_age Always - 1045 192 Power-Off_Retract_Count 0x0022 252 252 000 Old_age Always - 0 194 Temperature_Celsius 0x0002 064 043 000 Old_age Always - 30 (Min/Max 10/57) 195 Hardware_ECC_Recovered 0x003a 100 100 000 Old_age Always - 0 196 Reallocated_Event_Count 0x0032 252 252 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 252 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 252 252 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0036 100 100 000 Old_age Always - 6 200 Multi_Zone_Error_Rate 0x002a 100 100 000 Old_age Always - 57 223 Load_Retry_Count 0x0032 252 252 000 Old_age Always - 0 225 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 1908 SMART Error Log Version: 1 No Errors Logged SMART Self-test log structure revision number 1 No self-tests have been logged. [To run self-tests, use: smartctl -t] Note: selective self-test log revision number (0) not 1 implies that no selective self-test has ever been run SMART Selective self-test log data structure revision number 0 Note: revision number not 1 implies that no selective self-test has ever been run SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Completed [00% left] (0-65535) 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 0 minute delay.
Zwei Dinge:
1. Ich benutze GSmartControl um meine Platten zu testen.
2. Kann man die Liste von „badblocks“ benutzen mit „fsck“ und „mkfs.*“.
Und es soll wohl Tools geben, die auch kaputte Blöcke reparieren.
Die sind aber sehr „low level“. Und sehr teuer.