Managing DFS namespaces from the command line
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 7200After 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\share1Et 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) .