1. A method for transferring an object O from a source host A to a target host B, comprising of: dividing the object O into multiple blocks; discovering hosts populated with objects, including hosts A and B, and dividing the objects into multiple blocks; identifying those hosts that have at least one of the blocks of object O; and providing the object O to host B by performing a piecewise reconstruction of the blocks of object O from identified hosts, each of the blocks of object O being transferred from an identified host that minimizes a cost function in transferring the block of object O to host B.