IP Library Granted Patent US 8,060,481
Granted Patent B1
US 8,060,481 · App. 11/439,302 · Granted Nov 15, 2011

Time indexed file system

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,060,481
App. No.
11/439,302
Granted
Nov 15, 2011
Kind
B1
Abstract

A method and mechanism for managing a time-indexed block map in a file system configured to store multiple versions of file data. A file system includes inodes or other structures corresponding to files in the system. Responsive to creating a file, one or more blocks are allocated for use in storing the file data. A block map is maintained for the file and is updated to include an identification of the blocks storing the file data and a timestamp corresponding to the stored data. In response to creating a file, data corresponding block map is maintained. In addition, a new entry is created in the block map which identifies the newly allocated blocks. Further, an entry of the block map is updated to (i) identify the particular blocks to which the write was directed and (ii) include a timestamp corresponding to the time of the write.

Claims (65)

1. A method for managing data in a file system, the method comprising:

allocating by a computing device one or more blocks for use in storing data corresponding to a file;

storing the file data in the blocks;

updating an inode corresponding to the file responsive to said allocating, the inode including attributes and an extent map corresponding to the file, the inode being configured to simultaneously identify multiple versions of the file corresponding to multiple points in time, wherein the update includes adding data to the inode which identifies the one or more blocks;

in response to detecting a write to the file, subsequent to said updating, is directed to particular blocks of the one or more blocks:

allocating one or more new blocks for use in storing data which corresponds to the file;

creating a new entry in the extent map of the inode which identifies the new blocks, said new entry being simultaneously maintained along with entries of the one or more entries in the extent map;

updating a first entry of the extent map to identify the particular blocks to which the write was directed and a time at which the write occurred;

wherein said extent map simultaneously maintains entries for multiple updates which have been made to the file at multiple points in time, and wherein each entry of the extent map includes a key comprising an offset to corresponding data within the file and a timestamp associated with a time of an update of a corresponding extent map entry;

in response to detecting the write corresponds to one or more blocks of an original extent:

splitting the original extent at a first block corresponding to the beginning of the write; and

splitting the original extent at a last block corresponding to the end of the write.

2. The method as recited in claim 1 , wherein the file system does not store multiple copies of a given block for a particular file which are common to multiple versions of the particular file.

3. The method as recited in claim 2 , wherein the first entry is the new entry, and wherein the method further comprises storing data corresponding to the write in the new blocks.

4. The method as recited in claim 2 , wherein the first entry is an entry corresponding to at least one of the particular blocks, and wherein the method further comprises:

copying the data from the particular blocks to the new blocks;

storing data corresponding to the write in the particular blocks; and

updating the new entry to identify at least one of the new blocks, and include an original timestamp corresponding to the data stored in a corresponding block.

5. The method as recited in claim 1 , wherein the first entry is the new entry and the new blocks comprise a new extent, and wherein the method further comprises storing data corresponding to the write in the new extent.

6. The method as recited in claim 1 , wherein the new blocks comprise a new extent and the first entry is an entry corresponding to at least one of the particular blocks, and wherein the method further comprises:

copying the data from the particular blocks to the new extent;

storing data corresponding to the write in the particular blocks; and

updating the new entry to identify the new extent, and include an original timestamp corresponding to the data stored in a corresponding block.

7. The method as recited in claim 1 , wherein the extent map is stored in a B-tree, wherein each node of the B-tree includes a key comprising an offset and a timestamp associated with a time of an update of a corresponding extent map entry.

8. A computing system comprising:

a computing device; and

a storage device comprising a plurality of allocable blocks for storing data;

wherein the computing device is configured to:

allocate one or more of the blocks for use in storing data corresponding to a file;

store the file data in the blocks;

update an inode corresponding to the file responsive to said allocating, the inode including attributes and an extent map corresponding to the file, the inode being configured to simultaneously identify multiple versions of the file corresponding to multiple points in time, wherein the update includes adding data to the inode which identifies the one or more blocks;

in response to detecting a write to the file, subsequent to said updating, is directed to particular blocks of the one or more blocks:

allocate one or more new blocks for use in storing data which corresponds to the file;

create a new entry in the extent map of the inode which identifies the new blocks, said new entry being simultaneously maintained along with entries of the one or more entries in the extent map;

update a first entry of the extent map to identify the particular blocks to which the write was directed and a time at which the write occurred;

wherein said extent map simultaneously maintains entries for multiple updates which have been made to the file at multiple points in time, and wherein each entry of the extent map includes a key comprising an offset to corresponding data within the file and a timestamp associated with a time of an update of a corresponding extent map entry;

in response to detecting the write corresponds to one or more blocks of an original extent:

split the original extent at a first block corresponding to the beginning of the write; and

split the original extent at a last block corresponding to the end of the write.

9. The computing system as recited in claim 8 , wherein the computing system does not store multiple copies of a given block for a particular file which are common to multiple versions of the particular file.

10. The computing system as recited in claim 9 , wherein the first entry is the new entry, and wherein the method further comprises storing data corresponding to the write in the new blocks.

11. The computing system as recited in claim 10 , wherein the first entry is an entry corresponding to at least one of the particular blocks, and wherein the computing device is further configured to:

copy the data from the particular blocks to the new blocks;

store data corresponding to the write in the particular blocks; and

update the new entry to identify at least one of the new blocks, and include an original timestamp corresponding to the data stored in a corresponding block.

12. The computing system as recited in claim 8 , wherein the first entry is the new entry and the new blocks comprise a new extent, and wherein the method further comprises storing data corresponding to the write in the new extent.

13. The computing system as recited in claim 8 , wherein the new blocks comprise a new extent and the first entry is an entry corresponding to at least one of the particular blocks, and wherein the computing system is further configured to:

copy the data from the particular blocks to the new extent;

store data corresponding to the write in the particular blocks; and

update the new entry to identify the new extent, and include an original timestamp corresponding to the data stored in a corresponding block.

14. The computing system as recited in claim 8 , wherein the extent map is stored in a B-tree, wherein each node of the B-tree includes a key comprising an offset and a timestamp associated with a time of an update of a corresponding extent map entry.

15. A computer readable storage medium comprising program instructions, wherein the program instructions are executable to:

allocate one or more of the blocks for use in storing data corresponding to a file;

store the file data in the blocks;

update an inode corresponding to the file responsive to said allocating, the inode including attributes and an extent map corresponding to the file, the inode being configured to simultaneously identify multiple versions of the file corresponding to multiple points in time, wherein the update includes adding data to the inode which identifies the one or more blocks;

in response to detecting a write to the file, subsequent to said updating, is directed to particular blocks of the one or more blocks:

allocate one or more new blocks for use in storing data which corresponds to the file;

create a new entry in the extent map of the inode which identifies the new blocks, said new entry being simultaneously maintained along with entries of the one or more entries in the extent map;

update a first entry of the extent map to identify the particular blocks to which the write was directed and a time at which the write occurred;

wherein said extent map simultaneously maintains entries for multiple updates which have been made to the file at multiple points in time, and wherein each entry of the extent map includes a key comprising an offset to corresponding data within the file and a timestamp associated with a time of an update of a corresponding extent map entry;

in response to detecting the write corresponds to one or more blocks of an original extent:

split the original extent at a first block corresponding to the beginning of the write; and

split the original extent at a last block corresponding to the end of the write.

16. The computer readable storage medium as recited in claim 15 , wherein the storage medium for use in storing data does not store multiple copies of a given block for a particular file which are common to multiple versions of the particular file.

17. The computer readable storage medium as recited in claim 16 , wherein the extent map is stored in a B-tree, wherein each node of the B-tree includes a key comprising an offset and a timestamp associated with a time of an update of a corresponding extent map entry.

Assignments (11)
PATENT SECURITY AGREEMENT SUPPLEMENT Recorded May 4, 2026
From: COHESITY, INC.
To: JPMORGAN CHASE BANK, N.A.
Reel/Frame 075521/0417 →
RELEASE OF SECURITY INTEREST Recorded Dec 16, 2024
From: ACQUIOM AGENCY SERVICES LLC, AS COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC (F/K/A VERITAS US IP HOLDINGS LLC)
Reel/Frame 069712/0090 →
RELEASE OF SECURITY INTEREST Recorded Dec 13, 2024
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 069634/0584 →
ASSIGNMENT OF SECURITY INTEREST IN PATENT COLLATERAL Recorded Nov 25, 2024
From: BANK OF AMERICA, N.A., AS ASSIGNOR
To: ACQUIOM AGENCY SERVICES LLC, AS ASSIGNEE
Reel/Frame 069440/0084 →
TERMINATION AND RELEASE OF SECURITY IN PATENTS AT R/F 037891/0726 Recorded Nov 30, 2020
From: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
To: VERITAS US IP HOLDINGS, LLC
Reel/Frame 054535/0814 →
SECURITY INTEREST Recorded Aug 20, 2020
From: VERITAS TECHNOLOGIES LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 054370/0134 →
MERGER AND CHANGE OF NAME Recorded Apr 18, 2016
From: VERITAS US IP HOLDINGS LLC; VERITAS TECHNOLOGIES LLC
To: VERITAS TECHNOLOGIES LLC
Reel/Frame 038455/0752 →
SECURITY INTEREST Recorded Feb 23, 2016
From: VERITAS US IP HOLDINGS LLC
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS COLLATERAL AGENT
Reel/Frame 037891/0726 →
SECURITY INTEREST Recorded Feb 23, 2016
From: VERITAS US IP HOLDINGS LLC
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 037891/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 4, 2016
From: SYMANTEC CORPORATION
To: VERITAS US IP HOLDINGS LLC
Reel/Frame 037697/0412 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 23, 2006
From: HARMER, CRAIG K.; COLGROVE, JOHN A.; VAJGEL, PETER; BORATE, MILIND; BHANJOIS, BHIMSEN
To: VERITAS OPERATING CORPORATION
Reel/Frame 017929/0345 →