SNMP Abfrage der Plattengröße bringt negative Werte

Die Abfrage der HD Groesse mit SNMP bei einem Windows Server2008r2 System liefert folgende Werte:

snmpbulkwalk -v 2c -c public <IP-Address>  .1.3.6.1.2.1.25.2.3

HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: C:\ Label:  Serial Number 2f04275b
HOST-RESOURCES-MIB::hrStorageDescr.2 = STRING: D:\ Label:Data_int  Serial Number b291f5cb
HOST-RESOURCES-MIB::hrStorageDescr.3 = STRING: E:\
HOST-RESOURCES-MIB::hrStorageDescr.4 = STRING: F:\ Label:Data_ext  Serial Number 9e94b203

 

MaxUnits pro Laufwerk:

snmpbulkwalk -v 2c -c public <IP-Address>  .1.3.6.1.2.1.25.2.3.1.5

HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 146481397
HOST-RESOURCES-MIB::hrStorageSize.2 = INTEGER: 1025516031
HOST-RESOURCES-MIB::hrStorageSize.3 = INTEGER: 0
HOST-RESOURCES-MIB::hrStorageSize.4 = INTEGER: -1950888193

Werte = Allocation units

Groesse der units:

HOST-RESOURCES-MIB::hrStorageAllocationUnits.1 = INTEGER: 4096 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.2 = INTEGER: 4096 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.3 = INTEGER: 0 Bytes
HOST-RESOURCES-MIB::hrStorageAllocationUnits.4 = INTEGER: 4096 Bytes

HD Groesse = units * 4096

c: 599.987.802.112 Bytes = 558 GB

d: 4.200.513.662.976 Bytes = 3,82 TB

e: DVD

f: error !

Bei Laufwerk F: kommt der „BUG“ das die Variable nur vom Format INTEGER ist.

Groesse des Laufwerkes F: gemaess Windows 9.601.348.005.888 Bytes = 8,73 TB

Gemaess eines Posts auf  https://social.technet.microsoft.com :

I ran into this problem.  To solve it when the number is negative I apply the following formula

(int32.MaxValue * 2) – Abs(SnmpReturn)) * AllocationUnits.

so on my 11TB array

( (2147483647*2) – abs(-1366779137)) * 4096 -> 11,993,858,691,072

 

Das ergibt in meinem Fall:

( (2147483647*2) – abs(-1950888193)) * 4096 = 9.601.347.997.696  –> gemaess Windows 9.601.348.005.888 Bytes = 8,73 TB

 

Das trifft den Wert ziemlich genau.

 

Die belegten Units des Laufwerkes bekommt man  mit:

snmpbulkwalk -v 2c -c public  <IP-Address> 1.3.6.1.2.1.25.2.3.1.6.1 = drive 1

HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 10898546

snmpbulkwalk -v 2c -c public  <IP-Address> 1.3.6.1.2.1.25.2.3.1.6.2 = drive 2

HOST-RESOURCES-MIB::hrStorageUsed.2 = INTEGER: 62561

snmpbulkwalk -v 2c -c public  <IP-Address> 1.3.6.1.2.1.25.2.3.1.6.4 = drive 4

HOST-RESOURCES-MIB::hrStorageUsed.4 = INTEGER: 95631

 

units*4096 = bytes

 

Mit diesen Werten kann nun die Diskbelegung ausgerechnet werden.

MaxUnits – belegten Units = Freie Units

Für das Laufwerk 1 [ C: ] ergibt das:

(146481397  –  10898546) * 4096 =  555.347.357.696 Bytes

Anzeige des Explorers:

drive_c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Zusatzinfos:

This uses the hrStorageTable .1.3.6.1.2.1.25.2.3

This table contains the details about disk and memory use on a windows device.

The table is broken down in to these components

hrStorageIndex .1.3.6.1.2.1.25.2.3.1.1 – A list of all the devices listed e.g. .1.3.6.1.2.1.25.2.3.1.1.1 wil return 1, .1.3.6.1.2.1.25.2.3.1.1.2 will return 2 etc up to the number of storage devices.

hrStorageType .1.3.6.1.2.1.25.2.3.1.2 – A list of the storage types (information not in my MIB)

hrStorageDescription .1.3.6.1.2.1.25.2.3.1.3 – A list of text description of the devices e.g. .1.3.6.1.2.1.25.2.3.1.3.1 returns „A:\“, .1.3.6.1.2.1.25.2.3.1.3.2 returns „C:\ Label: Serial Number xxxxxxx“

hrStorageAllocationUnits .1.3.6.1.2.1.25.2.3.1.4 – A list of the number of bytes per unit allocated to the device e.g. .1.3.6.1.2.1.25.2.3.1.4.2 returns 4096.

hrStorageSize .1.3.6.1.2.1.25.2.3.1.5 – A list of the capacity of the device in storage allocation units

hrStorageUsed .1.3.6.1.2.1.25.2.3.1.6 – A list of the number of storage allocation units used

hrStorageAlocationFailures .1.3.6.1.2.1.25.2.3.1.7 – Not sure on this item, maybe someone can supply details on this