Summary

  • RFC 1514 described hrStorageTable as logical storage with fixed limits, measured as usable by a requesting entity rather than as the raw capacity of a physical device.
  • Its size and used values were counts of hrStorageAllocationUnits; a naked integer could not be interpreted as bytes without the companion unit.
  • Separate device, disk, partition and file-system tables preserved other layers, while zero-valued links could mean that an association was unavailable, not that storage did not exist.

Two correct capacities

Imagine a management station opening two panes for the same host. One pane follows the disk controller and reports the capacity of a long-term storage device. The other follows a pool from which an application can actually allocate data. It excludes formatting and file-system reference information. It may stop at a fixed quota. It may represent a partition, a mounted file system, a segment of memory or swap. The second figure can be smaller without contradicting the first.

The operational mistake arrives later. An exporter calls both fields “disk size,” drops the row type and unit, and sends only two integers to a dashboard. The dashboard treats the mismatch as missing capacity. Nothing in the original observation justified that conclusion. The evidence was flattened before it was compared.

RFC 1514 prevented this category error in the vocabulary of SNMP. The Host Resources MIB sought common objects for personal computers and Unix-like systems without making one operating system's inventory model universal. Its solution was not to pretend every platform exposed the same physical hierarchy. It defined conceptual tables and stated whose view each table represented.

A pool seen from the requesting side

The decisive paragraph sits in the description of hrStorageTable. An entry belonged there for each allocated logical storage area with fixed resource limits. The quantity represented was the amount actually usable by the requesting entity, excluding space consumed by formatting or file-system reference information. These were areas as an application might see them, rather than physical storage entities ordinarily seen by an operating system.

That wording makes “capacity” relational. The value does not describe matter in the abstract. It describes what a particular allocation surface can offer under its own rules. A formatted medium still physically contains the sectors used for metadata, but those sectors are not available to the application as payload storage. A quota can constrain one logical area while the underlying device has room elsewhere. Swap, buffer pools and RAM segments can behave as storage without being disks at all.

The table also had an admission rule. Tapes or floppies without file systems usually did not appear merely because they existed as media: the operating system did not normally allocate them in chunks to requesting applications. Physical presence was therefore insufficient. The table selected resources that participated in the logical allocation contract it was meant to diagnose.

The unit travelled with the number

Each storage row supplied hrStorageAllocationUnits, the byte size of the objects allocated from that pool. A pool measured in sectors, blocks, buffers or packets would commonly use a unit greater than one. hrStorageSize and hrStorageUsed then reported counts of those units.

The arithmetic is simple only after the semantics are intact. Represented bytes equal the count multiplied by the allocation unit. A collector that saves hrStorageSize but discards hrStorageAllocationUnits has not saved capacity; it has saved an unscaled coordinate. If a row's unit changes while its identity is assumed stable, even a clean time series can manufacture a jump.

This was not an awkward encoding detail. It let heterogeneous hosts expose storage without forcing every pool into byte-sized allocation. The common layer defined how to interpret the pair. The underlying system retained its local allocation choices.

The disk had its own table

RFC 1514 did not erase physical inventory. The device group described devices contained by the host, with specific tables for processors, network interfaces, printers and disks. The disk-storage table described long-term storage devices and gave capacity in kilobytes. Partition and file-system tables added their own identities and relationships.

Those tables could be joined, but a join was an assertion rather than a law of nature. hrPartitionFSIndex could be zero when a partition held no file system or when file-system information was unavailable. hrFSStorageIndex pointed from a local file system to the logical storage row useful for usage and out-of-space diagnosis; it too could be zero when no such information was available.

Zero did not prove the absence of backing media. It marked the absence of a usable relationship in this management view. Inventing a link would make a more complete diagram and a less truthful record.

A failure counter was not a loss ledger

hrStorageAllocationFailures counted requests the represented pool could not honor because it lacked sufficient storage. The field could help distinguish a quiet high-utilization pool from one already refusing allocations. It still did not name the requesting process, bytes denied, user impact, duration, recovery or data loss.

The original object used the SNMP Counter type, which had no defined initial value, although RFC 1514 recommended initialization to zero. RFC 2790 retained the warning and made the consumer's duty sharper: management stations must not depend on that initialization. A single reading therefore could not prove how many failures had occurred since boot, installation or any other assumed origin. Useful claims required a continuous epoch and deltas between observations.

This is adjacent to, but different from, the capacity model. The size fields defined the pool's represented limit; the counter observed refused requests. Neither field could stand in for the other, and neither established business or user outcome.

Writable did not mean authorized

RFC 1514 introduced its MIB by distinguishing protocol access from administrative authorization. An object's read-write access said that writing made protocol sense; it did not decide who was allowed to write. hrStorageSize was read-write, but that syntax was not a universal remote command to resize every disk.

RFC 2790 clarified the intended control surface. Resizing applied only where the operation made sense and the underlying system could perform it—for example, changing memory assigned to a buffer pool or disk space assigned to virtual memory. Capability remained local. Authorization remained an administrative decision. The common schema described a possible operation without inventing a sovereign manager above the host.

The successor RFC also warned that readable Host Resources objects could expose sensitive configuration and performance data and that writable objects could alter host behavior. This was a substantial advance over RFC 1514's statement that security issues were not discussed. Yet the underlying separation was already visible in 1993: syntax, implementation and authority were different facts.

The model survived its replacement

RFC 2790 obsoleted RFC 1514 in 2000 and moved the module into SMIv2 form. It did not collapse the storage table into the disk inventory. It preserved the language of logical areas, fixed limits, requesting-entity usability and exclusion of formatting overhead. It kept allocation units, optional file-system association and the separate device hierarchy.

That continuity is the historical result. The Internet management framework did not need every host to share one internal ontology. It needed each host to publish enough structure for a remote manager to know what a number meant. Interoperability came from a narrow contract around type, unit and relationship—not from pretending that a label such as “capacity” erased local reality.

For present-day readers, the lesson reaches beyond SNMP. Metrics become portable only when their conditions travel with them. Preserve the represented layer, row identity, unit, association and epoch. A dashboard may then compare physical provision, logical limits, usable space and refusal events without turning one into another. If those fields are discarded, later precision cannot reconstruct the missing meaning.

Sources