SIS Design (Part 2)

Welcome back to our series of SIS-related posts. We’ve already started receiving questions about SIS via email. If you have questions, please post them as comments here so that all readers will see our responses.

SIS Design
SIS uses a file system filter driver (Sis.sys) that can replace duplicate files with copy-on-write links (referred to as SIS links) that point to a single backing file, reducing the disk and cache overhead of those files. This backing file is contained in a common store. The implementation of the SIS architecture makes use of reparse points that contain information about the SIS links.

SIS links are implemented as sparse files, usually with most regions of the file unallocated and a reparse point. The structure and contents of a reparse point is opaque to applications. For most usages, the Sis.sys filter driver transparently provides the intended SIS behavior.

One exception is that backup applications can send and retrieve data within these reparse points to and from SIS API functions that process the information in them. The information in a reparse point refers to a single backing file that contains the actual file data. This backing file is called a common-store file, and it exists in the common store.

Creating SIS Links
The filter driver will set the size of link files (underneath the reparse point) to be equal to the size of the file in the common store, and set the files to be sparse. To create a file’s SIS links, it is copied into SIS Common store, renamed with a unique GUID, and given the .sis file name extension. The identical files on the volume are then changed to reparse points.

Accessing SIS files
When an application tries to open the original file, the Sis.sys filter driver redirects any file input or output to the SIS file in the SIS Common Store directory. The filter driver is in all I/O paths on volumes it is attached to.

Breaking SIS links
When a file that has been consolidated by SIS is modified or its contents replaced, the reparse point is removed and replaced with a copy of the SIS file. The changes are then applied to the fresh copy of the original file.

The other reparse point or points for the original file are not changed, even if only one reparse point remains pointing to the SIS file. After the final instance of the original file is modified or deleted, the SIS file in the SIS Common Store folder is deleted.

A change of time stamp or access control lists (ACLs) will not break a file’s SIS links; SIS only copies the data of the primary stream. SIS does not touch any metadata so any metadata changes (other than file size) will not break a file’s SIS links. This is done so that each SIS linked file instance still contains its correct time stamps, ACLs, attributes, etc.