source: branches/samba-3.0/docs/htmldocs/Samba3-HOWTO/largefile.html

Last change on this file was 311, checked in by Herwig Bauernfeind, 16 years ago

Update 3.0 to final 3.0.36 (docs)

File size: 7.1 KB
Line 
1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 33. Handling Large Directories</title><link rel="stylesheet" href="../samba.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.74.0"><link rel="home" href="index.html" title="The Official Samba 3.0.x HOWTO and Reference Guide"><link rel="up" href="optional.html" title="Part III. Advanced Configuration"><link rel="prev" href="SambaHA.html" title="Chapter 32. High Availability"><link rel="next" href="cfgsmarts.html" title="Chapter 34. Advanced Configuration Techniques"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 33. Handling Large Directories</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="SambaHA.html">Prev</a> </td><th width="60%" align="center">Part III. Advanced Configuration</th><td width="20%" align="right"> <a accesskey="n" href="cfgsmarts.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="largefile"></a>Chapter 33. Handling Large Directories</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Jeremy</span> <span class="orgname">Samba Team</span> <span class="surname">Allison</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jra@samba.org">jra@samba.org</a>&gt;</code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">John</span> <span class="othername">H.</span> <span class="orgname">Samba Team</span> <span class="surname">Terpstra</span></h3><div class="affiliation"><span class="orgname">Samba Team<br></span><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:jht@samba.org">jht@samba.org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">March 5, 2005</p></div></div></div><p>
2<a class="indexterm" name="id2673338"></a>
3<a class="indexterm" name="id2673345"></a>
4<a class="indexterm" name="id2673352"></a>
5Samba-3.0.12 and later implements a solution for sites that have experienced performance degradation due to the
6problem of using Samba-3 with applications that need large numbers of files (100,000 or more) per directory.
7</p><p>
8<a class="indexterm" name="id2673366"></a>
9<a class="indexterm" name="id2673373"></a>
10The key was fixing the directory handling to read only the current list requested instead of the old
11(up to samba-3.0.11) behavior of reading the entire directory into memory before doling out names.
12Normally this would have broken OS/2 applications, which have very strange delete semantics, but by
13stealing logic from Samba4 (thanks, Tridge), the current code in 3.0.12 handles this correctly.
14</p><p>
15<a class="indexterm" name="id2673390"></a>
16<a class="indexterm" name="id2673397"></a>
17To set up an application that needs large numbers of files per directory in a way that does not
18damage performance unduly, follow these steps:
19</p><p>
20<a class="indexterm" name="id2673410"></a>
21First, you need to canonicalize all the files in the directory to have one case, upper or lower take your
22pick (I chose upper because all my files were already uppercase names). Then set up a new custom share for the
23application as follows:
24</p><table class="simplelist" border="0" summary="Simple list"><tr><td> </td></tr><tr><td><em class="parameter"><code>[bigshare]</code></em></td></tr><tr><td><a class="indexterm" name="id2673438"></a><em class="parameter"><code>path = /data/manyfilesdir</code></em></td></tr><tr><td><a class="indexterm" name="id2673449"></a><em class="parameter"><code>read only = no</code></em></td></tr><tr><td><a class="indexterm" name="id2673461"></a><em class="parameter"><code>case sensitive = True</code></em></td></tr><tr><td><a class="indexterm" name="id2673473"></a><em class="parameter"><code>default case = upper</code></em></td></tr><tr><td><a class="indexterm" name="id2673485"></a><em class="parameter"><code>preserve case = no</code></em></td></tr><tr><td><a class="indexterm" name="id2673496"></a><em class="parameter"><code>short preserve case = no</code></em></td></tr></table><p>
25</p><p>
26<a class="indexterm" name="id2673512"></a>
27<a class="indexterm" name="id2673518"></a>
28<a class="indexterm" name="id2673525"></a>
29Of course, use your own path and settings, but set the case options to match the case of all the files in your
30directory. The path should point at the large directory needed for the application any new files created in
31there and in any paths under it will be forced by smbd into uppercase, but smbd will no longer have to scan
32the directory for names: it knows that if a file does not exist in uppercase, then it doesn't exist at all.
33</p><p>
34<a class="indexterm" name="id2673546"></a>
35<a class="indexterm" name="id2673552"></a>
36<a class="indexterm" name="id2673559"></a>
37The secret to this is really in the <a class="link" href="smb.conf.5.html#CASESENSITIVE" target="_top">case sensitive = True</a>
38line. This tells smbd never to scan for case-insensitive versions of names. So if an application asks for a file
39called <code class="filename">FOO</code>, and it cannot be found by a simple stat call, then smbd will return file not
40found immediately without scanning the containing directory for a version of a different case. The other
41<code class="filename">xxx case xxx</code> lines make this work by forcing a consistent case on all files created by
42<span class="application">smbd</span>.
43</p><p>
44<a class="indexterm" name="id2673606"></a>
45<a class="indexterm" name="id2673612"></a>
46<a class="indexterm" name="id2673619"></a>
47Remember, all files and directories under the <em class="parameter"><code>path</code></em> directory must be in uppercase
48with this <code class="filename">smb.conf</code> stanza because <span class="application">smbd</span> will not be able to find lowercase filenames with these settings. Also
49note that this is done on a per-share basis, allowing this parameter to be set only for a share servicing an application with
50this problematic behavior (using large numbers of entries in a directory) the rest of your <span class="application">smbd</span> shares
51don't need to be affected.
52</p><p>
53This makes smbd much faster when dealing with large directories. My test case has over 100,000 files, and
54smbd now deals with this very efficiently.
55</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="SambaHA.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="optional.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="cfgsmarts.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 32. High Availability </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 34. Advanced Configuration Techniques</td></tr></table></div></body></html>
Note: See TracBrowser for help on using the repository browser.