A method, system, apparatus, and computer-readable medium are provided for
taking snapshots of a storage volume. According to aspects of one method,
each snapshot is represented as a unique sequence number. Every fresh
write access to a volume in a new snapshot lifetime is allocated a new
section in the disk, called a provision, which is labeled with the
sequence number. Read-modify-write operations are performed on a
sub-provision level at the granularity of a chunk. Because each provision
contains chunks with valid data and chunks with invalid data, a bitmap is
utilized to identify the valid and invalid chunks with each provision.
Provisions corresponding to different snapshots are arranged in a linked
list. Branches from the linked list can be created for storing writable
snapshots. Provisions may also be deleted and rolled back by manipulating
the contents of the linked lists.