DFS is a really cool feature. There are two parts to DFS: Namespace and Replication. They do different jobs, and can be thought of as different roles. DFS Namespace is designed to create a unified UNC path, where subfolders can be links to different serves and shares. The servers linked-to can be assigned costs and placed into sites.
Example
Here’s an example:
Let’s say I have 5 file servers and shares:
- OH-FS1
- \\oh-fs1\hr
- \\oh-fs1\finances
- OH-FS2
- \\oh-fs2\software
- OH-FS3
- \\oh-fs3\public
- CA-FS1
- \\ca-fs1\hr
- \\ca-fs1\finances
It can be confusing for a user to remember what file server they need to go to. DFS Namespaces can help us unify the structure into this:
- \\mycorp.com\
- files\
- software
- public
- finances
- hr
- files\
Then, we can configure DFS Namespaces so that if you’re at the CA site, accessing \\mycorp.com\hr will redirect you to \\ca-fs1\hr. Conversely, we can configure this namespace so that accessing \\mycorp.com\hr from the OH site will redirect the user to the share \\oh-fs1\hr. This is incredibly cool.
You might be wondering, what good is it to redirect people to servers in different sites if they won’t see the same data? For example, what if the HR folk at the OH and CA site want to collaborate via the ‘hr’ share? This is what DFS Replication is for. It will be covered in a different post.
Getting Started
Let’s walk through the creation of a DFS Namespace.
Our final namespace will look like this:
- \\contoso.com\files\
- hr
- software
- finances
- public
The following shares will be on a server named fs1: hr, finances, software. The share ‘public’ will be on a server named fs2.
- Install two file servers: fs1 ans fs2.
- Configure the file servers normally and join them to the domain.
- Run the following PowerShell code on both file servers to install the DFS Namespace feature:
Install-WindowsFeature FS-DFS-Namespace -IncludeManagementTools - Run the following PowerShell code on fs1 to create a 1-server namespace.
#Create the SMB share folders: $folders = @("C:\DFSRoots\Files","C:\shares\hr","C:\shares\finances","C:\shares\software") $folders | mkdir #Create the shares $folders | %{sharename = (GC $_).name; New-SMBShare -Name $shareName -Path $_ -FullAccess "contoso\administrator"} #Create the DFS Root New-DfsnRoot -Path \\contoso.com\files -TargetPath \\fs1\files -Type DomainV2 #Create the DFS Folders for fs1 $folders | ?{$_ -like "*shares*"} | % {$name = (gc $_).name; $DfsPath = ("\\contoso.com\files\" + $name); $targetPath = ("\\fs1\" + $name);New-DfsnRootFolder -Path $dfsPath -TargetPath $targetPath}
- At this point, fs1 is configured. In order to add shares from fs2 into the DFS Namespace, we first need to configure fs2 to host the ‘files’ namespace. Run the following PowerShell code on fs2.
-
$folders = @("C:\DFSRoots\Files","C:\shares\public") $folders | mkdir #Create the shares $folders | %{sharename = (GC $_).name; New-SMBShare -Name $shareName -Path $_ -FullAccess "contoso\administrator"} #Host the DFS Root New-DfsnRootTarget -Path \\contoso.com\files -TargetPath \\fs2\files #Create the DFS Folders for fs2 $folders | ?{$_ -like "*shares*"} | % {$name = (gc $_).name; $DfsPath = ("\\contoso.com\files\" + $name); $targetPath = ("\\fs1\" + $name);New-DfsnRootFolder -Path $dfsPath -TargetPath $targetPath}
Note that we don’t need to run New-DfsnRootTarget on fs2, but the SMB Shares ‘files’ and ‘public’ must be configured on fs2 before we can add the fs2 shares as targets on the \\contoso.com\files namespace.
And that’s it! You can now browse the tree from a client or the servers, and you’d never know that the folders are on different servers.