# US 10,769,024 B2 · Incremental transfer with unused data block reclamation

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 10,769,024 B2
- Document ID: US10769024B2
- Status: Granted
- Kind: B2
- Application number: 14/861,310
- Filed: 2015-09-22
- Published: 2017-02-02
- Granted: 2020-09-08
- Earliest claimed: 2015-07-31
- Assignees: NetApp, Inc.
- Applicants: NetApp Inc.
- Inventors: Ananthan Subramanian; Rimas Svarcas; Ram Kesavan; Srishylam Simharajan; John Frederick Destefano
- Web page: https://patentgrep.com/patent/US10769024B2

## CPC

- G06F 11/1451: {by selection of backup contents}
- G06F 3/0608: {Saving storage space on storage systems}
- G06F 3/064: {Management of blocks}
- G06F 3/067: {Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]}
- G06F 16/128: {Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion (error detection or correction of the data by redundancy in operations or in hardware G06F11/14, G06F11/16)}
- G06F 2201/80: Database-specific techniques
- G06F 2201/84: Using snapshots, i.e. a logical point-in-time copy of the data
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

One or more techniques and/or systems are provided for incremental transfer with unused data block reclamation. For example, source volume of a source storage filer may have a physical replication relationship with a destination volume of a destination storage filer. Snapshots of a file system of the source volume may be used to identify new data blocks (e.g., data blocks allocated or reallocated to a new snapshot) and/or unused data blocks (e.g., data blocks of a deleted snapshot) used to incrementally update the destination volume so that the destination volume is a mirrored replication of the source volume. In this way, new data blocks may be updated and unused data blocks may be punched out (e.g., deallocated) of the destination volume during execution of an incremental update.

## Claims

### Claim 1

A method comprising:
determining that a transfer utilized a base snapshot of a source volume hosted by a first node for replication of blocks to a destination volume hosted by a second node, where a snapshot of the source volume is deleted after the transfer and a new snapshot of the source volume is created subsequent the transfer;
identifying a set of new blocks, allocated to the new snapshot, to transfer to the destination volume by a subsequent transfer based upon a comparison of a first active map of the base snapshot and a second active map of the new snapshot;
identifying a set of unused blocks, previously allocated to the snapshot, deleted from the source volume based upon a comparison of the first active map and a first summary map of the base snapshot with the second active map and a second summary map of the new snapshot, wherein the identifying comprises:
including a block within the set of unused blocks based upon the active and summary maps indicating that the block was unallocated to the base snapshot and unallocated to at least one snapshot of the source volume when the base snapshot was captured, and indicating that the block was unallocated to the new snapshot and unallocated to at least one snapshot of the source volume when the new snapshot was captured; and
performing the subsequent transfer to transmit the set of new blocks to the second node to write to the destination volume, wherein the subsequent transfer instructs the second node to deallocate the set of unused blocks from the destination volume during execution of the subsequent transfer to write the set of new blocks to the destination volume.

### Claim 2 (depends on 1)

The method of claim 1, comprising:
removing the set of unused blocks concurrently during execution of the subsequent transfer for writing the set of new blocks.

### Claim 3 (depends on 1)

The method of claim 1, comprising:
determining that a first block was unallocated to the snapshot deleted from the source volume based the first active map indicated that the first block was unallocated to the base snapshot when the base snapshot was captured and the first summary map indicating that the first block was unallocated to at least one snapshot of the source volume when the base snapshot was captured.

### Claim 4 (depends on 1)

The method of claim 1, comprising:
determining that a first block belonged to the base snapshot and was unallocated to the snapshot that was deleted from the source volume based upon the first active map indicating that the first block was allocated to the base snapshot when the base snapshot was captured.

### Claim 5 (depends on 1)

The method of claim 1, comprising:
determining that a first block was previously allocated to the snapshot and is currently allocated to the new snapshot based upon the first active map indicating that the first block was unallocated to the base snapshot when the base snapshot was captured, the first summary map indicating that the first block was allocated to at least one snapshot of the source volume when the base snapshot was captured, and the second active map indicating that the first block was allocated to the new snapshot when the new snapshot was captured.

### Claim 6 (depends on 1)

The method of claim 1, comprising:
determining that a first block was previously allocated to the snapshot and is now an unused block for inclusion within the set of unused blocks based upon the first active map indicating that the first block was unallocated to the base snapshot when the base snapshot was captured, the first summary map indicating that the first block was allocated to at least one snapshot of the source volume when the base snapshot was captured, the second active map indicating that the first block was unallocated to the new snapshot when the new snapshot was captured, and the second summary map indicating that the first block was unallocated to at least one snapshot of the source volume when the new snapshot was captured.

### Claim 7 (depends on 1)

The method of claim 1, comprising:
determining that a first block is to be further evaluated for determination as to whether the first block is an unused data block during a subsequent incremental transfer based upon the first active map indicating that the first block was unallocated to the base snapshot when the base snapshot was captured, the first summary map indicating that the first block was allocated to at least one snapshot of the source volume when the base snapshot was captured, the second active map indicating that the first block was unallocated to the new snapshot when the new snapshot was captured, and the second summary map indicating that the first block was allocated to at least one snapshot of the source volume when the new snapshot was captured.

### Claim 8 (depends on 1)

The method of claim 1, wherein the first active map comprises a bitmap specifying whether blocks of the source volume were used by the base snapshot when the base snapshot was captured.

### Claim 9 (depends on 1)

The method of claim 1, wherein the second active map comprises a bitmap specifying whether blocks of the source volume were used by the new snapshot when the new snapshot was captured.

### Claim 10 (depends on 1)

The method of claim 1, wherein the first summary map comprises a logical OR bitmap of active maps of snapshots of the source volume when the base snapshot was captured.

### Claim 11 (depends on 1)

The method of claim 1, wherein the second summary map comprises a logical OR bitmap of active maps of snapshots of the source volume when the new snapshot was captured.

### Claim 12

A non-transitory machine readable medium having stored thereon machine executable code which when executed by a machine, causes the machine to:
determine that a transfer utilized a base snapshot of a source volume hosted by a first node for replication of blocks to a destination volume hosted by a second node, where a snapshot of the source volume is deleted after the transfer and a new snapshot of the source volume is created subsequent the transfer;
identify a set of new blocks, allocated to the new snapshot, to transfer to the destination volume by a subsequent transfer based upon a comparison of a first active map of the base snapshot and a second active map of the new snapshot;
identify a set of unused blocks, previously allocated to the snapshot, deleted from the source volume based upon a comparison of the first active map and a first summary map of the base snapshot with the second active map and a second summary map of the new snapshot, comprising:
excluding a block from the set of unused blocks based upon the active and summary maps indicating that the block was unallocated to the base snapshot and allocated to at least one snapshot of the source volume when the base snapshot was captured, and indicating that the block was allocated to the new snapshot when the new snapshot was captured; and
perform the subsequent transfer to transmit the set of new blocks to the second node to write to the destination volume, wherein the subsequent transfer instructs the second node to deallocate the set of unused blocks from the destination volume during execution of the subsequent transfer to write the set of new blocks to the destination volume.

### Claim 13 (depends on 12)

The non-transitory machine readable medium of claim 12, wherein the machine executable code causes the machine to:
remove the set of unused blocks concurrently during execution of the subsequent transfer for writing the set of new blocks.

### Claim 14

A computing device comprising:
a memory comprising machine executable code; and
a processor coupled to the memory, the processor configured to execute the machine executable code to cause the processor to:
determine that a transfer utilized a base snapshot of a source volume hosted by a first node for replication of blocks to a destination volume hosted by a second node, where a snapshot of the source volume is deleted after the transfer and a new snapshot of the source volume is created subsequent the transfer;
identify a set of new blocks, allocated to the new snapshot, to transfer to the destination volume by a subsequent transfer based upon a comparison of a first active map of the base snapshot and a second active map of the new snapshot;
identify a set of unused blocks, previously allocated to the snapshot, deleted from the source volume based upon a comparison of the first active map and a first summary map of the base snapshot with the second active map and a second summary map of the new snapshot, comprising:
identifying a block for further evaluation during a subsequent incremental transfer based upon the active and summary maps indicating that the block was unallocated to the base snapshot and allocated to at least one snapshot of the source volume when the base snapshot was captured, and indicating that the block was unallocated to the new snapshot and allocated to at least one snapshot of the source volume when the new snapshot was captured; and
perform the subsequent transfer to transmit the set of new blocks to the second node to write to the destination volume, wherein the subsequent transfer instructs the second node to deallocate the set of unused blocks from the destination volume during execution of the subsequent transfer to write the set of new blocks to the destination volume.

### Claim 15 (depends on 14)

The computing device of claim 14, wherein the machine executable code causes the processor to:
determine that a first block was unallocated to the snapshot deleted from the source volume based the first active map indicated that the first block was unallocated to the base snapshot when the base snapshot was captured and the first summary map indicating that the first block was unallocated to at least one snapshot of the source volume when the base snapshot was captured.

### Claim 16 (depends on 14)

The computing device of claim 14, wherein the machine executable code causes the processor to:
determine that a first block belonged to the base snapshot and unallocated to the snapshot that was deleted from the source volume based upon the first active map indicating that the first block was allocated to the base snapshot when the base snapshot was captured.

### Claim 17 (depends on 14)

The computing device of claim 14, wherein the machine executable code causes the processor to:
determine that a first block was previously allocated to the snapshot and is currently allocated to the new snapshot based upon the first active map indicating that the first block was unallocated to the base snapshot when the base snapshot was captured, the first summary map indicating that the first block was allocated to at least one snapshot of the source volume when the base snapshot was captured, and the second active map indicating that the first block was allocated to the new snapshot when the new snapshot was captured.

### Claim 18 (depends on 14)

The computing device of claim 14, wherein the machine executable code causes the processor to:
determine that a first block was previously allocated to the snapshot and is now an unused block for inclusion within the set of unused blocks based upon the first active map indicating that the first block was unallocated to the base snapshot when the base snapshot was captured, the first summary map indicating that the first block was allocated to at least one snapshot of the source volume when the base snapshot was captured, the second active map indicating that the first block was unallocated to the new snapshot when the new snapshot was captured, and the second summary map indicating that the first block was unallocated to at least one snapshot of the source volume when the new snapshot was captured.

### Claim 19 (depends on 14)

The computing device of claim 14, wherein the machine executable code causes the processor to:
determine that a first block is to be further evaluated for determination as to whether the first block is an unused block during a subsequent incremental transfer based upon the first active map indicating that the first block was unallocated to the base snapshot when the base snapshot was captured, the first summary map indicating that the first block was allocated to at least one snapshot of the source volume when the base snapshot was captured, the second active map indicating that the first block was unallocated to the new snapshot when the new snapshot was captured, and the second summary map indicating that the first block was allocated to at least one snapshot of the source volume when the new snapshot was captured.

### Claim 20 (depends on 14)

The computing device of claim 14, wherein the machine executable code causes the processor to:
remove the set of unused blocks concurrently during execution of the subsequent transfer for writing the set of new blocks.
