Object storage device
|This article does not cite any references or sources. (September 2011)|
An Object-based Storage Device (OSD) is a computer storage device, similar to disk storage but working at a higher level. Instead of providing a block-oriented interface that reads and writes fixed sized blocks of data, an OSD organizes data into flexible-sized data containers, called objects. Each object has both data (an uninterpreted sequence of bytes) and metadata (an extensible set of attributes describing the object). The command interface to the OSD includes commands to create and delete objects, write bytes and read bytes to and from individual objects, and to set and get attributes on objects. The OSD is responsible for managing the storage of objects and their metadata. The OSD implements a security mechanism that provides per-object and per-command access control.
Several research projects have explored object storage and implemented prototype systems with various semantics. The early research spawned a standardization effort that led to a standard OSD command set for SCSI.
The OSD Standard 
The SCSI command set for Object Storage Devices was developed by a working group of the Storage Networking Industry Association (SNIA) for the T10 committee of the International Committee for Information Technology Standards (INCITS). (T10 is responsible for all SCSI standards.) The initial OSD standard, "Object-based Storage Device Commands" (OSD), was approved in 2004.
In the OSD standard, objects are specified with a 64-bit partition ID and a 64-bit object ID. Partitions are created and deleted within an OSD, and objects are created and deleted within partitions. There are no fixed sizes associated with partitions or objects; they are allowed to grow subject to physical size limitations of the device or logical quota constraints on a partition.
An extensible set of attributes describe objects. Some attributes are implemented directly by the OSD, such as the number of bytes in an object and the modify time of an object. There is a special policy tag attribute that is part of the security mechanism. Other attributes are uninterpreted by the OSD. These are set on objects by the higher-level storage systems that use the OSD for persistent storage. For example, attributes might be used to classify objects, or to capture relationships among different objects stored on different OSDs.
A list command returns a list of identifiers for objects within a partition, optionally filtered by matches against their attribute values. A list command can also return selected attributes of the listed objects.
Read and write commands can be combined, or piggy-backed, with commands to get and set attributes. This ability reduces the number of times a high-level storage system has to cross the interface to the OSD, which can improve overall efficiency.
OSD Version 2 
Work continues on a second generation of the SCSI command set, "Object-Based Storage Devices - 2" (OSD-2). The main additions are support for snapshots, collections of objects, and improved error handling.
A snapshot is a point in time copy of all the objects in a partition into a new partition. The OSD can implement a space-efficient copy using copy-on-write techniques so that the two partitions share objects that are unchanged between the snapshots, or the OSD might physically copy the data to the new partition. The standard defines clones, which are writeable, and snapshots, which are read-only.
A collection is a special kind of object that contains the identifiers of other objects. There are operations to add and delete from collections, and there are operations to get or set attributes for all the objects in a collection.
Collections are also used for error reporting. If an object becomes damaged by the occurrence of a media defect (i.e., a bad spot on the disk) or by a software error within the OSD implementation, its identifier is put into a special error collection. The higher-level storage system that uses the OSD can query this collection and take corrective action as necessary.
Research by Garth Gibson et al. on Network Attached Secure Disks (NASD) in the 1990s explored the ability to move more processing power closer to the disk drive in a network-attached storage environment. A more powerful processor could implement features such as space management (i.e., block allocation) and provide a more abstract interface of reading and writing bytes to flexible data containers. Access control was an important aspect of the research, and Howard Gobioff described a security protocol for object storage that allowed a security manager to provide fine-grained access control to a shared storage device on a network. The general goal of the research was to provide a higher-level building block that could be aggregated together to provide large scale, secure storage systems.
The first version of the OSD command set for SCSI was standardized in 2004. The second version of the command set (OSD-2) was finalized in late 2008 but remains stalled in the standardization process. OSD-3 is now in development.
See also 
- "SCSI Object-Based Storage Device Commands (OSD)" at the INCITS online store
- T10 OSD-2 and OSD-3 drafts (free to download until ratified as standards)
- "Object Based Storage" by Mesnier, Ganger, and Riedel, IEEE Communications Magazine, v.41 n.8 pp 84–90, August 2003.
- "Object-Based Storage Devices" by Christian Bandulet, Sun Developer Network, July 2007
- "Linux and object storage devices" by Jonathan Corbet, LWN.net, November 4, 2008
- open-osd project aims to develop production-quality open source implementations of OSD
- "New Kinds of Memory, New Kinds of Storage" by David Wagner, Dell.com, January 2011