A method executed on a client device for writing data to a storage pool that comprises a plurality of storage servers, the method comprising: receiving a virtual identifier,VID, and an offset for an object, wherein the VID comprises a node identifier, ID, and an object ID, wherein the node ID identifies a first storage server and the object ID uniquely identifies the object in the storage pool; extracting from the VID the node identifier and the object ID; hashing the VID to obtain a first hashed value; obtaining from the first storage server, using the first hashed value, an object layout, OL, for the object, wherein the OL comprises an OL sequence number, the VID, and a stripe width, wherein the stripe width corresponds to a unit of data that is sequentially transferred to the first storage server before advancing to a second storage server in a global namespace layout, GL, wherein the GL specifies, over the life of the storage pool, which of the plurality of storage servers in the storage pool are writeable and to which, of the plurality of servers that are writeable, data for a given object may be stored, wherein the GL includes a GL sequence number that uniquely identifies a version of the GL over the lifetime of the storage pool, wherein the OL sequence number is set when the object is created and corresponds to the GL sequence number of the GL when the object corresponding to the OL was created; hashing the object ID and an offset ID to obtain a second hashed value, wherein the offset ID is generated from the offset; identifying, using consistent hashing, a second storage server in the storage pool using the GL, the OL, and the second hashed value, wherein identifying the second storage server in the storage pool comprises: identifying a GL sequence number from the GL using the OL sequence number, determining, using the GL, which of the plurality of storage servers was writeable at the GL sequence number to obtain a subset of the plurality of storage servers, and identifying the second storage server from the subset of the plurality of storage servers; and issuing a write request to write data to the object in the second storage server, wherein the write request comprises the object ID and the offset. receiving a virtual identifier,VID, and an offset for an object, wherein the VID comprises a node identifier, ID, and an object ID, wherein the node ID identifies a first storage server and the object ID uniquely identifies the object in the storage pool; extracting from the VID the node identifier and the object ID; hashing the VID to obtain a first hashed value; obtaining from the first storage server, using the first hashed value, an object layout, OL, for the object, wherein the OL comprises an OL sequence number, the VID, and a stripe width, wherein the stripe width corresponds to a unit of data that is sequentially transferred to the first storage server before advancing to a second storage server in a global namespace layout, GL, wherein the GL specifies, over the life of the storage pool, which of the plurality of storage servers in the storage pool are writeable and to which, of the plurality of servers that are writeable, data for a given object may be stored, wherein the GL includes a GL sequence number that uniquely identifies a version of the GL over the lifetime of the storage pool, wherein the OL sequence number is set when the object is created and corresponds to the GL sequence number of the GL when the object corresponding to the OL was created; hashing the object ID and an offset ID to obtain a second hashed value, wherein the offset ID is generated from the offset; identifying, using consistent hashing, a second storage server in the storage pool using the GL, the OL, and the second hashed value, wherein identifying the second storage server in the storage pool comprises: identifying a GL sequence number from the GL using the OL sequence number, determining, using the GL, which of the plurality of storage servers was writeable at the GL sequence number to obtain a subset of the plurality of storage servers, and identifying the second storage server from the subset of the plurality of storage servers; and issuing a write request to write data to the object in the second storage server, wherein the write request comprises the object ID and the offset.