Method and apparatus for defragmentation and for detection of relocated blocks
AssigneeNetwork Appliance, Inc.
InventorsRobert English, Ashish Prakash
Life of this patent
Estimating the term…
Abstract
A method of operating a storage system includes moving a block of data stored in the storage system to a new location in the storage system, such as for purposes of defragmentation. After the block has been moved to the new location, the storage system receives a request requiring access to the block. The storage system uses metadata appended to an identified block to detect that the block may have been relocated. The metadata can further be used to distinguish a block that has been relocated from a lost write.
Claims29
A method of operating a storage system, the method comprising:
- receiving a data access request;
- identifying a particular block stored in the storage system as potentially being a target block of the request, and
- using metadata appended to the identified block to detect that the target block of the request may have been relocated.
A method of operating a storage system, the method comprising:
- maintaining a first data structure and a second data structure, each defining an organization of stored data, the first and second data structure each including a first pointer to a particular stored block, the first data structure further including a second pointer associated with the particular stored block;
- moving the block to a new location;
- and
- in response to a need to access the block,
- using the first pointer in the first data structure to attempt to locate the block,
- determining that the block may have been moved, and in response to such determination,
- using the second pointer to reference into the second data structure, to locate the block at the new location.
A method of operating a storage system, the method comprising:
- maintaining a first data structure and a second data structure, each defining an organization of a plurality of blocks stored in an aggregate of storage, the first and second data structures each including a first pointer to a particular block, the first data structure further including a second pointer associated with the particular block, the first pointer representing a physical address of the block in an aggregate of storage, the second pointer representing an address of the block in a virtual data container defined within the aggregate, the first data structure associating the first pointer with the second pointer;
- moving the block to a new location in the aggregate as part of a defragmentation process, including updating the first pointer in the second data structure without requiring any update of the first pointer in the first data structure;
- and
- in response to a request to access the block after the block has been moved to the new location,
- determining that the first pointer is incorrect in the first data structure,
- using the second pointer to reference into the second data structure to locate a correct value of the first pointer in the second data structure, the correct value reflecting the new location of the block, and
- accessing the block using the correct value of the first pointer.
A storage server comprising:
- a communications interface through which to receive a data access request from a client;
- a network interface through which to access a mass storage subsystem on behalf of the client in response to the data access request;
- a file system manager to maintain a first data structure and a second data structure, each defining an organization of a plurality of blocks stored in an aggregate of storage, the first and second data structures each including a first pointer to a particular block which corresponds to the data access request, the first data structure further including a second pointer associated with the block and an association between the first and second pointers;
- a write allocator to move the block to a new location, including updating the first pointer in the second data structure, without requiring any update of the first pointer in the first data structure;
- and
- a read handler to respond to the data access request by accessing the block, after the block has been moved to the new location, by
- determining that the first pointer is incorrect in the first data structure,
- using the second pointer and the second data structure to locate a correct value of the first pointer, the correct value reflecting the new location of the block, and
- accessing the block using the correct value of the first pointer.
Dependencies are inferred from the claim text.