IP Library Granted Patent US 8,280,858
Granted Patent B2
US 8,280,858 · App. 12/494,090 · Granted Oct 2, 2012

Storage pool scrubbing with concurrent snapshots

Assignee: Oracle America, Inc.
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,280,858
App. No.
12/494,090
Granted
Oct 2, 2012
Kind
B2
Abstract

A method for scrubbing a storage pool is disclosed. The method includes loading a scrub queue with a number of identifiers corresponding to a number of datasets, selecting a first identifier from the scrub queue, where the first identifier corresponds to a first dataset, initiating a scrubbing of the first dataset. The method further includes, upon receiving an indication of a requirement to pause the scrubbing, pausing the scrubbing of the first dataset, creating a bookmark recording a last location within the first dataset that was scrubbed before pausing the scrubbing of the first dataset, detecting at least one change to a storage pool, and performing a modification in response to detecting the at least one change to the storage pool.

Claims (56)

1. A non-transitory computer readable storage medium having a computer readable program code embodied therein, the computer readable program code adapted to be executed by a processor to perform a method, the method comprising:

loading a scrub queue with a plurality of identifiers corresponding to a plurality of datasets in a storage pool;

selecting a first identifier from the scrub queue, wherein the first identifier corresponds to a first dataset, wherein the first dataset is a dataset of the plurality of datasets;

initiating a scrubbing of the first dataset, wherein the first dataset is a hierarchical block tree (HBT) comprises:

a plurality of data blocks and at least one indirect block, wherein the indirect block comprises a first block pointer that references at least one of the plurality of data blocks, and wherein the first block pointer comprises a birth time associated with the at least one of the plurality of data blocks, and

a root block comprising a second block pointer referencing the at least one indirect block, wherein the second block pointer comprises a birth time associated with the at least one indirect block; and

upon receiving an indication of a requirement to pause the scrubbing:

pausing the scrubbing of the first dataset;

creating a bookmark recording of a last location within the first dataset that was scrubbed before pausing the scrubbing of the first dataset;

detecting at least one change among the plurality of datasets in the storage pool; and

performing a modification to one of the plurality of identifiers in the scrub queue in response to detecting the at least one change.

2. The non-transitory computer readable storage medium of claim 1 , wherein scrubbing the first dataset comprises scrubbing only blocks having a birth time after a birth time of a previously scrubbed dataset.

3. The non-transitory computer readable storage medium of claim 1 , wherein scrubbing the first dataset comprises validating that a checksum is correct, wherein the checksum is associated with at least one selected from a group comprising a data block and an indirect block.

4. The non-transitory computer readable storage medium of claim 1 , wherein scrubbing the first dataset comprises resilvering at least one selected from a group comprising a data block and an indirect block.

5. The non-transitory computer readable storage medium of claim 1 , further comprising, upon completing the scrubbing of the first dataset:

removing the first identifier from the scrub queue.

6. The non-transitory computer readable storage medium of claim 5 , further comprising:

selecting a second identifier from the scrub queue, wherein the second identifier corresponds to the oldest dataset remaining in the scrub queue.

7. The non-transitory computer readable storage medium of claim 1 , wherein the storage pool comprises at least one physical disk.

8. The non-transitory computer readable storage medium of claim 1 , wherein each of the plurality of datasets is associated with a plurality of pointers comprising:

a snapshot pointer; and

a clones pointer.

9. The non-transitory computer readable storage medium of claim 8 , wherein detecting the at least one change to the storage pool comprises detecting a deletion of the first dataset from the storage pool, and wherein performing the modification comprises:

determining, based on a snapshot pointer associated with the first dataset, a descendant dataset of the first dataset;

resetting the bookmark to a beginning of the descendant dataset; and

initiating a scrubbing of the descendant dataset according to the bookmark.

10. The non-transitory computer readable storage medium of claim 8 , wherein detecting the at least one change to the storage pool comprises detecting a deletion of a second dataset from the storage pool, and wherein performing the modification comprises:

determining, based on a snapshot pointer associated with the second dataset, a descendant dataset of the second dataset;

replacing, within the scrub queue, an identifier corresponding to the second dataset with an identifier corresponding to the descendant dataset; and

resuming the scrubbing of the first dataset according to the bookmark.

11. The non-transitory computer readable storage medium of claim 8 , wherein detecting the at least one change to the storage pool comprises detecting a clone swap between the first dataset and a clone dataset, and wherein performing the modification comprises:

swapping an identifier of the first dataset with an identifier of the clone dataset;

resetting the bookmark to a beginning of the clone dataset; and

initiating a scrubbing of the clone dataset according to the bookmark.

12. The non-transitory computer readable storage medium of claim 1 , wherein detecting the at least one change to the storage pool comprises detecting that a snapshot has been created from the first dataset, and wherein performing the modification comprises initiating a scrubbing of the snapshot according to the bookmark.

13. The non-transitory computer readable storage medium of claim 1 , wherein detecting the at least one change to the storage pool comprises detecting that a snapshot has been created from a second dataset, wherein the second dataset is associated with an identifier loaded in the scrub queue, and wherein performing the modification comprises:

replacing, within the scrub queue, the identifier associated with the second dataset with an identifier associated with the snapshot; and

resuming the scrubbing of the first dataset according to the bookmark.

14. The non-transitory computer readable storage medium of claim 1 , wherein detecting the at least one change to the storage pool comprises detecting a clone swap between at least one dataset and a clone dataset, and wherein performing the modification comprises:

swapping an identifier of the at least one dataset with an identifier of the clone dataset; and

resuming the scrubbing of the first dataset according to the bookmark.

15. A system, comprising:

a processor;

a computer readable storage medium having computer readable program code embodied therein, the computer readable program code adapted to, when executed by the processor, implement a method, the method comprising:

loading a scrub queue with a plurality of identifiers corresponding to a plurality of datasets to be scrubbed, wherein the plurality of datasets are stored in a storage pool;

selecting a first identifier from the scrub queue, wherein the first identifier corresponds to a first dataset, wherein the first dataset is an oldest dataset of the plurality of datasets;

initiating a scrubbing of the first dataset, wherein the first dataset is a hierarchical block tree (HBT) comprises:

a plurality of data blocks and at least one indirect block, wherein the indirect block comprises a first block pointer that references at least one of the plurality of data blocks, and wherein the first block pointer comprises a birth time associated with the at least one of the plurality of data blocks, and

a root block comprising a second block pointer referencing the at least one indirect block, wherein the second block pointer comprises a birth time associated with the at least one indirect block; and

upon receiving an indication of a requirement to pause the scrubbing:

pausing the scrubbing of the first dataset;

creating a bookmark recording of a last location within the first dataset that was scrubbed before pausing the scrubbing of the first dataset;

detecting at least one change among the plurality of datasets in the storage pool; and

performing a modification to one of the plurality of identifiers in the scrub queue in response to detecting the at least one change.

16. The system of claim 15 , wherein scrubbing the first dataset comprises validating that a checksum is correct, wherein the checksum is associated with at least one selected from a group comprising a data block and an indirect block.

17. The system of claim 15 , wherein the bookmark comprises the first identifier, an object identifier corresponding to a file in a dataset being scrubbed prior to pausing the scrubbing, a level identifier of the dataset being scrubbed prior to pausing the scrubbing, and a block identifier corresponding to the block within the level being scrubbed prior to pausing the scrubbing.

Assignments (2)
MERGER AND CHANGE OF NAME Recorded Dec 16, 2015
From: ORACLE USA, INC.; SUN MICROSYSTEMS, INC.; ORACLE AMERICA, INC.
To: ORACLE AMERICA, INC.
Reel/Frame 037311/0182 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 7, 2009
From: AHRENS, MATTHEW A.; MAYBEE, MARK J.
To: SUN MICROSYSTEMS, INC.
Reel/Frame 022920/0572 →
Continuity (1)
Related Publication 20100332446A1 · Dec 30, 2010