Patent ID: 7664771

Claim:
In a data storage system comprising a file system and one or more disk volumes, each volume comprising files and blocks, wherein each file is implemented by a set of one or more blocks, wherein blocks currently implementing a file are occupied-space blocks and all other blocks are free-space blocks, a method comprising: on a computing device including a processor taking a snapshot of an original volume using a first differential snapshotter program that is configured to mediate between the file system and a block driver; wherein taking the snapshot includes creating a bitmap comprising a plurality of bit spaces, wherein each bit space corresponds to a respective block in the original volume, wherein each bit space is set either to an ignore value or to a protect value, and wherein initially a bit space is set to the ignore value when the respective block that corresponds to the bit space is a free-space block when the snapshot is taken, and a bit space is set to the protect value when the respective block that corresponds to the bit space is an occupied-space block when the snapshot is taken; wherein at a time of the snapshot of the original volume data remains occupied from the original volume to the snapshot of the original volume; the differential snapshotter program performing actions comprising: intercepting a move request by the file system to move data blocks in the original volume; preventing the move to occur until a determination is made as to the data in the data blocks is to be preserved; monitoring moves of occupied-space blocks in the original volume, wherein moving an occupied-space block comprises transferring contents from within the occupied-space block to a second block, which is one of the free-space blocks, the second block becoming an occupied-space block, and the first block becoming a free-space block; the differential snapshotter program performing actions comprising: intercepting a write request by the file system to write data blocks in the original volume; preventing the write to occur until a determination is made as to the data in the data blocks is to be preserved; monitoring writes of blocks in the original volume; wherein monitoring the writes of the blocks includes determining which blocks to protect by copy-on-write operations before the writing of the blocks such that data in that block is preserved and which blocks not to protect by the copy-on-write operations; wherein monitoring the moves and the writes comprises using the first program to intercept efforts by the file system to access blocks in the original volume; and producing a snapshot version of blocks in response to a read request using the information on which blocks to protect by the copy-on-write operations and which blocks not to protect.