1. A storage system comprising: a first node of a plurality of storage nodes, the storage nodes including a plurality of storage devices allowing for storing immutable objects including data objects and index objects, the first node having instructions which when executed cause a first processor included in a first controller in the first node to perform actions including: receiving a storage request from a client of the system to store a data item evaluating whether the data item was earlier stored when the data item was not earlier stored, partitioning the data item into a plurality of data objects, each object including an object identifier, a timestamp and a data portion creating a first index object for the data item, the first index object including an index object identifier, a timestamp and a list of constituent data objects, the list of constituent data objects including an object identifier and a hash for each data object storing the first index object and the plurality of data objects providing an object identifier for the first index object to the client when the data item was earlier stored, determining which data objects of the data item have been modified creating data objects for only the data objects that have been modified creating a second index object for the data item including in the listing of constituent data objects information about the data objects from the first index object that have not been modified and information about new data objects that represent the data objects that have been modified, the second index object including a parent index object identifier of an earlier version of the data item incrementing a reference count value in the index object of the parent of the second index object identified by the parent index object identifier in the second index object storing the second index object and the new data objects providing a second object identifier for the second index object to the client.