• Some users have recently had their accounts hijacked. It seems that the now defunct EVGA forums might have compromised your password there and seems many are using the same PW here. We would suggest you UPDATE YOUR PASSWORD and TURN ON 2FA for your account here to further secure it. None of the compromised accounts had 2FA turned on.
    Once you have enabled 2FA, your account will be updated soon to show a badge, letting other members know that you use 2FA to protect your account. This should be beneficial for everyone that uses FSFT.

What is absolute Max HDD temp before failure?

Hamfiles

Limp Gawd
Joined
Feb 13, 2005
Messages
160
I am writing a windows application that gets all of the connected hard drives, and among other things, reads their temperatures.

The value returned by the hard drive controller is one of the bytes of info in a byte array, which means the temperature returned by the hard drive is always between 0 and 255. For some vendors, like Western Digital, the returned value is in Celsius. For others, like Maxtor, the value is usually in Fahrenheit.

I am trying to write a method that reliably determines if the value is probably Fahrenheit, or probably Celsius.

Some values I know right away are in Farhenheit, like 140 degrees.

Some values could be one or the other, like 70 degrees.

Has anyone ever deliberately fried a hard drive? I would like to know how much temp. a hard drive can handle before it dies.

Thanks for any responses.

Sincerely,
Hamfiles
 
Off topic, but have you been able to recieve SMART readings from drives running on RAID controllers? Like Areca or 3ware?

I have been looking all over the place for a program that can read the SMART temps from a RAID controller.
 
I don't know, I am using Windows Instrument Management, WMI namespace, the one exposed by the Microsoft .Net Framework. I can check.

But I don't have a RAID setup, so I would not be able to test it. I suppose I could send you my beta, and you could run it, and see if it returns anything.
 
Here is the line of code I am using to expose each hard disk. There is nothing special, or unique about it. In fact, with a few more lines of code, you can get the temps with a simple vbs script file. Code performance of the script would suck, though, because of late binding.

Searcher = New ManagementObjectSearcher("root\WMI", "SELECT * FROM MSStorageDriver_ATAPISmartData")

I know that the admin tools from the control panel show each IDE disk, even if they are in a RAID array. The question is, can the MSStorageDriver_ATAPISmartData namespace expose the IDE smart data, if the IDE device is in a RAID array.

I would think that it prob. does, but I can't imagine why you would not be able to find even one application, that does not display temps/smart info from drives connected to a RAID array.

I suppose it might be a motherboard/RAID card thing. If the manufacturer does not write the support for this in the drivers, then there would be no way to obtain it.

Anyway, does anyone know how hot a hard drive can get, before it dies? (Edited typos)
 
just check the spec from the manuf website.

WD is easy to find, not sure about others. SATA-3Gbs popular Cavier 7200 rpms specs are:

Temperature (English)
Operating 41° F to 131° F
Non-operating -40° F to 149° F

Temperature (Metric)
Operating 5° C to 55° C
Non-operating -40° C to 65° C


http://www.wdc.com/en/products/Products.asp?DriveID=214#jump77

I would think the max operating temp is what you want, it might not fry at that but if it was exceeded the warranty would be voided and operation could not be assured. Certainly any temp over that would be a BAD thing.

Of interest is, are the operating temp of the enterprise class drives higher ?

Raptor X same as above.

Enterprise drive, WD RE2 drives bit higher

Temperature (English)
Operating 41° F to 140° F
Non-operating -40° F to 158° F

Temperature (Metric)
Operating 5° C to 60° C
Non-operating -40° C to 70° C


anywho a place to start
 
Thanks for your reply. Take a look at the code at/below line 20. If the temp reading is > 80, does this mean it must be in Fahrenheit, or are there some PCs out there that actually run theri HDD that hot? Edit, the lines with ' mark are comments.

Public Function TemperatureInCelsius(ByVal TempValue As Single) As Byte()
' Return the value in Celsius.
Select Case TempValue
Case 0 To 4
' Don't care.
' Zero is too low, and in Celcius, 4 is 39. 2 degrees.
'
' Return nothing to indicate the value is unknown.
Return Nothing
Case 5 To 55
' Here the temperature is probably in Celcius.
' Return the raw value, is already in Celcius.
' Second byte is the temperature.
' First byte is True/False boolean value indicating if temp is in Celcius or not.
Return New Byte() {TempIsCelsius, CByte(TempValue)}
Case 55 To 80

' It could be either.

' Return the raw value, and return unknown if F or C.

Return New Byte() {TempScaleUnknown, CByte(TempValue)}

LINE_20: Case Is > 80 '<<<

' Here is where I am unsure.
' Can a hard drive survive for long at 80 degrees Celcius?
' I will just assume the temperature must be in Fahrenheit, right?
' CelsiusTemp = (5/9) x (TempFahrenheit -32)

Dim NewTempValue As Double
NewTempValue = (5 / 9) * (TempValue - 32)
' Ensure value is valid for byte before returning it.
If NewTempValue > 0 AndAlso NewTempValue < 256 Then
' we are sure temp was originally in F, right? so we converted it to C.
Return New Byte() {TempIsCelsius, CByte(NewTempValue)}
End If
End Select
End Function
 
lol, will look in a while, I just realized I gave you Max Enviromental operating temps which should be the max ambient air temp of the drive enclosure NOT the max temp the drive can handle, gotta check that first and correct myself. doh !!!
 
OK, correction and answer to code question kinda tied together, I base a lot on my experience as a design engineer for telecom swithcing power supplys and knowledge of intergrated circuit chips specifications and use, we heat tested everything so max temps of components on our products was of great concern.

Info I gave above was incorrect for reasons I mentioned above.
WD does not really give that spec but they do give the max NON-operating temp max, i.e. if you set it on you car dashboard and the sun cooks it to above 70C (for most WD drives) you have exceeded its spec. From that we can deduce that the internal electronics are sensitive to temps above 70C regardless if the drive is actually operating or not. So I would say if you got a temp reading back in excess of 70C you were about to have a cooked drive on your hands as the lifetime of the electronics just went south. It might work, but not for long term and the reliability is shot unless those temps come down real quick.

This agrees with my general knowledge of chips etc. i seem to remember 70C was max temp rating of most chips unless they were special military versions etc. Easy enough to confirm by looking up some common disc controller chips.

So, based on all I have learned in the last few minutes, I seriously doubt any value over 80 would be in celcius and if it was drive failure was on the way.

Hmm off to look at the SMART spec to see if temp reporting on a F scale is even allowed, I would be suprised, i am fairly sure you can assume C in all cases and anything over 55 should be a warning and anything over 70 should alarm. but I am just blowing smoke till I find out more.

weeeeeeeeee !!! my brain is working big fun. :D
 
Gah gotta go, SMART not well defined or trade secret. wiki page pretty good but got most out of this

http://labs.google.com/papers/disk_failures.pdf

These guys have thousands of drives in service and did a failure study, of interest is the section on drive temp vs failure and their temp chart only goes up to 50C. This just really really make me think 99.9% of drives probally report their temps in C and anything over 80 is not F but a super hot drive.

some info you probally already found:
http://en.wikipedia.org/?title=Self...orting_Technology#Known_S.M.A.R.T._attributes
http://smartlinux.sourceforge.net/smart/index.php
 
Thanks Bill ! U = Teh Awesome!

I am at my compiler, and I just coded a function that returns all smart values. There are 362 values that are returned, but many of them are zero. I suspect that they are unused. Very criptic data, no exposed definitions, only "VendorSpecific", like you said, seems to be proprietary trade secret type info.

Anyway, thanks so much for the links, good info.

-Hamfiles-
-post script:

Western digital raptor, 74G vendor specific values returned the following byte array:(# 115 is temp. in celcius):
0: 16
1: 0
2: 1
3: 15
4: 0
5: 200
6: 200
7: 0
8: 0
9: 0
10: 0
11: 0
12: 0
13: 0
14: 3
15: 3
16: 0
17: 181
18: 163
19: 116
20: 7
21: 0
22: 0
23: 0
24: 0
25: 0
26: 4
27: 50
28: 0
29: 96
30: 96
31: 253
32: 16
33: 0
34: 0
35: 0
36: 0
37: 0
38: 5
39: 51
40: 0
41: 200
42: 200
43: 0
44: 0
45: 0
46: 0
47: 0
48: 0
49: 0
50: 7
51: 15
52: 0
53: 200
54: 200
55: 0
56: 0
57: 0
58: 0
59: 0
60: 0
61: 0
62: 9
63: 50
64: 0
65: 91
66: 91
67: 149
68: 26
69: 0
70: 0
71: 0
72: 0
73: 0
74: 10
75: 19
76: 0
77: 100
78: 100
79: 0
80: 0
81: 0
82: 0
83: 0
84: 0
85: 0
86: 11
87: 18
88: 0
89: 100
90: 100
91: 0
92: 0
93: 0
94: 0
95: 0
96: 0
97: 0
98: 12
99: 50
100: 0
101: 96
102: 96
103: 240
104: 16
105: 0
106: 0
107: 0
108: 0
109: 0
110: 194
111: 34
112: 0
113: 110
114: 80
115: 33
116: 0
117: 0
118: 0
119: 0
120: 0
121: 0
122: 196
123: 50
124: 0
125: 200
126: 200
127: 0
128: 0
129: 0
130: 0
131: 0
132: 0
133: 0
134: 197
135: 18
136: 0
137: 200
138: 200
139: 0
140: 0
141: 0
142: 0
143: 0
144: 0
145: 0
146: 198
147: 16
148: 0
149: 200
150: 200
151: 0
152: 0
153: 0
154: 0
155: 0
156: 0
157: 0
158: 199
159: 62
160: 0
161: 200
162: 200
163: 0
164: 0
165: 0
166: 0
167: 0
168: 0
169: 0
170: 200
171: 9
172: 0
173: 200
174: 200
175: 0
176: 0
177: 0
178: 0
179: 0
180: 0
181: 0
182: 0
183: 0
184: 0
185: 0
186: 0
187: 0
188: 0
189: 0
190: 0
191: 0
192: 0
193: 0
194: 0
195: 0
196: 0
197: 0
198: 0
199: 0
200: 0
201: 0
202: 0
203: 0
204: 0
205: 0
206: 0
207: 0
208: 0
209: 0
210: 0
211: 0
212: 0
213: 0
214: 0
215: 0
216: 0
217: 0
218: 0
219: 0
220: 0
221: 0
222: 0
223: 0
224: 0
225: 0
226: 0
227: 0
228: 0
229: 0
230: 0
231: 0
232: 0
233: 0
234: 0
235: 0
236: 0
237: 0
238: 0
239: 0
240: 0
241: 0
242: 0
243: 0
244: 0
245: 0
246: 0
247: 0
248: 0
249: 0
250: 0
251: 0
252: 0
253: 0
254: 0
255: 0
256: 0
257: 0
258: 0
259: 0
260: 0
261: 0
262: 0
263: 0
264: 0
265: 0
266: 0
267: 0
268: 0
269: 0
270: 0
271: 0
272: 0
273: 0
274: 0
275: 0
276: 0
277: 0
278: 0
279: 0
280: 0
281: 0
282: 0
283: 0
284: 0
285: 0
286: 0
287: 0
288: 0
289: 0
290: 0
291: 0
292: 0
293: 0
294: 0
295: 0
296: 0
297: 0
298: 0
299: 0
300: 0
301: 0
302: 0
303: 0
304: 0
305: 0
306: 0
307: 0
308: 0
309: 0
310: 0
311: 0
312: 0
313: 0
314: 0
315: 0
316: 0
317: 0
318: 0
319: 0
320: 0
321: 0
322: 0
323: 0
324: 0
325: 0
326: 0
327: 0
328: 0
329: 0
330: 0
331: 0
332: 0
333: 0
334: 0
335: 0
336: 0
337: 0
338: 0
339: 0
340: 0
341: 0
342: 0
343: 0
344: 0
345: 0
346: 0
347: 0
348: 0
349: 0
350: 0
351: 0
352: 0
353: 0
354: 0
355: 0
356: 0
357: 0
358: 0
359: 0
360: 0
361: 0
 
I am trying to write a method that reliably determines if the value is probably Fahrenheit, or probably Celsius.

First, as you mentioned, it's not standardized. However, according to this, there is a standardized "this value is bad" bit that you could read. First, you need to read the threshold values. This isn't standardized, so different manufacturers may have different ways of doing this (I don't know - I haven't played with SMART). But once you've got those values, compare the current value to the threshold. If v < t, then you're in an unstable condition, and go to page 5. If you have the bytes from a particular drive attribute in a byte array named status, you'd check status[1] & (2 << 0) against zero. If that comparison is true (that is, the bit is set to zero), the status is critical; otherwise it is expected to go critical in 24 hours.

Why is this the case? One would think that if the value is less than the threshold, it's a good thing, right? Well, SMART values are normalized to make it easy to see where the problems are. Thus, big values are universally better than small ones. So the drive gets the temperature in whatever scale, then subtracts from 255 and returns that as the SMART value. Try this yourself - put a fan blowing over a drive, and after 15 minutes measure its temperature. Then put it in a small, non-ventilated box, and after 15 minutes check it again. The value for temperature should have gone *down*. If you put a thermometer in the box with it, you may be able to get a decent approximation of what one degree C or F means to the output of SMART.
 
Here's how I parsed the output given above:
Code:
(16, 0) : SMART version, vendor-specific

(1, 15, 0, 200, 200, 0, 0, 0, 0, 0, 0, 0) Attribute entry 1
(3, 3,  0, 181, 163, 116, 7, 0, 0, 0, 0, 0) Attribute entry 2
(4, 50, 0, 96, 96, 253, 16, 0, 0, 0, 0, 0) Attribute entry 3
(5, 51, 0, 200, 200, 0, 0, 0, 0, 0, 0, 0) Attribute entry 4
(7, 15, 0, 200, 200, 0, 0, 0, 0, 0, 0, 0) (etc)
(9, 50, 0, 91, 91, 149, 26, 0, 0, 0, 0, 0)
(10, 19, 0, 100, 100, 0, 0, 0, 0, 0, 0, 0)
(11, 18, 0, 100, 100, 0, 0, 0, 0, 0, 0, 0)
(12, 50, 0, 96, 96, 240, 16, 0, 0, 0, 0, 0)
(194, 34, 0, 110, 80, 33, 0, 0, 0, 0, 0, 0)
(196, 50, 0, 200, 200, 0, 0, 0, 0, 0, 0, 0)
(197, 18, 0, 200, 200, 0, 0, 0, 0, 0, 0, 0)
(198, 16, 0, 200, 200, 0, 0, 0, 0, 0, 0, 0)
(199, 62, 0, 200, 200, 0, 0, 0, 0, 0, 0, 0)
(200, 9, 0, 200, 200, 0, 0, 0, 0, 0, 0, 0)
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

(rest zeroes, therefore invalid, therefore omitted)
The entry for C2h, as you mentioned, is (one of) the temperature measuring attributes.
Code:
(194, 34, 0, 110, 80, 33, 0, 0, 0, 0, 0, 0)
code  flags  val  <--- vendor-specific --->
Wikipedia agrees with me on the reversing:
Note that the attribute values are always mapped to the range of 1 to 253 in a way that means higher values are better.
So 33 may well be the actual temperature, but you can't rely on that, because different vendors are allowed to do it different ways. 110 is the value you need to check, and 80 may be the threshold in this case, but again, you can't count on that.
 
Thanks for this info...the way you parsed the output makes sense--first 2 bytes meta data identify smart version.

I just opened the link to pdf you sent. Man, this is a gold mine of info! :D Not easy to find, either.

Thanks,

-hamfiles-
 
OK, I got it working OK. I left out temp scale, and just return value. I only wanted it to see what my temps are.

I might add smart data, but I am too tired tonite.

Application queries smart data every 4 minutes, and show temps. Icon(s) of HDD's sit in system tray, next to clock and speaker icons.

Just finished compiling, only has 1 right click menu item, "Exit".

If anyone interested, you can download the install file here [deleted]
 
Woops, found an error. I removed the files. Wil upload again tonight, after i fix propblem.
 
OK, I give up! I can't decipher the 3 values the #@$% Maxtor hard drives return. :mad: If I had more time, I would get it done, but I am finished w/ this project, for now. Drawing the system tray icon w/ temperature was fun :D , but parsing the SMART data sucks.

The application returns correct temps for all Western Digital hard drives, and most other brands, but not some laptop ones, and definitely not Maxtor.

Here is a link to my humble application, HDD.exe:

http://www.geocities.com/mattfomich/HDD/HardDriveMonitor.htm

Plz let me know if this works for your hard drive or not, by posting a comment in the guest book. Thanks.

-hamfiles-
 
recognized my ide seagates but not my sata seagates, and returned a temp of 0 degrees on both ide seagates. also, crashed after a few seconds

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at HardDriveMonitor.DriveTemp.GetTemperatures()
at HardDriveMonitor.DriveTemp.MainTimer_Tick(Object sender, EventArgs e)
at System.Windows.Forms.Timer.OnTick(EventArgs e)
at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
HardDriveMonitor
Assembly Version: 1.0.2601.24395
Win32 Version: 1.0.2601.24395
CodeBase: file:///C:/Documents&#37;20and%20Settings/Me/Desktop/HDD.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Management
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Management/2.0.0.0__b03f5f7f11d50a3a/System.Management.dll
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 8.0.0.0
Win32 Version: 8.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
 
Sorry about that. I deleted the page, and I won't post this again, until it works properly.
 
don't be sorry. i have no idea how to make software. good job! look forward to your next attempt :)
 
Open to some peer code review? Post your source and I'll take a look at it.
 
Back
Top