# US 12,001,393 B2 · Directory snapshots based on directory level inode virtualization

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

- Number: US 12,001,393 B2
- Document ID: US12001393B2
- Status: Granted
- Kind: B2
- Application number: 17/538,318
- Filed: 2021-11-30
- Published: 2023-06-01
- Granted: 2024-06-04
- Earliest claimed: 2021-11-30
- Assignees: Dell Products L.P.
- Applicants: Dell Products L.P.
- Inventors: Soumyadeep Sen; Rohit K. Chawla; Marc A. De Souter; Alexander S. Mathews
- Web page: https://patentgrep.com/patent/US12001393B2

## CPC

- 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 16/1734: {Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs}
- G06F 16/188: Virtual file systems
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

Described is a technology that facilitates directory level snapshots at any level of a filesystem's namespace. A directory inode mapping file associates a first directory's virtual inode number(s) with real inode number(s). A snapshot of the first directory creates a second directory with a second directory inode mapping file copied from the first directory inode mapping file, thereby sharing the real inode data structure(s) of the first directory. In the event that one of the directories is to be modified, the directory real inode is split to provide a new directory real inode file for the to-be-modified directory, with the modification after the split.

## Claims

### Claim 1

A system, comprising:
a processor; and
a memory that stores executable instructions that, when executed by the processor, facilitate performance of operations, the operations comprising:
maintaining a first directory inode mapping file associated with a first directory that is within a filesystem root directory namespace, the first directory inode mapping file comprising a first directory virtual inode number associated with a first directory real inode number of a directory real inode data structure; and
creating a second directory comprising a snapshot of the first directory, the creating comprising allocating a second directory inode mapping file for the second directory, and copying data of the first directory inode mapping file to the second directory inode mapping file;
detecting a requested modification to the first directory; and
in response to the detecting the requested modification, splitting the directory real inode data structure into a first directory real inode data structure for the first directory and a second directory real inode data structure for the second directory, the splitting comprising allocating the first directory real inode data structure, assigning a new directory real inode number for the first directory real inode data structure, and updating the first directory inode mapping file with the new directory real inode number for the first directory real inode data structure.

### Claim 2 (depends on 1)

The system of claim 1, wherein the operations further comprise updating a filesystem inode mapping file, which maps a first filesystem virtual inode number to the first directory inode mapping file and to the first directory virtual inode number, with a second filesystem virtual inode number that maps to the second directory inode mapping file and to the first directory virtual inode number.

### Claim 3 (depends on 1)

The system of claim 1, wherein the operations further comprise detecting access to the second directory, and, in response to detecting the access, populating a filesystem inode mapping file with entry data corresponding to one or more objects of the second directory.

### Claim 4 (depends on 1)

The system of claim 1, wherein the operations further comprise reducing a weight value in metadata of the second directory real inode based on a weight value entry in the first directory inode mapping file.

### Claim 5 (depends on 1)

The system of claim 1, wherein the operations further comprise allocating a data block associated with the first directory real inode data structure, and adding, to metadata of the first directory real inode data structure, a pointer to the data block.

### Claim 6 (depends on 1)

The system of claim 1, wherein the operations further comprise initializing metadata of the first directory real inode data structure with an initial weight value, and updating a weight value entry associated with the new directory real inode number in the first directory inode mapping file based on the initial weight value.

### Claim 7 (depends on 1)

The system of claim 1, wherein the detecting the requested modification to the first directory comprises detecting a pending subdirectory modification within a namespace of the first directory.

### Claim 8

A method comprising:
snapshotting, by a system comprising a processor, a first directory that is within a filesystem root directory namespace, the first directory associated with a first directory inode mapping file comprising a first directory virtual inode number associated with a directory real inode data structure, the snapshotting comprising allocating a second directory inode mapping file, and copying data of the first directory inode mapping file to the second directory inode mapping file;
detecting, by the system, a requested modification to the first directory; and
in response to the detecting the requested modification, splitting, by the system, the directory real inode data structure into a first directory real inode data structure and a second directory real inode data structure, assigning a new directory real inode number to the first directory real inode data structure, and updating the first directory inode mapping file with the new directory real inode number.

### Claim 9 (depends on 8)

The method of claim 8, further comprising updating, by the system, a filesystem inode mapping file, which maps a first filesystem virtual inode number to the first directory inode mapping file and to the first directory virtual inode number, with a second filesystem virtual inode number that maps to the second directory inode mapping file and to the first directory virtual inode number.

### Claim 10 (depends on 9)

The method of claim 9, further comprising detecting, by the system, access to the second directory, and, in response to detecting the access, populating, by the system, the filesystem inode mapping file with entry data corresponding to one or more objects of the second directory.

### Claim 11 (depends on 8)

The method of claim 8, further comprising reducing, by the system, a weight value in metadata of the second directory real inode based on a weight value entry in the first directory inode mapping file.

### Claim 12 (depends on 8)

The method of claim 8, further comprising allocating, by the system, a data block associated with the first directory real inode data structure, and adding, by the system, to metadata of the first directory real inode data structure, a pointer to the data block.

### Claim 13 (depends on 8)

The method of claim 8, further comprising initializing, by the system, metadata of the first directory real inode data structure with an initial weight value, and updating, by the system, a weight value entry associated with the new directory real inode number in the first directory inode mapping file based on the initial weight value.

### Claim 14 (depends on 8)

The method of claim 8, wherein the detecting the requested modification to the first directory comprises detecting a pending subdirectory modification within a namespace of the first directory.

### Claim 15

A non-transitory machine-readable medium, comprising executable instructions that, when executed by a processor, facilitate performance of operations, the operations comprising:
maintaining a first directory inode mapping file associated with a first directory that is within a filesystem root directory namespace, the first directory inode mapping file comprising a first directory virtual inode number associated with a first directory real inode number of a directory real inode data structure;
creating a second directory comprising a snapshot of the first directory, the creating comprising allocating a second directory inode mapping file for the second directory, and copying data of the first directory inode mapping file to the second directory inode mapping file;
detecting a requested modification to the first directory; and
in response to the detecting the requested modification:
splitting the directory real inode data structure into a first directory real inode data structure for the first directory and a second directory real inode data structure for the second directory, the splitting comprising:
allocating the first directory real inode data structure,
assigning a new directory real inode number to the first directory real inode data structure, and
updating the first directory inode mapping file with the new directory real inode number.

### Claim 16 (depends on 15)

The non-transitory machine-readable medium of claim 15, wherein the operations further comprise updating a filesystem inode mapping file, which maps a first filesystem virtual inode number to the first directory inode mapping file and to the first directory virtual inode number, with a second filesystem virtual inode number that maps to the second directory inode mapping file and to the first directory virtual inode number, detecting access to the second directory, and, in response to detecting the access, populating the filesystem inode mapping file with entry data corresponding to one or more objects of the second directory.

### Claim 17 (depends on 15)

The non-transitory machine-readable medium of claim 15, wherein the operations further comprise reducing a weight value in metadata of the second directory real inode based on a weight value entry in the first directory inode mapping file, changing the weight value entry in the first directory inode mapping file to an initial weight value, and initializing the first directory real inode data structure with the initial weight value.

### Claim 18 (depends on 15)

The non-transitory machine-readable medium of claim 15, wherein the operations further comprise allocating a data block associated with the first directory real inode data structure, and adding a data block reference to the first directory real inode data structure.

### Claim 19 (depends on 15)

The non-transitory machine-readable medium of claim 15, wherein the detecting the requested modification to the first directory comprises detecting a pending subdirectory modification within a namespace of the first directory.

### Claim 20 (depends on 15)

The non-transitory machine-readable medium of claim 15, wherein the operations further comprise initializing metadata of the first directory real inode data structure with an initial weight value, and updating a weight value entry associated with the new directory real inode number in the first directory inode mapping file based on the initial weight value.
