A method for reading data in a block-level single-instance storage system
may involve receiving a first address of a data block, retrieving a
signature corresponding to the first address, and reading data from a
second address corresponding to the signature. A storage system may
include a storage manager and first and second lookup tables. The storage
manager may interface with an application (such as a database system or a
file system) that uses a first set of identifiers for data blocks. The
storage manager may use a second set of identifiers for the data blocks,
and translates between the first and second identifiers using the lookup
tables. The first lookup table indexes data block signatures according to
the first set of identifiers. The second lookup table indexes the second
set of identifiers according to the data block signatures. The second
lookup table may be pruned to provide single instance storage.