Solaris CIFS Server and ZFS
By Afshin Salek on Jun 28, 2008
There is a common misconception that Solaris CIFS server has been designed specifically to work with ZFS but it is actually file system agnostic. The CIFS server is a consumer of the Virtual File System (VFS), which provides a common interface to all file systems. The VFS provides a common abstraction layer that allows consumers to treat all file systems as generic resources, so the CIFS server provides interoperability with any file system that can be shared.
On the other hand, in order for a UNIX hosted CIFS server to provide seamless interoperability with Windows systems or CIFS clients in general, it needs support for features that are not typically provided by file systems on UNIX. Some important examples of such features are: Windows style Access Control Lists (ACLs), the ability to store Security Identifiers (SIDs) rather than UIDs and GIDs, case-insensitive name operations and support for DOS attributes.
From the outset of the CIFS server project, we had an advantage in that ZFS offered some attractive features, such as support for Windows style ACLs (ZFS supported NFSv4 ACLs, which are very similar to Windows ACLs) and the potential to add support for new features required for seamless CIFS integration. After enhancing ZFS and the VFS to realize the goal of having CIFS as a first class file sharing protocol, along with NFS, on the Solaris OS, ZFS is now the only file system that supports the full set of Windows interoperability enhancements when it's shared over CIFS. This rich feature set has led to the misconception that the CIFS service only works with ZFS.
Although ZFS is the ideal file system to be exported via CIFS, it is important to remember that all of the features that are necessary for CIFS are provided via the VFS, which means whenever any of these features are provided by another file system they can be consumed by the CIFS server. For example, NTFS streams are implemented on Solaris extended attributes. Since both UFS and ZFS support extended attributes, both UFS and ZFS provide support for NTFS streams over CIFS.
I'll talk about ZFS features and enhancement from CIFS point of view in future blog posts.