A method for restoring a storage volume to a previous state, comprising: initiating a first restore operation to return a state of a master storage volume to a previous state represented by a first snapshot of the master storage volume, wherein the restore operation comprises setting a restore marker for each data chunk in the master storage volume for which restore processing has been completed; immediately following initiation of the first restore operation, reading data from the master storage volume, wherein the data read from the master storage volume is in the state represented by the first snapshot of the master storage volume: while the restore operation is in progress, receiving from a host a first data chunk comprising a number of logical data blocks for writing to a first target address comprising an LBA range in the master storage volume; characterized by: after receiving the first data chunk, determining whether the first target address contains an existing data chunk that has been restored to the state represented by the first snapshot by determining whether a restore marker has been set for the existing data chunk; in response to determining that the first target address contains a data chunk that has been restored to the state represented by the first snapshot; writing the first chunk of data to the first target address in the master storage volume wherein the restored data chunk at the master storage volume is overwritten; and in response to determining that the first target address contains an existing data chunk that has not been restored to the state represented by the first snapshot; moving the data chunk for the first target address maintained as part of the first snapshot to the target address in the master storage volume, wherein on completion of moving the data chunk the first target address contains a restored data chunk; writing the first chunk of data to the first target address in the master storage volume, wherein the restored data chunk at the master storage volume is overwritten. initiating a first restore operation to return a state of a master storage volume to a previous state represented by a first snapshot of the master storage volume, wherein the restore operation comprises setting a restore marker for each data chunk in the master storage volume for which restore processing has been completed; immediately following initiation of the first restore operation, reading data from the master storage volume, wherein the data read from the master storage volume is in the state represented by the first snapshot of the master storage volume: while the restore operation is in progress, receiving from a host a first data chunk comprising a number of logical data blocks for writing to a first target address comprising an LBA range in the master storage volume; characterized by: after receiving the first data chunk, determining whether the first target address contains an existing data chunk that has been restored to the state represented by the first snapshot by determining whether a restore marker has been set for the existing data chunk; in response to determining that the first target address contains a data chunk that has been restored to the state represented by the first snapshot; writing the first chunk of data to the first target address in the master storage volume wherein the restored data chunk at the master storage volume is overwritten; and in response to determining that the first target address contains an existing data chunk that has not been restored to the state represented by the first snapshot; moving the data chunk for the first target address maintained as part of the first snapshot to the target address in the master storage volume, wherein on completion of moving the data chunk the first target address contains a restored data chunk; writing the first chunk of data to the first target address in the master storage volume, wherein the restored data chunk at the master storage volume is overwritten. after receiving the first data chunk, determining whether the first target address contains an existing data chunk that has been restored to the state represented by the first snapshot by determining whether a restore marker has been set for the existing data chunk; in response to determining that the first target address contains a data chunk that has been restored to the state represented by the first snapshot; writing the first chunk of data to the first target address in the master storage volume wherein the restored data chunk at the master storage volume is overwritten; and in response to determining that the first target address contains an existing data chunk that has not been restored to the state represented by the first snapshot; moving the data chunk for the first target address maintained as part of the first snapshot to the target address in the master storage volume, wherein on completion of moving the data chunk the first target address contains a restored data chunk; writing the first chunk of data to the first target address in the master storage volume, wherein the restored data chunk at the master storage volume is overwritten.