Disable old symbol versions if __UCLIBC__ is defined
[fuse.git] / README
blob4d9dd92ad84f0d799784ef9767e5b9b0fdcc344f
1 General Information
2 ===================
4 FUSE (Filesystem in Userspace) is a simple interface for userspace
5 programs to export a virtual filesystem to the Linux kernel.  FUSE
6 also aims to provide a secure method for non privileged users to
7 create and mount their own filesystem implementations.
9 You can download the source code releases from
11   http://sourceforge.net/projects/fuse
13 or alternatively you can use CVS to get the very latest development
14 version:
16   cvs -d :pserver:anonymous@fuse.cvs.sourceforge.net:/cvsroot/fuse co fuse
19 Dependencies
20 ============
22 Linux kernel version 2.6.X where X >= 9.
24 Alternatively a kernel module from FUSE release 2.5.* can be used with
25 this release, which supports kernels >= 2.4.21.
27 Installation
28 ============
30 ./configure
31 make
32 make install
33 modprobe fuse
35 You may also need to add '/usr/local/lib' to '/etc/ld.so.conf' and/or
36 run ldconfig.
38 Linux kernels 2.6.14 or later contain FUSE support out of the box.  If
39 FUSE support is detected, the kernel module in this package will not
40 be compiled.  It is possible to override this with the
41 '--enable-kernel-module' configure option.
43 If './configure' cannot find the kernel source or it says the kernel
44 source should be prepared, you may either try
46   ./configure --disable-kernel-module
48 or if your kernel does not already contain FUSE support, do the
49 following:
51   - Extract the kernel source to some directory
53   - Copy the running kernel's config (usually found in
54     /boot/config-X.Y.Z) to .config at the top of the source tree
56   - Run 'make prepare'
58 For more details see the file 'INSTALL'
60 How To Use
61 ==========
63 FUSE is made up of three main parts:
65  - A kernel filesystem module
67  - A userspace library
69  - A mount/unmount program
72 Here's how to create your very own virtual filesystem in five easy
73 steps (after installing FUSE):
75   1) Edit the file example/fusexmp.c to do whatever you want...
77   2) Build the fusexmp program
79   3) run 'example/fusexmp /mnt/fuse -d'
81   4) ls -al /mnt/fuse
83   5) Be glad
85 If it doesn't work out, please ask!  Also see the file 'include/fuse.h' for
86 detailed documentation of the library interface.
88 Security
89 ========
91 If you run 'make install', the fusermount program is installed
92 set-user-id to root.  This is done to allow normal users to mount
93 their own filesystem implementations.
95 There must however be some limitations, in order to prevent Bad User from
96 doing nasty things.  Currently those limitations are:
98   - The user can only mount on a mountpoint, for which it has write
99     permission
101   - The mountpoint is not a sticky directory which isn't owned by the
102     user (like /tmp usually is)
104   - No other user (including root) can access the contents of the mounted
105     filesystem.
107 Configuration
108 =============
110 Some options regarding mount policy can be set in the file
111 '/etc/fuse.conf'
113 Currently these options are:
115 mount_max = NNN
117   Set the maximum number of FUSE mounts allowed to non-root users.
118   The default is 1000.
120 user_allow_other
122   Allow non-root users to specify the 'allow_other' or 'allow_root'
123   mount options.
126 Mount options
127 =============
129 Most of the generic mount options described in 'man mount' are
130 supported (ro, rw, suid, nosuid, dev, nodev, exec, noexec, atime,
131 noatime, sync async, dirsync).  Filesystems are mounted with
132 '-onodev,nosuid' by default, which can only be overridden by a
133 privileged user.
135 These are FUSE specific mount options that can be specified for all
136 filesystems:
138 default_permissions
140   By default FUSE doesn't check file access permissions, the
141   filesystem is free to implement it's access policy or leave it to
142   the underlying file access mechanism (e.g. in case of network
143   filesystems).  This option enables permission checking, restricting
144   access based on file mode.  This is option is usually useful
145   together with the 'allow_other' mount option.
147 allow_other
149   This option overrides the security measure restricting file access
150   to the user mounting the filesystem.  So all users (including root)
151   can access the files.  This option is by default only allowed to
152   root, but this restriction can be removed with a configuration
153   option described in the previous section.
155 allow_root
157   This option is similar to 'allow_other' but file access is limited
158   to the user mounting the filesystem and root.  This option and
159   'allow_other' are mutually exclusive.
161 kernel_cache
163   This option disables flushing the cache of the file contents on
164   every open().  This should only be enabled on filesystems, where the
165   file data is never changed externally (not through the mounted FUSE
166   filesystem).  Thus it is not suitable for network filesystems and
167   other "intermediate" filesystems.
169   NOTE: if this option is not specified (and neither 'direct_io') data
170   is still cached after the open(), so a read() system call will not
171   always initiate a read operation.
173 auto_cache
175   This option enables automatic flushing of the data cache on open().
176   The cache will only be flushed if the modification time or the size
177   of the file has changed.
179 large_read
181   Issue large read requests.  This can improve performance for some
182   filesystems, but can also degrade performance.  This option is only
183   useful on 2.4.X kernels, as on 2.6 kernels requests size is
184   automatically determined for optimum performance.
186 direct_io
188   This option disables the use of page cache (file content cache) in
189   the kernel for this filesystem.  This has several affects:
191      - Each read() or write() system call will initiate one or more
192        read or write operations, data will not be cached in the
193        kernel.
195      - The return value of the read() and write() system calls will
196        correspond to the return values of the read and write
197        operations.  This is useful for example if the file size is not
198        known in advance (before reading it).
200 max_read=N
202   With this option the maximum size of read operations can be set.
203   The default is infinite.  Note that the size of read requests is
204   limited anyway to 32 pages (which is 128kbyte on i386).
206 max_readahead=N
208   Set the maximum number of bytes to read-ahead.  The default is
209   determined by the kernel.  On linux-2.6.22 or earlier it's 131072
210   (128kbytes)
212 max_write=N
214   Set the maximum number of bytes in a single write operation.  The
215   default is 128kbytes.  Note, that due to various limitations, the
216   size of write requests can be much smaller (4kbytes).  This
217   limitation will be removed in the future.
219 async_read
221   Perform reads asynchronously. This is the default
223 sync_read
225   Perform all reads (even read-ahead) synchronously.
227 hard_remove
229   The default behavior is that if an open file is deleted, the file is
230   renamed to a hidden file (.fuse_hiddenXXX), and only removed when
231   the file is finally released.  This relieves the filesystem
232   implementation of having to deal with this problem.  This option
233   disables the hiding behavior, and files are removed immediately in
234   an unlink operation (or in a rename operation which overwrites an
235   existing file).
237   It is recommended that you not use the hard_remove option. When
238   hard_remove is set, the following libc functions fail on unlinked
239   files (returning errno of ENOENT):
240      - read()
241      - write()
242      - fsync()
243      - close()
244      - f*xattr()
245      - ftruncate()
246      - fstat()
247      - fchmod()
248      - fchown()
250 debug
252   Turns on debug information printing by the library.
254 fsname=NAME
256   Sets the filesystem source (first field in /etc/mtab).  The default
257   is the program name.
259 subtype=TYPE
261   Sets the filesystem type (third field in /etc/mtab).  The default is
262   the program name.
264   If the kernel suppports it, /etc/mtab and /proc/mounts will show the
265   filesystem type as "fuse.TYPE"
267   If the kernel doesn't support subtypes, the source filed will be
268   "TYPE#NAME", or if fsname option is not specified, just "TYPE".
270 use_ino
272   Honor the 'st_ino' field in getattr() and fill_dir().  This value is
273   used to fill in the 'st_ino' field in the stat()/lstat()/fstat()
274   functions and the 'd_ino' field in the readdir() function.  The
275   filesystem does not have to guarantee uniqueness, however some
276   applications rely on this value being unique for the whole
277   filesystem.
279 readdir_ino
281   If 'use_ino' option is not given, still try to fill in the 'd_ino'
282   field in readdir().  If the name was previously looked up, and is
283   still in the cache, the inode number found there will be used.
284   Otherwise it will be set to '-1'.  If 'use_ino' option is given,
285   this option is ignored.
287 nonempty
289   Allows mounts over a non-empty file or directory.  By default these
290   mounts are rejected (from version 2.3.1) to prevent accidental
291   covering up of data, which could for example prevent automatic
292   backup.
294 umask=M
296   Override the permission bits in 'st_mode' set by the filesystem.
297   The resulting permission bits are the ones missing from the given
298   umask value.  The value is given in octal representation.
300 uid=N
302   Override the 'st_uid' field set by the filesystem.
304 gid=N
306   Override the 'st_gid' field set by the filesystem.
308 blkdev
310   Mount a filesystem backed by a block device.  This is a privileged
311   option.  The device must be specified with the 'fsname=NAME' option.
313 entry_timeout=T
315   The timeout in seconds for which name lookups will be cached. The
316   default is 1.0 second.  For all the timeout options, it is possible
317   to give fractions of a second as well (e.g. "-oentry_timeout=2.8")
319 negative_timeout=T
321   The timeout in seconds for which a negative lookup will be cached.
322   This means, that if file did not exist (lookup retuned ENOENT), the
323   lookup will only be redone after the timeout, and the file/directory
324   will be assumed to not exist until then.  The default is 0.0 second,
325   meaning that caching negative lookups are disabled.
327 attr_timeout=T
329   The timeout in seconds for which file/directory attributes are
330   cached.  The default is 1.0 second.
332 ac_attr_timeout=T
334   The timeout in seconds for which file attributes are cached for the
335   purpose of checking if "auto_cache" should flush the file data on
336   open.   The default is the value of 'attr_timeout'
338 intr
340   Allow requests to be interrupted.  Turning on this option may result
341   in unexpected behavior, if the filesystem does not support request
342   interruption.
344 intr_signal=NUM
346   Specify which signal number to send to the filesystem when a request
347   is interrupted.  The default is 10 (USR1).
349 modules=M1[:M2...]
351   Add modules to the filesystem stack.  Modules are pushed in the
352   order they are specified, with the original filesystem being on the
353   bottom of the stack.
356 Modules distributed with fuse
357 -----------------------------
359 iconv
360 `````
361 Perform file name character set conversion.  Options are:
363 from_code=CHARSET
365   Character set to convert from (see iconv -l for a list of possible
366   values).  Default is UTF-8.
368 to_code=CHARSET
370   Character set to convert to.  Default is determined by the current
371   locale.
374 subdir
375 ``````
376 Prepend a given directory to each path. Options are:
378 subdir=DIR
380   Directory to prepend to all paths.  This option is mandatory.
382 rellinks
384   Transform absolute symlinks into relative
386 norellinks
388   Do not transform absolute symlinks into relative.  This is the default.
391 Reporting bugs
392 ==============
394 Please send bug reports to the <fuse-devel@lists.sourceforge.net>
395 mailing list.
397 The list is open, you need not be subscribed to post.