Managing DFS namespaces from the command line

Posted on February 10th, 2010 in Server 2003, Server 2008, Storage by alt-92

Last year, I posted about the  DFS Modlink utility which you need if you want to manipulate DFS link states against DFS-N  – Windows 2003 didn’t have any non-GUI tooling to do that, except for the Win32_DFSnode WMI properties.
Windows XP however does not support that particular interface, which leaves only modlink as a way to disable or enable a DFS link.

From Windows 2008 onward, that sorely missing functionality is available in the revamped dfsutil commandline tool. And as an added bonus, changing the TTL for a link is also possible.
Even more, dfsutil in 2008R2 (and therefore Windows 7 clients with RSAT installed) lets you set the Access Based Enumeration property.

Below are the property commands:

   1: E:\>dfsutil property

   2:  

   3: DESCRIPTION:

   4: Displays or modifies the properties of a folder target (link target) or

   5: namespace server (root target).

   6:  

   7: ------ PROPERTY Commands Supported ------

   8:  

   9: Sitecosting           Displays or modifies site costing for a namespace.

  10: RootScalability       Displays or modifies the namsespace polling mode.

  11: ABE                   Enable/Disable/View ABE property of a namespace.

  12: Insite                Displays or modifies the in-site property.

  13: TargetfailBack        Displays or modifies client fail back.

  14: SD                    Set/Get Security Information on the folder.

  15: State                 Displays or modifies a folder target or namespace server.

  16: TTL                   Displays or changes client referral caching.

  17: PriorityRank          Displays or changes the ordering method (priority rank).

  18: PriorityClass         Displays or changes the target priority.

  19: Comment               Sets or displays the comment for a namespace or link.

 

So, what do we do with this? Let’s say you’re migrating your DFS-Namespace enabled* Datashares to a newer fileserver with more storage capacity.

*no DFS-R , in case you’re wondering, because the original server might be a Windows 2003 non-R2 install.

A default link timeout is 7200 seconds or 2×60x 60 seconds = 2 hours, meaning your DFS client will check for changes in state after that time. During your migration window, you’ll want to ensure that any changes are picked up within a shorter time.

   1: E:\>dfsutil property ttl \\alt-92.net\data\share1

   2: The timeout for \\alt-92.net\data\share1 is 7200

First, we’ll change the timeout setting to a 5 minute setting:

   1: E:\>dfsutil property ttl set \\alt-92.net\data\share1 300

   2:  

   3: Done processing this command.

   4:  

   5: E:\>dfsutil property ttl \\alt-92.net\data\share1

   6: The timeout for \\alt-92.net\data\share1 is 300

Then, using both dfscmd and dfsutil, we’ll add our new fileshare to the link AND set it offline:

 

   1: dfscmd /add \\alt-92.net\data\share1 \\newserver\data\share1

   2: dfsutil property state offline \\alt-92.net\data\share1 \\newserver\data\share1

After syncing the content with robocopy (be sure to check the /MT switch for multithreading on Windows 2008R2 or Windows 7) we now flip the link state on both shares and restore the timeout value to its former setting:

   1: dfsutil property state offline \\alt-92.net\data\share1 \\oldserver\data\share1

   2: dfsutil property state online \\alt-92.net\data\share1 \\newserver\data\share1

   3: dfsutil property ttl set \\alt-92.net\data\share1 7200

After that, we’ll decommission the old fileserver, by taking the shares offline and removing the old links from the DFS Namespace with dfscmd:

   1: dfscmd /remove \\alt-92.net\data\share1 \\oldserver\data\share1

Et voila: we’ve migrated our DFS enabled fileshares to a new server with minimal downtime.

Fully scripted, its now feasible to migrate a DFS Namespace root with hundreds of links in just a few hours (including the final replication with robocopy – the bulk copy we’ve started a couple of days in advance) .

Comments are closed.