SNMP Abfrage der Plattengröße bringt negative Werte

07/11/2008 - 10:38 von kschnippengerd | Report spam
Hallo zusammen,

ich hab' da mal ein Problem.

Folgendes Szenario:
Windows2003 RC2 Server mit einem SAN Laufwerk welches 10 TB groß ist. Dieser
Server wird per SNMP überwacht und beim Auslesen der tatsàchlichen
Plattengröße (hrStoragesize, .1.3.6.1.2.1.25.2.3.1.5.2) wird anstatt der
erwarteten 10 TB ein negativer Wert zurückgegeben (-1609637377). Dabei war es
nun egal ob die Abfragen nun aus dem SNMP Überwachungstool kamen oder direkt
aus SNMPUtil, der Wert war immer der gleiche und jeweils negativ.

Die INTEGER Variable scheint "signed" zu sein, so daß das oberste Bit als
Vorzeichenbit verwendet wird, dieses macht aber bei Plattengrößen keinen
Sinn, denn diese sollten eigentlich immer positiv sein.

Wenn man nun 2^32 zu diesem negativen Wert dazuaddiert und mit der
Blockgröße von 4096Byte multipliziert, kommt der korrekte Wert heraus. Das
kann aber eigentlich nicht die Lösung des Problems sein.

Hat irgendjemand schon mal Erfahrungen damit sammeln können, gibt es
vielleicht ein Patch Seitens Microsoft, welches diesen Fehler, der immer bei
Plattengrößen >8TB auftritt behebt.

Ich hoffe, daß mir irgendwer helfen kann, das Problem zu lösen.

Gruß

Klaus
 

Lesen sie die antworten

#1 Denis Jedig
07/11/2008 - 13:43 | Warnen spam
On Fri, 7 Nov 2008 01:38:01 -0800 kschnippengerd wrote:

Die INTEGER Variable scheint "signed" zu sein, so daß das oberste Bit als
Vorzeichenbit verwendet wird, dieses macht aber bei Plattengrößen keinen
Sinn, denn diese sollten eigentlich immer positiv sein.



RFC1514:
| HrStorageEntry ::= SEQUENCE {
| hrStorageIndex INTEGER,
| hrStorageType OBJECT IDENTIFIER,
| hrStorageDescr DisplayString,
| hrStorageAllocationUnits INTEGER,
| hrStorageSize INTEGER,
| hrStorageUsed INTEGER,
| hrStorageAllocationFailures Counter
| }

So ist die MIB nunmal definiert, daran kann man jetzt wenig àndern.

Wenn man nun 2^32 zu diesem negativen Wert dazuaddiert und mit der
Blockgröße von 4096Byte multipliziert, kommt der korrekte Wert heraus. Das
kann aber eigentlich nicht die Lösung des Problems sein.



Die Multiplikation erfolgt nicht mit der Blockgröße, sondern mit dem Wert
von hrStorageAllocationUnits.

Hat irgendjemand schon mal Erfahrungen damit sammeln können, gibt es
vielleicht ein Patch Seitens Microsoft, welches diesen Fehler, der immer bei
Plattengrößen >8TB auftritt behebt.



Es ist eben ein Überlauf im Datentyp und weil der Datentyp nicht ohne
Weiteres zu àndern ist, damit ein systemimmanentes Problem. Ich denke
nicht, dass es da einen wirklichen Patch geben kann - ggf. existiert eine
Vendor-specific MIB, welche den Wert in einem anderen Datentyp zurückgeben
kann.

Denis Jedig
syneticon networks GbR http://syneticon.net/service/

Ähnliche fragen