A
system and method for remote
asynchronous replication or mirroring of changes in a source
file system snapshot in a destination replica
file system using a scan (via a
scanner) of the blocks that make up two versions of a snapshot of the source
file system, which identifies changed blocks in the respective snapshot files based upon differences in volume block numbers identified in a scan of the logical file block index of each snapshot. Trees of blocks associated with the files are traversed, bypassing unchanged pointers between versions and walking down to identify the changes in the hierarchy of the tree. These changes are transmitted to the destination mirror or replicated snapshot. This technique allows regular files, directories, inodes and any other hierarchical structure to be efficiently scanned to determine differences between versions thereof. The changes in the files and directories are transmitted over the network for update of the replicated destination snapshot in an asynchronous (lazy write) manner. The changes are described in an extensible,
system-
independent data stream format layered under a network transport protocol. At the destination, source changes are used to update the destination snapshot. Any deleted or modified inodes already on the destination are moved to a temporary or “purgatory”
directory and, if reused, are relinked to the rebuilt replicated snapshot
directory. The source file
system snapshots can be representative of a volume sub-organization, such as a qtree.