| 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> | 
|---|