Ditto blocks
AssigneeOracle America, Inc.
InventorsJeffrey S. Bonwick, William H. Moore, Matthew A. Ahrens
Life of this patent
Estimating the term…
Abstract
A method for storing a data block in a storage pool, including receiving a write operation for the data block, writing the data block into the storage pool, determining a first indirect block to store in the storage pool, wherein the first indirect block references the data block, writing the first indirect block to a first location in the storage pool, creating a copy of the first indirect block, and writing the copy of first indirect block to a second location in the storage pool.
Claims15
A method for storing a data block in a storage pool, comprising:
- receiving a write operation for the data block;
- writing the data block into the storage pool;
- determining a first indirect block to store in the storage pool, wherein the first indirect block comprises a first block pointer that references the data block;
- writing the first indirect block to a first location in the storage pool;
- creating a copy of the first indirect block;
- writing the copy of first indirect block to a second location in the storage pool, wherein the copy of the first indirect block comprises a second block pointer that references the data block;
- and
- writing a second indirect block into the storage pool, wherein the second indirect block comprises a third block pointer that references both the first indirect block and the copy of the first indirect block.
A system, comprising:
- a storage pool comprising:
- a plurality of child blocks, wherein each of the plurality of child blocks comprises one selected from the group consisting of a data block and an indirect block, wherein each of the indirect blocks references at least one of the plurality of child blocks;
- and
- a parent block referencing at least one indirect block;
- and
- a storage pool allocator configured to store the parent block and the plurality of child blocks,
- wherein the at least one indirect block is stored in a first location and a copy of the at least one indirect block is stored in a second location in the storage pool,
- wherein the at least one indirect block references a data block,
- wherein the data block is one of the plurality of child blocks,
- wherein the copy of the at least one indirect block references the data block, and
- wherein the first location and the second location are stored in a single block pointer of the parent block referencing the at least one indirect block.
A method for reading data in a storage pool, comprising:
- obtaining a first location of a first indirect block from a block pointer of a parent block;
- determining whether the first indirect block can be retrieved from the first location;
- when the first indirect block cannot be retrieved from the first location:
- obtaining a second location of the first indirect block from the block pointer of the parent block, wherein the second location comprises a copy of the first indirect block;
- and
- retrieving the first indirect block from the second location, and
- retrieving the first indirect block from the first location, when the first indirect block can be retrieved from the first location,
- wherein the first indirect block comprises a first block pointer referencing a child block, and the copy of the first indirect block comprises a second block pointer referencing the child block.
Dependencies are inferred from the claim text.