| 1 | <?xml version="1.0" encoding="iso-8859-1"?>
 | 
|---|
| 2 | <!DOCTYPE chapter PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
 | 
|---|
| 3 | <chapter id="msdfs">
 | 
|---|
| 4 | 
 | 
|---|
| 5 | <chapterinfo>
 | 
|---|
| 6 |         <author>
 | 
|---|
| 7 |                 <firstname>Shirish</firstname><surname>Kalele</surname>
 | 
|---|
| 8 |                 <affiliation>
 | 
|---|
| 9 |                         <orgname>Samba Team & Veritas Software</orgname>
 | 
|---|
| 10 |                         <address>
 | 
|---|
| 11 |                                 <email>samba@samba.org</email>
 | 
|---|
| 12 |                         </address>
 | 
|---|
| 13 |                 </affiliation>
 | 
|---|
| 14 |         </author>
 | 
|---|
| 15 |         &author.jht;
 | 
|---|
| 16 |         
 | 
|---|
| 17 |         <pubdate>12 Jul 2000</pubdate>
 | 
|---|
| 18 | </chapterinfo>
 | 
|---|
| 19 | 
 | 
|---|
| 20 | <title>Hosting a Microsoft Distributed File System Tree</title>
 | 
|---|
| 21 | 
 | 
|---|
| 22 | <sect1>
 | 
|---|
| 23 | <title>Features and Benefits</title>
 | 
|---|
| 24 | 
 | 
|---|
| 25 |         <para>
 | 
|---|
| 26 | <indexterm><primary>distributed file system</primary><see>DFS</see></indexterm>
 | 
|---|
| 27 | <indexterm><primary>physical locations</primary></indexterm>
 | 
|---|
| 28 | <indexterm><primary>higher availability</primary></indexterm>
 | 
|---|
| 29 | <indexterm><primary>load balancing</primary></indexterm>
 | 
|---|
| 30 | <indexterm><primary>logical directories</primary></indexterm>
 | 
|---|
| 31 |         The distributed file system (DFS) provides a means of separating the logical
 | 
|---|
| 32 |         view of files and directories that users see from the actual physical locations
 | 
|---|
| 33 |         of these resources on the network. It allows for higher availability, smoother
 | 
|---|
| 34 |         storage expansion, load balancing, and so on.
 | 
|---|
| 35 |         </para>
 | 
|---|
| 36 | 
 | 
|---|
| 37 |         <para>
 | 
|---|
| 38 | <indexterm><primary>DFS</primary></indexterm>
 | 
|---|
| 39 | <indexterm><primary>DFS tree</primary></indexterm>
 | 
|---|
| 40 | <indexterm><primary>DFS-aware</primary></indexterm>
 | 
|---|
| 41 |         For information about DFS, refer to the <ulink
 | 
|---|
| 42 |         url="http://www.microsoft.com/NTServer/nts/downloads/winfeatures/NTSDistrFile/AdminGuide.asp">Microsoft
 | 
|---|
| 43 |         documentation</ulink>.  This document explains how to host a DFS tree on a UNIX machine (for DFS-aware clients
 | 
|---|
| 44 |         to browse) using Samba.
 | 
|---|
| 45 |         </para>
 | 
|---|
| 46 | 
 | 
|---|
| 47 |         <para>
 | 
|---|
| 48 | <indexterm><primary>DFS server</primary></indexterm>
 | 
|---|
| 49 | <indexterm><primary>share-level</primary></indexterm>
 | 
|---|
| 50 | <indexterm><primary>DFS junction</primary></indexterm>
 | 
|---|
| 51 | <indexterm><primary>DFS-aware</primary></indexterm>
 | 
|---|
| 52 |         A Samba server can be made a DFS server by setting the global Boolean <smbconfoption name="host msdfs"/>
 | 
|---|
| 53 |         parameter in the &smb.conf; file. You designate a share as a DFS root using the share-level Boolean
 | 
|---|
| 54 |         <smbconfoption name="msdfs root"/> parameter. A DFS root directory on Samba hosts DFS links in the form of
 | 
|---|
| 55 |         symbolic links that point to other servers. For example, a symbolic link
 | 
|---|
| 56 |         <filename>junction->msdfs:storage1\share1</filename> in the share directory acts as the DFS junction. When
 | 
|---|
| 57 |         DFS-aware clients attempt to access the junction link, they are redirected to the storage location (in this
 | 
|---|
| 58 |         case, <parameter>\\storage1\share1</parameter>).
 | 
|---|
| 59 |         </para>
 | 
|---|
| 60 | 
 | 
|---|
| 61 |         <para>
 | 
|---|
| 62 | <indexterm><primary>DFS-aware</primary></indexterm>
 | 
|---|
| 63 | <indexterm><primary>DFS tree</primary></indexterm>
 | 
|---|
| 64 | <indexterm><primary>DFS links</primary></indexterm>
 | 
|---|
| 65 | <indexterm><primary>DFS</primary></indexterm>
 | 
|---|
| 66 |         DFS trees on Samba work with all DFS-aware clients ranging from Windows 95 to 200x.
 | 
|---|
| 67 |         <link linkend="dfscfg">The following sample configuration</link> shows how to setup a DFS tree on a Samba server.
 | 
|---|
| 68 |         In the <filename>/export/dfsroot</filename> directory, you set up your DFS links to 
 | 
|---|
| 69 |         other servers on the network.
 | 
|---|
| 70 | <screen>
 | 
|---|
| 71 | &rootprompt;<userinput>cd /export/dfsroot</userinput>
 | 
|---|
| 72 | &rootprompt;<userinput>chown root /export/dfsroot</userinput>
 | 
|---|
| 73 | &rootprompt;<userinput>chmod 755 /export/dfsroot</userinput>
 | 
|---|
| 74 | &rootprompt;<userinput>ln -s msdfs:storageA\\shareA linka</userinput>
 | 
|---|
| 75 | &rootprompt;<userinput>ln -s msdfs:serverB\\share,serverC\\share linkb</userinput>
 | 
|---|
| 76 | </screen>
 | 
|---|
| 77 | </para>
 | 
|---|
| 78 | 
 | 
|---|
| 79 | <example id="dfscfg">
 | 
|---|
| 80 | <title>smb.conf with DFS Configured</title>
 | 
|---|
| 81 | <smbconfblock>
 | 
|---|
| 82 | <smbconfsection name="[global]"/>
 | 
|---|
| 83 | <smbconfoption name="netbios name">&example.server.samba;</smbconfoption>
 | 
|---|
| 84 | <smbconfoption name="host msdfs  ">yes</smbconfoption>
 | 
|---|
| 85 | 
 | 
|---|
| 86 | <smbconfsection name="[dfs]"/>
 | 
|---|
| 87 | <smbconfoption name="path">/export/dfsroot</smbconfoption>
 | 
|---|
| 88 | <smbconfoption name="msdfs root">yes</smbconfoption>
 | 
|---|
| 89 | </smbconfblock>
 | 
|---|
| 90 | </example>
 | 
|---|
| 91 | 
 | 
|---|
| 92 |         <para>
 | 
|---|
| 93 | <indexterm><primary>DFS root</primary></indexterm>
 | 
|---|
| 94 | <indexterm><primary>msdfs links</primary></indexterm>
 | 
|---|
| 95 | <indexterm><primary>symbolic links</primary></indexterm>
 | 
|---|
| 96 |         You should set up the permissions and ownership of the directory acting as the DFS root so that only
 | 
|---|
| 97 |         designated users can create, delete, or modify the msdfs links. Also note that symlink names should be all
 | 
|---|
| 98 |         lowercase. This limitation exists to have Samba avoid trying all the case combinations to get at the link
 | 
|---|
| 99 |         name. Finally, set up the symbolic links to point to the network shares you want and start Samba.
 | 
|---|
| 100 |         </para>
 | 
|---|
| 101 | 
 | 
|---|
| 102 |         <para>
 | 
|---|
| 103 | <indexterm><primary>DFS-aware clients</primary></indexterm>
 | 
|---|
| 104 | <indexterm><primary>DFS tree</primary></indexterm>
 | 
|---|
| 105 |         Users on DFS-aware clients can now browse the DFS tree on the Samba server at
 | 
|---|
| 106 |         <constant>\\samba\dfs</constant>. Accessing links linka or linkb (which appear as directories to the client)
 | 
|---|
| 107 |         takes users directly to the appropriate shares on the network.
 | 
|---|
| 108 |         </para>
 | 
|---|
| 109 | 
 | 
|---|
| 110 | </sect1>
 | 
|---|
| 111 | 
 | 
|---|
| 112 | <sect1>
 | 
|---|
| 113 | <title>Common Errors</title>
 | 
|---|
| 114 |         <itemizedlist>
 | 
|---|
| 115 |                 <listitem><para>Windows clients need to be rebooted 
 | 
|---|
| 116 |                 if a previously mounted non-DFS share is made a DFS 
 | 
|---|
| 117 |                 root, or vice versa. A better way is to introduce a 
 | 
|---|
| 118 |                 new share and make it the DFS root.</para>
 | 
|---|
| 119 |                 </listitem>
 | 
|---|
| 120 |                 
 | 
|---|
| 121 |                 <listitem><para>Currently, there's a restriction that msdfs 
 | 
|---|
| 122 |                 symlink names should all be lowercase.</para>
 | 
|---|
| 123 |                 </listitem>
 | 
|---|
| 124 |                 
 | 
|---|
| 125 |                 <listitem><para>For security purposes, the directory 
 | 
|---|
| 126 |                 acting as the root of the DFS tree should have ownership 
 | 
|---|
| 127 |                 and permissions set so only designated users can 
 | 
|---|
| 128 |                 modify the symbolic links in the directory.</para>
 | 
|---|
| 129 |                 </listitem>
 | 
|---|
| 130 |         </itemizedlist>
 | 
|---|
| 131 | 
 | 
|---|
| 132 |         <sect2>
 | 
|---|
| 133 |                 <title>MSDFS UNIX Path Is Case-Critical</title>
 | 
|---|
| 134 | 
 | 
|---|
| 135 |                 <para>
 | 
|---|
| 136 |                 A network administrator sent advice to the Samba mailing list
 | 
|---|
| 137 |                 after long sessions trying to determine why DFS was not working.
 | 
|---|
| 138 |                 His advice is worth noting.
 | 
|---|
| 139 |                 </para>
 | 
|---|
| 140 | 
 | 
|---|
| 141 |                 <para><quote>
 | 
|---|
| 142 |                 I spent some time trying to figure out why my particular
 | 
|---|
| 143 |                 DFS root wasn't working. I noted in the documentation that
 | 
|---|
| 144 |                 the symlink should be in all lowercase. It should be
 | 
|---|
| 145 |                 amended that the entire path to the symlink should all be
 | 
|---|
| 146 |                 in lowercase as well.
 | 
|---|
| 147 |                 </quote></para>
 | 
|---|
| 148 | 
 | 
|---|
| 149 |                 <para>
 | 
|---|
| 150 |                 <quote>For example, I had a share defined as such:</quote>
 | 
|---|
| 151 |                 <smbconfblock>
 | 
|---|
| 152 |                 <smbconfsection name="[pub]"/>
 | 
|---|
| 153 |                 <smbconfoption name="path">/export/home/Shares/public_share</smbconfoption>
 | 
|---|
| 154 |                 <smbconfoption name="msdfs root">yes</smbconfoption>
 | 
|---|
| 155 |                 </smbconfblock>
 | 
|---|
| 156 |                 <quote>and I could not make my Windows 9x/Me (with the dfs client installed) follow this symlink:</quote>
 | 
|---|
| 157 |                 <screen>
 | 
|---|
| 158 |                 damage1 -> msdfs:damage\test-share
 | 
|---|
| 159 |                 </screen>
 | 
|---|
| 160 |                 </para>
 | 
|---|
| 161 | 
 | 
|---|
| 162 |                 <para>
 | 
|---|
| 163 |                 <quote>Running a debug level of 10 reveals:</quote>
 | 
|---|
| 164 |                 <programlisting>
 | 
|---|
| 165 |                 [2003/08/20 11:40:33, 5] msdfs/msdfs.c:is_msdfs_link(176)
 | 
|---|
| 166 |                   is_msdfs_link: /export/home/shares/public_share/* does not exist.
 | 
|---|
| 167 |                 </programlisting>
 | 
|---|
| 168 |                 <quote>Curious. So I changed the directory name from <constant>.../Shares/...</constant> to
 | 
|---|
| 169 |                 <constant>.../shares/...</constant> (along with my service definition) and it worked!</quote>
 | 
|---|
| 170 |                 </para>
 | 
|---|
| 171 | 
 | 
|---|
| 172 |         </sect2>
 | 
|---|
| 173 | 
 | 
|---|
| 174 | </sect1>
 | 
|---|
| 175 | 
 | 
|---|
| 176 | </chapter>
 | 
|---|