mirror of
https://github.com/libfuse/libfuse.git
synced 2024-11-27 06:04:27 +08:00
381 lines
11 KiB
Plaintext
381 lines
11 KiB
Plaintext
General Information
|
|
===================
|
|
|
|
FUSE (Filesystem in Userspace) is a simple interface for userspace
|
|
programs to export a virtual filesystem to the Linux kernel. FUSE
|
|
also aims to provide a secure method for non privileged users to
|
|
create and mount their own filesystem implementations.
|
|
|
|
You can download the source code releases from
|
|
|
|
http://sourceforge.net/projects/fuse
|
|
|
|
or alternatively you can use CVS to get the very latest development
|
|
version:
|
|
|
|
cvs -d :pserver:anonymous@fuse.cvs.sourceforge.net:/cvsroot/fuse co fuse
|
|
|
|
|
|
Dependencies
|
|
============
|
|
|
|
Linux kernel version 2.6.X where X >= 9.
|
|
|
|
Alternatively a kernel module from FUSE release 2.5.* can be used with
|
|
this release, which supports kernels >= 2.4.21.
|
|
|
|
Installation
|
|
============
|
|
|
|
./configure
|
|
make
|
|
make install
|
|
modprobe fuse
|
|
|
|
You may also need to add '/usr/local/lib' to '/etc/ld.so.conf' and/or
|
|
run ldconfig.
|
|
|
|
You'll also need a fuse kernel module, Linux kernels 2.6.14 or later
|
|
contain FUSE support.
|
|
|
|
For more details see the file 'INSTALL'
|
|
|
|
How To Use
|
|
==========
|
|
|
|
FUSE is made up of three main parts:
|
|
|
|
- A kernel filesystem module
|
|
|
|
- A userspace library
|
|
|
|
- A mount/unmount program
|
|
|
|
|
|
Here's how to create your very own virtual filesystem in five easy
|
|
steps (after installing FUSE):
|
|
|
|
1) Edit the file example/fusexmp.c to do whatever you want...
|
|
|
|
2) Build the fusexmp program
|
|
|
|
3) run 'example/fusexmp /mnt/fuse -d'
|
|
|
|
4) ls -al /mnt/fuse
|
|
|
|
5) Be glad
|
|
|
|
If it doesn't work out, please ask! Also see the file 'include/fuse.h' for
|
|
detailed documentation of the library interface.
|
|
|
|
Security
|
|
========
|
|
|
|
If you run 'make install', the fusermount program is installed
|
|
set-user-id to root. This is done to allow normal users to mount
|
|
their own filesystem implementations.
|
|
|
|
There must however be some limitations, in order to prevent Bad User from
|
|
doing nasty things. Currently those limitations are:
|
|
|
|
- The user can only mount on a mountpoint, for which it has write
|
|
permission
|
|
|
|
- The mountpoint is not a sticky directory which isn't owned by the
|
|
user (like /tmp usually is)
|
|
|
|
- No other user (including root) can access the contents of the mounted
|
|
filesystem.
|
|
|
|
Configuration
|
|
=============
|
|
|
|
Some options regarding mount policy can be set in the file
|
|
'/etc/fuse.conf'
|
|
|
|
Currently these options are:
|
|
|
|
mount_max = NNN
|
|
|
|
Set the maximum number of FUSE mounts allowed to non-root users.
|
|
The default is 1000.
|
|
|
|
user_allow_other
|
|
|
|
Allow non-root users to specify the 'allow_other' or 'allow_root'
|
|
mount options.
|
|
|
|
|
|
Mount options
|
|
=============
|
|
|
|
Most of the generic mount options described in 'man mount' are
|
|
supported (ro, rw, suid, nosuid, dev, nodev, exec, noexec, atime,
|
|
noatime, sync async, dirsync). Filesystems are mounted with
|
|
'-onodev,nosuid' by default, which can only be overridden by a
|
|
privileged user.
|
|
|
|
These are FUSE specific mount options that can be specified for all
|
|
filesystems:
|
|
|
|
default_permissions
|
|
|
|
By default FUSE doesn't check file access permissions, the
|
|
filesystem is free to implement it's access policy or leave it to
|
|
the underlying file access mechanism (e.g. in case of network
|
|
filesystems). This option enables permission checking, restricting
|
|
access based on file mode. This is option is usually useful
|
|
together with the 'allow_other' mount option.
|
|
|
|
allow_other
|
|
|
|
This option overrides the security measure restricting file access
|
|
to the user mounting the filesystem. So all users (including root)
|
|
can access the files. This option is by default only allowed to
|
|
root, but this restriction can be removed with a configuration
|
|
option described in the previous section.
|
|
|
|
allow_root
|
|
|
|
This option is similar to 'allow_other' but file access is limited
|
|
to the user mounting the filesystem and root. This option and
|
|
'allow_other' are mutually exclusive.
|
|
|
|
kernel_cache
|
|
|
|
This option disables flushing the cache of the file contents on
|
|
every open(). This should only be enabled on filesystems, where the
|
|
file data is never changed externally (not through the mounted FUSE
|
|
filesystem). Thus it is not suitable for network filesystems and
|
|
other "intermediate" filesystems.
|
|
|
|
NOTE: if this option is not specified (and neither 'direct_io') data
|
|
is still cached after the open(), so a read() system call will not
|
|
always initiate a read operation.
|
|
|
|
auto_cache
|
|
|
|
This option enables automatic flushing of the data cache on open().
|
|
The cache will only be flushed if the modification time or the size
|
|
of the file has changed.
|
|
|
|
large_read
|
|
|
|
Issue large read requests. This can improve performance for some
|
|
filesystems, but can also degrade performance. This option is only
|
|
useful on 2.4.X kernels, as on 2.6 kernels requests size is
|
|
automatically determined for optimum performance.
|
|
|
|
direct_io
|
|
|
|
This option disables the use of page cache (file content cache) in
|
|
the kernel for this filesystem. This has several affects:
|
|
|
|
- Each read() or write() system call will initiate one or more
|
|
read or write operations, data will not be cached in the
|
|
kernel.
|
|
|
|
- The return value of the read() and write() system calls will
|
|
correspond to the return values of the read and write
|
|
operations. This is useful for example if the file size is not
|
|
known in advance (before reading it).
|
|
|
|
max_read=N
|
|
|
|
With this option the maximum size of read operations can be set.
|
|
The default is infinite. Note that the size of read requests is
|
|
limited anyway to 32 pages (which is 128kbyte on i386).
|
|
|
|
max_readahead=N
|
|
|
|
Set the maximum number of bytes to read-ahead. The default is
|
|
determined by the kernel. On linux-2.6.22 or earlier it's 131072
|
|
(128kbytes)
|
|
|
|
max_write=N
|
|
|
|
Set the maximum number of bytes in a single write operation. The
|
|
default is 128kbytes. Note, that due to various limitations, the
|
|
size of write requests can be much smaller (4kbytes). This
|
|
limitation will be removed in the future.
|
|
|
|
async_read
|
|
|
|
Perform reads asynchronously. This is the default
|
|
|
|
sync_read
|
|
|
|
Perform all reads (even read-ahead) synchronously.
|
|
|
|
hard_remove
|
|
|
|
The default behavior is that if an open file is deleted, the file is
|
|
renamed to a hidden file (.fuse_hiddenXXX), and only removed when
|
|
the file is finally released. This relieves the filesystem
|
|
implementation of having to deal with this problem. This option
|
|
disables the hiding behavior, and files are removed immediately in
|
|
an unlink operation (or in a rename operation which overwrites an
|
|
existing file).
|
|
|
|
It is recommended that you not use the hard_remove option. When
|
|
hard_remove is set, the following libc functions fail on unlinked
|
|
files (returning errno of ENOENT):
|
|
- read()
|
|
- write()
|
|
- fsync()
|
|
- close()
|
|
- f*xattr()
|
|
- ftruncate()
|
|
- fstat()
|
|
- fchmod()
|
|
- fchown()
|
|
|
|
debug
|
|
|
|
Turns on debug information printing by the library.
|
|
|
|
fsname=NAME
|
|
|
|
Sets the filesystem source (first field in /etc/mtab). The default
|
|
is the program name.
|
|
|
|
subtype=TYPE
|
|
|
|
Sets the filesystem type (third field in /etc/mtab). The default is
|
|
the program name.
|
|
|
|
If the kernel suppports it, /etc/mtab and /proc/mounts will show the
|
|
filesystem type as "fuse.TYPE"
|
|
|
|
If the kernel doesn't support subtypes, the source filed will be
|
|
"TYPE#NAME", or if fsname option is not specified, just "TYPE".
|
|
|
|
use_ino
|
|
|
|
Honor the 'st_ino' field in getattr() and fill_dir(). This value is
|
|
used to fill in the 'st_ino' field in the stat()/lstat()/fstat()
|
|
functions and the 'd_ino' field in the readdir() function. The
|
|
filesystem does not have to guarantee uniqueness, however some
|
|
applications rely on this value being unique for the whole
|
|
filesystem.
|
|
|
|
readdir_ino
|
|
|
|
If 'use_ino' option is not given, still try to fill in the 'd_ino'
|
|
field in readdir(). If the name was previously looked up, and is
|
|
still in the cache, the inode number found there will be used.
|
|
Otherwise it will be set to '-1'. If 'use_ino' option is given,
|
|
this option is ignored.
|
|
|
|
nonempty
|
|
|
|
Allows mounts over a non-empty file or directory. By default these
|
|
mounts are rejected (from version 2.3.1) to prevent accidental
|
|
covering up of data, which could for example prevent automatic
|
|
backup.
|
|
|
|
umask=M
|
|
|
|
Override the permission bits in 'st_mode' set by the filesystem.
|
|
The resulting permission bits are the ones missing from the given
|
|
umask value. The value is given in octal representation.
|
|
|
|
uid=N
|
|
|
|
Override the 'st_uid' field set by the filesystem.
|
|
|
|
gid=N
|
|
|
|
Override the 'st_gid' field set by the filesystem.
|
|
|
|
blkdev
|
|
|
|
Mount a filesystem backed by a block device. This is a privileged
|
|
option. The device must be specified with the 'fsname=NAME' option.
|
|
|
|
entry_timeout=T
|
|
|
|
The timeout in seconds for which name lookups will be cached. The
|
|
default is 1.0 second. For all the timeout options, it is possible
|
|
to give fractions of a second as well (e.g. "-oentry_timeout=2.8")
|
|
|
|
negative_timeout=T
|
|
|
|
The timeout in seconds for which a negative lookup will be cached.
|
|
This means, that if file did not exist (lookup retuned ENOENT), the
|
|
lookup will only be redone after the timeout, and the file/directory
|
|
will be assumed to not exist until then. The default is 0.0 second,
|
|
meaning that caching negative lookups are disabled.
|
|
|
|
attr_timeout=T
|
|
|
|
The timeout in seconds for which file/directory attributes are
|
|
cached. The default is 1.0 second.
|
|
|
|
ac_attr_timeout=T
|
|
|
|
The timeout in seconds for which file attributes are cached for the
|
|
purpose of checking if "auto_cache" should flush the file data on
|
|
open. The default is the value of 'attr_timeout'
|
|
|
|
intr
|
|
|
|
Allow requests to be interrupted. Turning on this option may result
|
|
in unexpected behavior, if the filesystem does not support request
|
|
interruption.
|
|
|
|
intr_signal=NUM
|
|
|
|
Specify which signal number to send to the filesystem when a request
|
|
is interrupted. The default is 10 (USR1).
|
|
|
|
modules=M1[:M2...]
|
|
|
|
Add modules to the filesystem stack. Modules are pushed in the
|
|
order they are specified, with the original filesystem being on the
|
|
bottom of the stack.
|
|
|
|
|
|
Modules distributed with fuse
|
|
-----------------------------
|
|
|
|
iconv
|
|
`````
|
|
Perform file name character set conversion. Options are:
|
|
|
|
from_code=CHARSET
|
|
|
|
Character set to convert from (see iconv -l for a list of possible
|
|
values). Default is UTF-8.
|
|
|
|
to_code=CHARSET
|
|
|
|
Character set to convert to. Default is determined by the current
|
|
locale.
|
|
|
|
|
|
subdir
|
|
``````
|
|
Prepend a given directory to each path. Options are:
|
|
|
|
subdir=DIR
|
|
|
|
Directory to prepend to all paths. This option is mandatory.
|
|
|
|
rellinks
|
|
|
|
Transform absolute symlinks into relative
|
|
|
|
norellinks
|
|
|
|
Do not transform absolute symlinks into relative. This is the default.
|
|
|
|
|
|
Reporting bugs
|
|
==============
|
|
|
|
Please send bug reports to the <fuse-devel@lists.sourceforge.net>
|
|
mailing list.
|
|
|
|
The list is open, you need not be subscribed to post.
|