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
16 cvs -d :pserver:anonymous@fuse.cvs.sourceforge.net:/cvsroot/fuse co fuse
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.
35 You may also need to add '/usr/local/lib' to '/etc/ld.so.conf' and/or
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
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
58 For more details see the file 'INSTALL'
63 FUSE is made up of three main parts:
65 - A kernel filesystem module
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'
85 If it doesn't work out, please ask! Also see the file 'include/fuse.h' for
86 detailed documentation of the library interface.
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
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
110 Some options regarding mount policy can be set in the file
113 Currently these options are:
117 Set the maximum number of FUSE mounts allowed to non-root users.
122 Allow non-root users to specify the 'allow_other' or 'allow_root'
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
135 These are FUSE specific mount options that can be specified for all
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.
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.
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.
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.
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.
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.
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
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).
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).
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
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.
221 Perform reads asynchronously. This is the default
225 Perform all reads (even read-ahead) synchronously.
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
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):
252 Turns on debug information printing by the library.
256 Sets the filesystem source (first field in /etc/mtab). The default
261 Sets the filesystem type (third field in /etc/mtab). The default is
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".
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
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.
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
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.
302 Override the 'st_uid' field set by the filesystem.
306 Override the 'st_gid' field set by the filesystem.
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.
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")
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.
329 The timeout in seconds for which file/directory attributes are
330 cached. The default is 1.0 second.
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'
340 Allow requests to be interrupted. Turning on this option may result
341 in unexpected behavior, if the filesystem does not support request
346 Specify which signal number to send to the filesystem when a request
347 is interrupted. The default is 10 (USR1).
351 Add modules to the filesystem stack. Modules are pushed in the
352 order they are specified, with the original filesystem being on the
356 Modules distributed with fuse
357 -----------------------------
361 Perform file name character set conversion. Options are:
365 Character set to convert from (see iconv -l for a list of possible
366 values). Default is UTF-8.
370 Character set to convert to. Default is determined by the current
376 Prepend a given directory to each path. Options are:
380 Directory to prepend to all paths. This option is mandatory.
384 Transform absolute symlinks into relative
388 Do not transform absolute symlinks into relative. This is the default.
394 Please send bug reports to the <fuse-devel@lists.sourceforge.net>
397 The list is open, you need not be subscribed to post.