# Distributed File System (Microsoft)

Distributed File System (DFS) is a set of client and server services that allow an organization using Microsoft Windows servers to organize many distributed SMB file shares into a distributed file system. DFS has two components to its service: Location transparency (via the namespace component) and Redundancy (via the file replication component). Together, these components enable data availability in the case of failure or heavy load by allowing shares in multiple different locations to be logically grouped under one folder, the "DFS root".
Microsoft's DFS is referred to interchangeably as 'DFS' and 'Dfs' by Microsoft and is unrelated to the DCE Distributed File System, which held the 'DFS' trademark but was discontinued in 2005.
It is also called "MS-DFS" or "MSDFS" in some contexts, e.g. in the Samba user space project.

## Overview

There is no requirement to use the two components of DFS together; it is perfectly possible to use the logical namespace component without using DFS file replication, and it is perfectly possible to use file replication between servers without combining them into one namespace.
A DFS root can only exist on a server version of Windows (from Windows NT 4.0 and up) and OpenSolaris (in kernel space) or a computer running Samba (in user space.) The Enterprise and Datacenter Editions of Windows Server can host multiple DFS roots on the same server. OpenSolaris intends on supporting multiple DFS roots in "a future project based on Active Directory (AD) domain-based DFS namespaces".
There are two ways of implementing DFS on a server:
* Standalone DFS namespace - allows for a DFS root that exists only on the local computer, and thus does not use Active Directory. A Standalone DFS can only be accessed on the computer on which it is created. It does not offer any fault tolerance and cannot be linked to any other DFS. This is the only option available on Windows NT 4.0 Server systems. Standalone DFS roots are rarely encountered because of their limited utility.
* Domain-based DFS namespace - stores the DFS configuration in Active Directory, making the DFS namespace root accessible at \\<domainname>\<dfsroot> or \\<FQDN>\<dfsroot> The namespace roots can reside on a domain controller or a domain member server. If domain controllers are not used as the namespace root servers, multiple member servers should be used to provide full fault tolerance.

## DFS namespaces

Traditional file shares, associated with a single server, have SMB paths of the form
Domain-based DFS file share paths are distinguished by using the domain name in place of the server name, in the form
When a user accesses such a share, either directly or by mapping a drive, their computer will access one of the available servers associated with that share, following rules which can be configured by the network administrator. For example, the default behaviour is that users will access the closest server to them; but this can be overridden to prefer a particular server.
If a server fails, the client can select a different server transparently to the user. One major caveat regarding this flexibility is that currently-open files will potentially become unusable, as open files cannot be failed-over.

## DFS replication

Early versions of DFS used Microsoft's File Replication Service (FRS) which provides basic file replication capability between servers. FRS identifies changed or new files, and copies the latest version of the entire file to all servers.
Windows Server 2003 R2 introduced "DFS Replication" (DFSR) which improves on FRS by only copying those parts of files which have changed (remote differential compression), by using data compression to reduce network traffic, and by allowing administrators flexible configuration options for limiting network traffic with a customizable schedule.

## History

The server component of Distributed File System was first introduced as an add-on to Windows NT 4.0 Server, called "DFS 4.1", and was later included as a standard component of all editions of Windows 2000 Server.
Client-side support is included in Windows NT 4.0 and later versions of Windows.
Linux kernels 2.6.14 and later come with an SMB client VFS called "cifs" that supports DFS.
On Mac OS X DFS is supported natively in Mac OS X 10.7 ("Lion") onward.

## Specifications

There are a number of specifications that are relevant to DFS, they are available through the Microsoft Open Specifications program:
* [MS-DFSC]: Distributed File System (DFS): Referral Protocol
** Specifies the Distributed File System (DFS): Referral Protocol, which enables file system clients to resolve names from a namespace distributed across many servers and geographies into local names on specific file servers.
* [MS-DFSNM]: Distributed File System (DFS): Namespace Management Protocol
** Specifies the Distributed File System (DFS): Namespace Management Protocol, which provides an RPC interface for administering DFS configurations. The client is an application that issues method calls on the RPC interface to administer DFS. The server is a DFS service that implements support for this RPC interface for administering DFS.
* [MS-DFSRH]: DFS Replication Helper Protocol
** Specifies the DFS Replication Helper Protocol, which is made up of a set of distributed component object model (DCOM) interfaces for configuring and monitoring DFS Replication Helper Protocols on a server.