Chapter 18. Hosting a Microsoft Distributed File System Tree

Shirish Kalele

Samba Team & Veritas Software

John H. Terpstra

Samba Team

12 Jul 2000

Table of Contents

Features and Benefits
Common Errors
MSDFS UNIX Path Is Case-Critical

Features and Benefits

The Distributed File System (DFS) provides a means of separating the logical view of files and directories that users see from the actual physical locations of these resources on the network. It allows for higher availability, smoother storage expansion, load balancing, and so on.

For information about DFS, refer to the Microsoft documentation. This document explains how to host a DFS tree on a UNIX machine (for DFS-aware clients to browse) using Samba.

A Samba server can be made a DFS server by setting the global Boolean host msdfs parameter in the smb.conf file. You designate a share as a DFS root using the Share Level Boolean msdfs root parameter. A DFS root directory on Samba hosts DFS links in the form of symbolic links that point to other servers. For example, a symbolic link junction->msdfs:storage1\share1 in the share directory acts as the DFS junction. When DFS-aware clients attempt to access the junction link, they are redirected to the storage location (in this case, \\storage1\share1).

DFS trees on Samba work with all DFS-aware clients ranging from Windows 95 to 200x. Following sample configuration shows how to setup a DFS tree on a Samba server. In the /export/dfsroot directory, you set up your DFS links to other servers on the network.

root# cd /export/dfsroot
root# chown root /export/dfsroot
root# chmod 755 /export/dfsroot
root# ln -s msdfs:storageA\\shareA linka
root# ln -s msdfs:serverB\\share,serverC\\share linkb

Example 18.1. smb.conf with DFS configured

[global]
netbios name = GANDALF
host msdfs = yes
[dfs]
path = /export/dfsroot
msdfs root = yes

You should set up the permissions and ownership of the directory acting as the DFS root so that only designated users can create, delete or modify the msdfs links. Also note that symlink names should be all lowercase. This limitation exists to have Samba avoid trying all the case combinations to get at the link name. Finally, set up the symbolic links to point to the network shares you want and start Samba.

Users on DFS-aware clients can now browse the DFS tree on the Samba server at \\samba\dfs. Accessing links linka or linkb (which appear as directories to the client) takes users directly to the appropriate shares on the network.

Common Errors

  • Windows clients need to be rebooted if a previously mounted non-DFS share is made a DFS root or vice versa. A better way is to introduce a new share and make it the DFS root.

  • Currently, there's a restriction that msdfs symlink names should all be lowercase.

  • For security purposes, the directory acting as the root of the DFS tree should have ownership and permissions set so only designated users can modify the symbolic links in the directory.

MSDFS UNIX Path Is Case-Critical

A network administrator sent advice to the Samba mailing list after a long sessions trying to determine why DFS was not working. His advice is worth noting.

I spent some time trying to figure out why my particular dfs root wasn't working. I noted in the documentation that the symlink should be in all lowercase. It should be amended that the entire path to the symlink should all be in lowercase as well.

For example, I had a share defined as such:

		[pub]
			path = /export/home/Shares/public_share
			msdfs root = yes
		

and I could not make my Windows 9x/Me (with the dfs client installed) follow this symlink:

			damage1 -> msdfs:damage\test-share
		

Running a debug level of 10 reveals:

		[2003/08/20 11:40:33, 5] msdfs/msdfs.c:is_msdfs_link(176)
		  is_msdfs_link: /export/home/shares/public_share/* does not exist.
		

Curious. So I changed the directory name from .../Shares/... to .../shares/... (along with my service definition) and it worked!