A method for managing access to a multi-device composite data storage system, the method comprising: managing a first data structure storing data for each unit in a first set of units on a first non-volatile data storage device, wherein for each unit in the first set of units, the data structure includes a value indicating a count of recent accesses and pinned status for the unit and wherein managing the first data structure comprises receiving a request to access a first logical block on the multi-device composite data storage system, accessing the first logical block from a first unit in the first set of units on the first non-volatile data storage device, and updating the count of recent accesses for the first unit; and managing a second data structure that probabilistically indicates whether a second unit on a second non-volatile data storage device has received at least a predetermined number of recent accesses, wherein the second data structure is a probabilistic hash table and each unit on the first and second non-volatile data storage device includes multiple logical blocks, wherein managing the second data structure comprises receiving a request to access a second logical block on the multi-device composite data storage system, searching the second data structure for the signature of the second unit on the second non-volatile data storage device, the second unit containing the second logical block, and migrating the second unit to the first non-volatile data storage device, and wherein migrating the second unit to the first non-volatile data storage device includes moving the multiple logical blocks contained in the second unit as a single unit, wherein the first data structure and the second data structure are used to manage migration of data between the first non-volatile storage device and the second non-volatile storage device. managing a first data structure storing data for each unit in a first set of units on a first non-volatile data storage device, wherein for each unit in the first set of units, the data structure includes a value indicating a count of recent accesses and pinned status for the unit and wherein managing the first data structure comprises receiving a request to access a first logical block on the multi-device composite data storage system, accessing the first logical block from a first unit in the first set of units on the first non-volatile data storage device, and updating the count of recent accesses for the first unit; and managing a second data structure that probabilistically indicates whether a second unit on a second non-volatile data storage device has received at least a predetermined number of recent accesses, wherein the second data structure is a probabilistic hash table and each unit on the first and second non-volatile data storage device includes multiple logical blocks, wherein managing the second data structure comprises receiving a request to access a second logical block on the multi-device composite data storage system, searching the second data structure for the signature of the second unit on the second non-volatile data storage device, the second unit containing the second logical block, and migrating the second unit to the first non-volatile data storage device, and wherein migrating the second unit to the first non-volatile data storage device includes moving the multiple logical blocks contained in the second unit as a single unit, wherein the first data structure and the second data structure are used to manage migration of data between the first non-volatile storage device and the second non-volatile storage device.