1. A system comprising: one or more storage devices comprising a first memory block and a second memory block configured to maintain data, wherein the first memory block comprises a prior snapshot and the second memory block comprises a current snapshot of data stored in the first memory block; an interface configured to provide communication with a remote storage device; a memory controller in communication with the one or more storage devices and the interface, the memory controller configured to: receive the prior snapshot and the current snapshot from the one or more storage devices; perform a commutative binary operator on the prior snapshot and the current snapshot to generate a combined snapshot; and cause the combined snapshot to be stored in the one or more storage devices and the remote storage device, wherein the combined snapshot can be used to recover any lost data when the one or more storage devices or the remote storage device is inoperative; wherein the remote storage device configured to maintain a full-clone snapshot of the one or more storage devices for a first time instance, a first combined snapshot of a second time instance, and a second combined snapshot of a third time instance, wherein the one or more storage devices is configured to maintain data associated with the third time instance, the first combined snapshot of the second time instance, and the second combined snapshot of the third time instance; and wherein the memory controller is caused to recover data for the second time instance when the remote storage device is inoperative, the memory controller being configured to: retrieve the second combined snapshot of the third time instance from the one or more storage devices, wherein the second combined snapshot is indicative of at least one memory block that has changed value between the second time instance and the third time instance; perform an inverse commutative binary operator on the second combined snapshot of the third time instance and the at least one memory block of the data associated with the third time instance to recover a prior snapshot of the third time instance; and substitute the at least one memory block of the data based on the prior snapshot of the third time instance to recover the data for the second time instance.