Moin.
Ich führ in einem PHP-Skript den Aufruf für alle gemounteten Platten nacheinander aus mit:
Code:
$cmdSmart = "sudo -u root /usr/sbin/smartctl -A $device -d sat 2>&1";
$resultSmart = shell_exec($cmdSmart);
In $resultSmart geh ich dann Zeilenweise durch und hol mir die interessanten Werte (Power On Hours, Start Stop Count, Temperature)
Da ich die Werte einfach nur als String einlese und auf ner Webseite anzeige, musste ich auch nicht wirklich rechnen.
Lediglich bei der Temperatur gibts Warnungen, wenns zu heiss wird. Aber das sind Werte, die ich mit 6 bit auch schaffen würde.
Die Ausgabe sieht z.B. so aus für eine schon ältere Platte mit 10931 Betriebsstunden (ID 9):
Code:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 200 200 051 Pre-fail Always - 0
3 Spin_Up_Time 0x0027 172 170 021 Pre-fail Always - 2383
4 Start_Stop_Count 0x0032 099 099 000 Old_age Always - 1931
5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
7 Seek_Error_Rate 0x002e 100 253 000 Old_age Always - 0
9 Power_On_Hours 0x0032 086 086 000 Old_age Always - 10931
10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0
11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1825
192 Power-Off_Retract_Count 0x0032 198 198 000 Old_age Always - 1804
193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 126
194 Temperature_Celsius 0x0022 120 088 000 Old_age Always - 23
196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0030 200 200 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 12
200 Multi_Zone_Error_Rate 0x0008 200 200 000 Old_age Offline - 0
Und das ist eine der neuen mit einem "unmöglichen" Wert 168598941204504 = 0x995700000018, "unten" 0x18 = 24 Betriebsstunden.
Was das in den vorderen 32Bit (bzw. 16) ist, keine Ahnung, aber wechselt bei jedem Auslesen scheinbar willkürlich. Hab da noch kein Muster feststellen können.
Vorher: 196889890783256 0xB31200000018
Jetzt: 168598941204504 0x995700000018
Code:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 074 073 006 Pre-fail Always - 24503642
3 Spin_Up_Time 0x0003 099 099 000 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 6
5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0
7 Seek_Error_Rate 0x000f 065 060 045 Pre-fail Always - 2896370
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 168598941204504
10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 6
183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0
184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0
187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0
188 Command_Timeout 0x0032 100 100 000 Old_age Always - 0
189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0
190 Airflow_Temperature_Cel 0x0022 073 057 040 Old_age Always - 27 (Min/Max 25/27)
191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 0
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 4
193 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 91
194 Temperature_Celsius 0x0022 027 043 000 Old_age Always - 27 (0 25 0 0)
195 Hardware_ECC_Recovered 0x001a 074 073 000 Old_age Always - 24503642
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 126937758433301
241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 1932648833
242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 3374992
Und die Werte werden eben leider nur dezimal angezeigt. Wären das Hex-Werte, wäre das Problem keins mehr. Dann würd ich nur die letzten 8 Hex-"Ziffern" einlesen und gut. Nur akzeptiert dieses smartctl den Parameter "hex,val" nicht für -f, sondern nur "old" und "brief".
Update-Versuch dieses einen Pakets: "smartmontools ist schon die neueste Version", weils für den alten Hobel nichts mehr gibt.
Das mit 0x000200000002 war nur mal ein Beispiel, dass eben auch die 2 in den oberen 32 Bit da quasi "stört".
MfG
Stefan
Lesezeichen