A storage is computer-readable media capable of storing data in blocks. Storages face a myriad of threats to the data they store and to their smooth and continuous operation. In order to mitigate these threats, a backup of the data in a storage may be created to represent the state of the source storage at a particular point in time and to enable the restoration of the data at some future time. Such a restoration may become desirable, for example, if the storage experiences corruption of its stored data, if the storage becomes unavailable, or if a user wishes to create a second identical storage.
A storage is typically logically divided into a finite number of fixed-length blocks. A storage also typically includes a file system which tracks the locations of the blocks that are allocated to each file that is stored in the storage as well as the locations of allocated blocks which are used by the file system for its own internal on-storage structures. The file system may also track free blocks that are neither allocated to any file nor allocated to any file system on-storage structure. The file system generally tracks allocated and/or free blocks using a specialized on-storage structure stored in the file system metadata (FSM), referred to herein as a file system block allocation map (FSBAM).
Various techniques exist for backing up a source storage. One common technique involves backing up individual files stored in the source storage on a per-file basis. This technique is often referred to as file backup. File backup uses the file system of the source storage as a starting point and performs a backup by writing the files to a destination storage. Using this approach, individual files are backed up if they have been modified since the previous backup. File backup may be useful for finding and restoring a few lost or corrupted files. However, file backup may also include significant overhead in the form of bandwidth and logical overhead because file backup requires the tracking and storing of information about where each file exists within the file system of the source storage and the destination storage.
Another common technique for backing up a source storage ignores the locations of individual files stored in the source storage and instead simply backs up all allocated blocks stored in the source storage. This technique is often referred to as image backup because the backup generally contains or represents an image, or copy, of the entire allocated contents of the source storage. Using this approach, individual allocated blocks are backed up if they have been modified since the previous backup. Because image backup backs up all allocated blocks of the source storage, image backup backs up both the blocks that make up the files stored in the source storage as well as the blocks that make up the file system on-storage structures such as the FSM. Also, because image backup backs up all allocated blocks rather than individual files, this approach does not generally need to be aware of the file system on-storage data structures or the files stored in the source storage, beyond utilizing the FSBAM in order to only back up allocated blocks since free blocks are not generally backed up.
An image backup can be relatively fast compared to file backup because reliance on the file system is minimized. An image backup can also be relatively fast compared to a file backup because seeking is reduced. In particular, during an image backup, blocks are generally read sequentially with relatively limited seeking. In contrast, during a file backup, blocks that make up individual files may be scattered, resulting in relatively extensive seeking. Further, the use of snapshot technology during an image backup may enable an image backup to capture the data stored in a source storage at a particular point in time without interrupting other processes, thus avoiding downtime of the source storage.
One common problem encountered when backing up a source storage using image backup is the potential for the inclusion of unwanted files in the backups. For example, a very large digital movie file may initially be stored in a source storage. At the time of a backup of the source storage, a user may wish to delete the movie file in order to save space in the image backup(s) of the source storage. However, image backup methods do not generally allow individual files to be deleted from an image backup, and the file content of the unwanted file must therefore be needlessly retained in the image backup. Retaining unwanted file content in an image backup may increase the overall size requirements of a backup storage where the image backup is stored, increase the bandwidth overhead of transporting the image backup, and increase the processing time associated with exposing or restoring the image backup.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one example technology area where some embodiments described herein may be practiced.