summaryrefslogtreecommitdiff
path: root/package/aufs2-util/src/aufs.in.5
diff options
context:
space:
mode:
Diffstat (limited to 'package/aufs2-util/src/aufs.in.5')
-rw-r--r--package/aufs2-util/src/aufs.in.51684
1 files changed, 0 insertions, 1684 deletions
diff --git a/package/aufs2-util/src/aufs.in.5 b/package/aufs2-util/src/aufs.in.5
deleted file mode 100644
index 0cbb14487..000000000
--- a/package/aufs2-util/src/aufs.in.5
+++ /dev/null
@@ -1,1684 +0,0 @@
-.\".so aufs.tmac
-.
-.eo
-.de TQ
-.br
-.ns
-.TP \$1
-..
-.de Bu
-.IP \(bu 4
-..
-.ec
-.\" end of macro definitions
-.
-.\" ----------------------------------------------------------------------
-.TH aufs 5 \*[AUFS_VERSION] Linux "Linux Aufs User's Manual"
-.SH NAME
-aufs \- advanced multi layered unification filesystem. version \*[AUFS_VERSION]
-
-.\" ----------------------------------------------------------------------
-.SH DESCRIPTION
-Aufs is a stackable unification filesystem such as Unionfs, which unifies
-several directories and provides a merged single directory.
-In the early days, aufs was entirely re-designed and re-implemented
-Unionfs Version 1.x series. After
-many original ideas, approaches and improvements, it
-becomes totally different from Unionfs while keeping the basic features.
-See Unionfs Version 1.x series for the basic features.
-Recently, Unionfs Version 2.x series begin taking some of same
-approaches to aufs's.
-
-.\" ----------------------------------------------------------------------
-.SH MOUNT OPTIONS
-At mount-time, the order of interpreting options is,
-.RS
-.Bu
-simple flags, except xino/noxino and udba=inotify
-.Bu
-branches
-.Bu
-xino/noxino
-.Bu
-udba=inotify
-.RE
-
-At remount-time,
-the options are interpreted in the given order,
-e.g. left to right.
-.RS
-.Bu
-create or remove
-whiteout-base(\*[AUFS_WH_BASE]) and
-whplink-dir(\*[AUFS_WH_PLINKDIR]) if necessary
-.RE
-.
-.TP
-.B br:BRANCH[:BRANCH ...] (dirs=BRANCH[:BRANCH ...])
-Adds new branches.
-(cf. Branch Syntax).
-
-Aufs rejects the branch which is an ancestor or a descendant of another
-branch. It is called overlapped. When the branch is loopback-mounted
-directory, aufs also checks the source fs-image file of loopback
-device. If the source file is a descendant of another branch, it will
-be rejected too.
-
-After mounting aufs or adding a branch, if you move a branch under
-another branch and make it descendant of another branch, aufs will not
-work correctly.
-.
-.TP
-.B [ add | ins ]:index:BRANCH
-Adds a new branch.
-The index begins with 0.
-Aufs creates
-whiteout-base(\*[AUFS_WH_BASE]) and
-whplink-dir(\*[AUFS_WH_PLINKDIR]) if necessary.
-
-If there is the same named file on the lower branch (larger index),
-aufs will hide the lower file.
-You can only see the highest file.
-You will be confused if the added branch has whiteouts (including
-diropq), they may or may not hide the lower entries.
-.\" It is recommended to make sure that the added branch has no whiteout.
-
-Even if a process have once mapped a file by mmap(2) with MAP_SHARED
-and the same named file exists on the lower branch,
-the process still refers the file on the lower(hidden)
-branch after adding the branch.
-If you want to update the contents of a process address space after
-adding, you need to restart your process or open/mmap the file again.
-.\" Usually, such files are executables or shared libraries.
-(cf. Branch Syntax).
-.
-.TP
-.B del:dir
-Removes a branch.
-Aufs does not remove
-whiteout-base(\*[AUFS_WH_BASE]) and
-whplink-dir(\*[AUFS_WH_PLINKDIR]) automatically.
-For example, when you add a RO branch which was unified as RW, you
-will see whiteout-base or whplink-dir on the added RO branch.
-
-If a process is referencing the file/directory on the deleting branch
-(by open, mmap, current working directory, etc.), aufs will return an
-error EBUSY.
-.
-.TP
-.B mod:BRANCH
-Modifies the permission flags of the branch.
-Aufs creates or removes
-whiteout-base(\*[AUFS_WH_BASE]) and/or
-whplink-dir(\*[AUFS_WH_PLINKDIR]) if necessary.
-
-If the branch permission is been changing `rw' to `ro', and a process
-is mapping a file by mmap(2)
-.\" with MAP_SHARED
-on the branch, the process may or may not
-be able to modify its mapped memory region after modifying branch
-permission flags.
-Additioanlly when you enable CONFIG_IMA (in linux-2.6.30 and later), IMA
-may produce some wrong messages. But this is equivalent when the
-filesystem is changed `ro' in emergency.
-(cf. Branch Syntax).
-.
-.TP
-.B append:BRANCH
-equivalent to `add:(last index + 1):BRANCH'.
-(cf. Branch Syntax).
-.
-.TP
-.B prepend:BRANCH
-equivalent to `add:0:BRANCH.'
-(cf. Branch Syntax).
-.
-.TP
-.B xino=filename
-Use external inode number bitmap and translation table.
-When CONFIG_AUFS_EXPORT is enabled, external inode generation table too.
-It is set to
-<FirstWritableBranch>/\*[AUFS_XINO_FNAME] by default, or
-\*[AUFS_XINO_DEFPATH].
-Comma character in filename is not allowed.
-
-The files are created per an aufs and per a branch filesystem, and
-unlinked. So you
-cannot find this file, but it exists and is read/written frequently by
-aufs.
-(cf. External Inode Number Bitmap, Translation Table and Generation Table).
-
-If you enable CONFIG_SYSFS, the path of xino files are not shown in
-/proc/mounts (and /etc/mtab), instead it is shown in
-<sysfs>/fs/aufs/si_<id>/xi_path.
-Otherwise, it is shown in /proc/mounts unless it is not the default
-path.
-.
-.TP
-.B noxino
-Stop using external inode number bitmap and translation table.
-
-If you use this option,
-Some applications will not work correctly.
-.\" And pseudo link feature will not work after the inode cache is
-.\" shrunk.
-(cf. External Inode Number Bitmap, Translation Table and Generation Table).
-.
-.TP
-.B trunc_xib
-Truncate the external inode number bitmap file. The truncation is done
-automatically when you delete a branch unless you do not specify
-`notrunc_xib' option.
-(cf. External Inode Number Bitmap, Translation Table and Generation Table).
-.
-.TP
-.B notrunc_xib
-Stop truncating the external inode number bitmap file when you delete
-a branch.
-(cf. External Inode Number Bitmap, Translation Table and Generation Table).
-.
-.TP
-.B create_policy | create=CREATE_POLICY
-.TQ
-.B copyup_policy | copyup | cpup=COPYUP_POLICY
-Policies to select one among multiple writable branches. The default
-values are `create=tdp' and `cpup=tdp'.
-link(2) and rename(2) systemcalls have an exception. In aufs, they
-try keeping their operations in the branch where the source exists.
-(cf. Policies to Select One among Multiple Writable Branches).
-.
-.TP
-.B verbose | v
-Print some information.
-Currently, it is only busy file (or inode) at deleting a branch.
-.
-.TP
-.B noverbose | quiet | q | silent
-Disable `verbose' option.
-This is default value.
-.
-.TP
-.B sum
-df(1)/statfs(2) returns the total number of blocks and inodes of
-all branches.
-Note that there are cases that systemcalls may return ENOSPC, even if
-df(1)/statfs(2) shows that aufs has some free space/inode.
-.
-.TP
-.B nosum
-Disable `sum' option.
-This is default value.
-.
-.TP
-.B dirwh=N
-Watermark to remove a dir actually at rmdir(2) and rename(2).
-
-If the target dir which is being removed or renamed (destination dir)
-has a huge number of whiteouts, i.e. the dir is empty logically but
-physically, the cost to remove/rename the single
-dir may be very high.
-It is
-required to unlink all of whiteouts internally before issuing
-rmdir/rename to the branch.
-To reduce the cost of single systemcall,
-aufs renames the target dir to a whiteout-ed temporary name and
-invokes a pre-created
-kernel thread to remove whiteout-ed children and the target dir.
-The rmdir/rename systemcall returns just after kicking the thread.
-
-When the number of whiteout-ed children is less than the value of
-dirwh, aufs remove them in a single systemcall instead of passing
-another thread.
-This value is ignored when the branch is NFS.
-The default value is \*[AUFS_DIRWH_DEF].
-.\" .
-.\" .TP
-.\" .B rdcache=N
-.
-.TP
-.B rdblk=N
-Specifies a size of internal VDIR block which is allocated at a time in
-byte.
-The VDIR block will be allocated several times when necessary. If your
-directory has millions of files, you may want to expand this size.
-The default value is defined as \*[AUFS_RDBLK_DEF].
-The size has to be lager than NAME_MAX (usually 255) and kmalloc\-able
-(the maximum limit depends on your system. at least 128KB is available
-for every system).
-Whenever you can reset the value to default by specifying rdblk=def.
-(cf. Virtual or Vertical Directory Block).
-.
-.TP
-.B rdhash=N
-Specifies a size of internal VDIR hash table which is used to compare
-the file names under the same named directory on multiple branches.
-The VDIR hash table will be allocated in readdir(3)/getdents(2),
-rmdir(2) and rename(2) for the existing target directory. If your
-directory has millions of files, you may want to expand this size.
-The default value is defined as \*[AUFS_RDHASH_DEF].
-The size has to be lager than zero, and it will be multiplied by 4 or 8
-(for 32\-bit and 64\-bit respectively, currently). The result must be
-kmalloc\-able
-(the maximum limit depends on your system. at least 128KB is available
-for every system).
-Whenever you can reset the value to default by specifying rdhash=def.
-(cf. Virtual or Vertical Directory Block).
-.
-.TP
-.B plink
-.TQ
-.B noplink
-Specifies to use `pseudo link' feature or not.
-The default is `plink' which means use this feature.
-(cf. Pseudo Link)
-.
-.TP
-.B clean_plink
-Removes all pseudo-links in memory.
-In order to make pseudo-link permanent, use
-`auplink' utility just before one of these operations,
-unmounting aufs,
-using `ro' or `noplink' mount option,
-deleting a branch from aufs,
-adding a branch into aufs,
-or changing your writable branch as readonly.
-If you installed both of /sbin/mount.aufs and /sbin/umount.aufs, and your
-mount(8) and umount(8) support them,
-`auplink' utility will be executed automatically and flush pseudo-links.
-(cf. Pseudo Link)
-.
-.TP
-.B udba=none | reval | inotify
-Specifies the level of UDBA (User's Direct Branch Access) test.
-(cf. User's Direct Branch Access and Inotify Limitation).
-.
-.TP
-.B diropq=whiteouted | w | always | a
-Specifies whether mkdir(2) and rename(2) dir case make the created directory
-`opaque' or not.
-In other words, to create `\*[AUFS_WH_DIROPQ]' under the created or renamed
-directory, or not to create.
-When you specify diropq=w or diropq=whiteouted, aufs will not create
-it if the
-directory was not whiteouted or opaqued. If the directory was whiteouted
-or opaqued, the created or renamed directory will be opaque.
-When you specify diropq=a or diropq==always, aufs will always create
-it regardless
-the directory was whiteouted/opaqued or not.
-The default value is diropq=w, it means not to create when it is unnecessary.
-If you define CONFIG_AUFS_COMPAT at aufs compiling time, the default will be
-diropq=a.
-You need to consider this option if you are planning to add a branch later
-since `diropq' affects the same named directory on the added branch.
-.
-.TP
-.B warn_perm
-.TQ
-.B nowarn_perm
-Adding a branch, aufs will issue a warning about uid/gid/permission of
-the adding branch directory,
-when they differ from the existing branch's. This difference may or
-may not impose a security risk.
-If you are sure that there is no problem and want to stop the warning,
-use `nowarn_perm' option.
-The default is `warn_perm' (cf. DIAGNOSTICS).
-.
-.TP
-.B shwh
-.TQ
-.B noshwh
-By default (noshwh), aufs doesn't show the whiteouts and
-they just hide the same named entries in the lower branches. The
-whiteout itself also never be appeared.
-If you enable CONFIG_AUFS_SHWH and specify `shwh' option, aufs
-will show you the name of whiteouts
-with keeping its feature to hide the lowers.
-Honestly speaking, I am rather confused with this `visible whiteouts.'
-But a user who originally requested this feature wrote a nice how-to
-document about this feature. See Tips file in the aufs CVS tree.
-
-.\" ----------------------------------------------------------------------
-.SH Module Parameters
-.TP
-.B nwkq=N
-The number of kernel thread named \*[AUFS_WKQ_NAME].
-
-Those threads stay in the system while the aufs module is loaded,
-and handle the special I/O requests from aufs.
-The default value is \*[AUFS_NWKQ_DEF].
-
-The special I/O requests from aufs include a part of copy-up, lookup,
-directory handling, pseudo-link, xino file operations and the
-delegated access to branches.
-For example, Unix filesystems allow you to rmdir(2) which has no write
-permission bit, if its parent directory has write permission bit. In aufs, the
-removing directory may or may not have whiteout or `dir opaque' mark as its
-child. And aufs needs to unlink(2) them before rmdir(2).
-Therefore aufs delegates the actual unlink(2) and rmdir(2) to another kernel
-thread which has been created already and has a superuser privilege.
-
-If you enable CONFIG_SYSFS, you can check this value through
-<sysfs>/module/aufs/parameters/nwkq.
-
-.
-.TP
-.B brs=1 | 0
-Specifies to use the branch path data file under sysfs or not.
-
-If the number of your branches is large or their path is long
-and you meet the limitation of mount(8) ro /etc/mtab, you need to
-enable CONFIG_SYSFS and set aufs module parameter brs=1.
-
-When this parameter is set as 1, aufs does not show `br:' (or dirs=)
-mount option through /proc/mounts (and /etc/mtab). So you can
-keep yourself from the page limitation of
-mount(8) or /etc/mtab.
-Aufs shows branch paths through <sysfs>/fs/aufs/si_XXX/brNNN.
-Actually the file under sysfs has also a size limitation, but I don't
-think it is harmful.
-
-There is one more side effect in setting 1 to this parameter.
-If you rename your branch, the branch path written in /etc/mtab will be
-obsoleted and the future remount will meet some error due to the
-unmatched parameters (Remember that mount(8) may take the options from
-/etc/mtab and pass them to the systemcall).
-If you set 1, /etc/mtab will not hold the branch path and you will not
-meet such trouble. On the other hand, the entries for the
-branch path under sysfs are generated dynamically. So it must not be obsoleted.
-But I don't think users want to rename branches so often.
-
-If CONFIG_SYSFS is disable, this parameter is always set to 0.
-.
-.TP
-.B sysrq=key
-Specifies MagicSysRq key for debugging aufs.
-You need to enable both of CONFIG_MAGIC_SYSRQ and CONFIG_AUFS_DEBUG.
-Currently this is for developers only.
-The default is `a'.
-.
-.TP
-.B debug= 0 | 1
-Specifies disable(0) or enable(1) debug print in aufs.
-This parameter can be changed dynamically.
-You need to enable CONFIG_AUFS_DEBUG.
-Currently this is for developers only.
-The default is `0' (disable).
-
-.\" ----------------------------------------------------------------------
-.SH Entries under Sysfs and Debugfs
-See linux/Documentation/ABI/*/{sys,debug}fs-aufs.
-
-.\" ----------------------------------------------------------------------
-.SH Branch Syntax
-.TP
-.B dir_path[ =permission [ + attribute ] ]
-.TQ
-.B permission := rw | ro | rr
-.TQ
-.B attribute := wh | nolwh
-dir_path is a directory path.
-The keyword after `dir_path=' is a
-permission flags for that branch.
-Comma, colon and the permission flags string (including `=')in the path
-are not allowed.
-
-Any filesystem can be a branch, But some are not accepted such like
-sysfs, procfs and unionfs.
-If you specify such filesystems as an aufs branch, aufs will return an error
-saying it is unsupported.
-
-Cramfs in linux stable release has strange inodes and it makes aufs
-confused. For example,
-.nf
-$ mkdir -p w/d1 w/d2
-$ > w/z1
-$ > w/z2
-$ mkcramfs w cramfs
-$ sudo mount -t cramfs -o ro,loop cramfs /mnt
-$ find /mnt -ls
- 76 1 drwxr-xr-x 1 jro 232 64 Jan 1 1970 /mnt
- 1 1 drwxr-xr-x 1 jro 232 0 Jan 1 1970 /mnt/d1
- 1 1 drwxr-xr-x 1 jro 232 0 Jan 1 1970 /mnt/d2
- 1 1 -rw-r--r-- 1 jro 232 0 Jan 1 1970 /mnt/z1
- 1 1 -rw-r--r-- 1 jro 232 0 Jan 1 1970 /mnt/z2
-.fi
-
-All these two directories and two files have the same inode with one
-as their link count. Aufs cannot handle such inode correctly.
-Currently, aufs involves a tiny workaround for such inodes. But some
-applications may not work correctly since aufs inode number for such
-inode will change silently.
-If you do not have any empty files, empty directories or special files,
-inodes on cramfs will be all fine.
-
-A branch should not be shared as the writable branch between multiple
-aufs. A readonly branch can be shared.
-
-The maximum number of branches is configurable at compile time (127 by
-default).
-
-When an unknown permission or attribute is given, aufs sets ro to that
-branch silently.
-
-.SS Permission
-.
-.TP
-.B rw
-Readable and writable branch. Set as default for the first branch.
-If the branch filesystem is mounted as readonly, you cannot set it `rw.'
-.\" A filesystem which does not support link(2) and i_op\->setattr(), for
-.\" example FAT, will not be used as the writable branch.
-.
-.TP
-.B ro
-Readonly branch and it has no whiteouts on it.
-Set as default for all branches except the first one. Aufs never issue
-both of write operation and lookup operation for whiteout to this branch.
-.
-.TP
-.B rr
-Real readonly branch, special case of `ro', for natively readonly
-branch. Assuming the branch is natively readonly, aufs can optimize
-some internal operation. For example, if you specify `udba=inotify'
-option, aufs does not set inotify for the things on rr branch.
-Set by default for a branch whose fs-type is either `iso9660',
-`cramfs' or `romfs' (and `squashfs' for linux\-2.6.29 and later).
-
-When your branch exists on slower device and you have some
-capacity on your hdd, you may want to try ulobdev tool in ULOOP sample.
-It can cache the contents of the real devices on another faster device,
-so you will be able to get the better access performance.
-The ulobdev tool is for a generic block device, and the ulohttp is for a
-filesystem image on http server.
-If you want to spin down your hdd to save the
-battery life or something, then you may want to use ulobdev to save the
-access to the hdd, too.
-See $AufsCVS/sample/uloop in detail.
-
-.SS Attribute
-.
-.TP
-.B wh
-Readonly branch and it has/might have whiteouts on it.
-Aufs never issue write operation to this branch, but lookup for whiteout.
-Use this as `<branch_dir>=ro+wh'.
-.
-.TP
-.B nolwh
-Usually, aufs creates a whiteout as a hardlink on a writable
-branch. This attributes prohibits aufs to create the hardlinked
-whiteout, including the source file of all hardlinked whiteout
-(\*[AUFS_WH_BASE].)
-If you do not like a hardlink, or your writable branch does not support
-link(2), then use this attribute.
-But I am afraid a filesystem which does not support link(2) natively
-will fail in other place such as copy-up.
-Use this as `<branch_dir>=rw+nolwh'.
-Also you may want to try `noplink' mount option, while it is not recommended.
-
-.\" .SS FUSE as a branch
-.\" A FUSE branch needs special attention.
-.\" The struct fuse_operations has a statfs operation. It is OK, but the
-.\" parameter is struct statvfs* instead of struct statfs*. So almost
-.\" all user\-space implementation will call statvfs(3)/fstatvfs(3) instead of
-.\" statfs(2)/fstatfs(2).
-.\" In glibc, [f]statvfs(3) issues [f]statfs(2), open(2)/read(2) for
-.\" /proc/mounts,
-.\" and stat(2) for the mountpoint. With this situation, a FUSE branch will
-.\" cause a deadlock in creating something in aufs. Here is a sample
-.\" scenario,
-.\" .\" .RS
-.\" .\" .IN -10
-.\" .Bu
-.\" create/modify a file just under the aufs root dir.
-.\" .Bu
-.\" aufs acquires a write\-lock for the parent directory, ie. the root dir.
-.\" .Bu
-.\" A library function or fuse internal may call statfs for a fuse branch.
-.\" The create=mfs mode in aufs will surely call statfs for each writable
-.\" branches.
-.\" .Bu
-.\" FUSE in kernel\-space converts and redirects the statfs request to the
-.\" user\-space.
-.\" .Bu
-.\" the user\-space statfs handler will call [f]statvfs(3).
-.\" .Bu
-.\" the [f]statvfs(3) in glibc will access /proc/mounts and issue
-.\" stat(2) for the mountpoint. But those require a read\-lock for the aufs
-.\" root directory.
-.\" .Bu
-.\" Then a deadlock occurs.
-.\" .\" .RE 1
-.\" .\" .IN
-.\"
-.\" In order to avoid this deadlock, I would suggest not to call
-.\" [f]statvfs(3) from fuse. Here is a sample code to do this.
-.\" .nf
-.\" struct statvfs stvfs;
-.\"
-.\" main()
-.\" {
-.\" statvfs(..., &stvfs)
-.\" or
-.\" fstatvfs(..., &stvfs)
-.\" stvfs.f_fsid = 0
-.\" }
-.\"
-.\" statfs_handler(const char *path, struct statvfs *arg)
-.\" {
-.\" struct statfs stfs
-.\"
-.\" memcpy(arg, &stvfs, sizeof(stvfs))
-.\"
-.\" statfs(..., &stfs)
-.\" or
-.\" fstatfs(..., &stfs)
-.\"
-.\" arg->f_bfree = stfs.f_bfree
-.\" arg->f_bavail = stfs.f_bavail
-.\" arg->f_ffree = stfs.f_ffree
-.\" arg->f_favail = /* any value */
-.\" }
-.\" .fi
-
-.\" ----------------------------------------------------------------------
-.SH External Inode Number Bitmap, Translation Table and Generation Table (xino)
-Aufs uses one external bitmap file and one external inode number
-translation table files per an aufs and per a branch
-filesystem by default.
-Additionally when CONFIG_AUFS_EXPORT is enabled, one external inode
-generation table is added.
-The bitmap (and the generation table) is for recycling aufs inode number
-and the others
-are a table for converting an inode number on a branch to
-an aufs inode number. The default path
-is `first writable branch'/\*[AUFS_XINO_FNAME].
-If there is no writable branch, the
-default path
-will be \*[AUFS_XINO_DEFPATH].
-.\" A user who executes mount(8) needs the privilege to create xino
-.\" file.
-
-If you enable CONFIG_SYSFS, the path of xino files are not shown in
-/proc/mounts (and /etc/mtab), instead it is shown in
-<sysfs>/fs/aufs/si_<id>/xi_path.
-Otherwise, it is shown in /proc/mounts unless it is not the default
-path.
-
-Those files are always opened and read/write by aufs frequently.
-If your writable branch is on flash memory device, it is recommended
-to put xino files on other than flash memory by specifying `xino='
-mount option.
-
-The
-maximum file size of the bitmap is, basically, the amount of the
-number of all the files on all branches divided by 8 (the number of
-bits in a byte).
-For example, on a 4KB page size system, if you have 32,768 (or
-2,599,968) files in aufs world,
-then the maximum file size of the bitmap is 4KB (or 320KB).
-
-The
-maximum file size of the table will
-be `max inode number on the branch x size of an inode number'.
-For example in 32bit environment,
-
-.nf
-$ df -i /branch_fs
-/dev/hda14 2599968 203127 2396841 8% /branch_fs
-.fi
-
-and /branch_fs is an branch of the aufs. When the inode number is
-assigned contiguously (without `hole'), the maximum xino file size for
-/branch_fs will be 2,599,968 x 4 bytes = about 10 MB. But it might not be
-allocated all of disk blocks.
-When the inode number is assigned discontinuously, the maximum size of
-xino file will be the largest inode number on a branch x 4 bytes.
-Additionally, the file size is limited to LLONG_MAX or the s_maxbytes
-in filesystem's superblock (s_maxbytes may be smaller than
-LLONG_MAX). So the
-support-able largest inode number on a branch is less than
-2305843009213693950 (LLONG_MAX/4\-1).
-This is the current limitation of aufs.
-On 64bit environment, this limitation becomes more strict and the
-supported largest inode number is less than LLONG_MAX/8\-1.
-
-The xino files are always hidden, i.e. removed. So you cannot
-do `ls \-l xino_file'.
-If you enable CONFIG_DEBUG_FS, you can check these information through
-<debugfs>/aufs/<si_id>/{xib,xi[0-9]*,xigen}. xib is for the bitmap file,
-xi0 ix for the first branch, and xi1 is for the next. xigen is for the
-generation table.
-xib and xigen are in the format of,
-
-.nf
-<blocks>x<block size> <file size>
-.fi
-
-Note that a filesystem usually has a
-feature called pre-allocation, which means a number of
-blocks are allocated automatically, and then deallocated
-silently when the filesystem thinks they are unnecessary.
-You do not have to be surprised the sudden changes of the number of
-blocks, when your filesystem which xino files are placed supports the
-pre-allocation feature.
-
-The rests are hidden xino file information in the format of,
-
-.nf
-<file count>, <blocks>x<block size> <file size>
-.fi
-
-If the file count is larger than 1, it means some of your branches are
-on the same filesystem and the xino file is shared by them.
-Note that the file size may not be equal to the actual consuming blocks
-since xino file is a sparse file, i.e. a hole in a file which does not
-consume any disk blocks.
-
-Once you unmount aufs, the xino files for that aufs are totally gone.
-It means that the inode number is not permanent across umount or
-shutdown.
-
-The xino files should be created on the filesystem except NFS.
-If your first writable branch is NFS, you will need to specify xino
-file path other than NFS.
-Also if you are going to remove the branch where xino files exist or
-change the branch permission to readonly, you need to use xino option
-before del/mod the branch.
-
-The bitmap file can be truncated.
-For example, if you delete a branch which has huge number of files,
-many inode numbers will be recycled and the bitmap will be truncated
-to smaller size. Aufs does this automatically when a branch is
-deleted.
-You can truncate it anytime you like if you specify `trunc_xib' mount
-option. But when the accessed inode number was not deleted, nothing
-will be truncated.
-If you do not want to truncate it (it may be slow) when you delete a
-branch, specify `notrunc_xib' after `del' mount option.
-
-If you do not want to use xino, use noxino mount option. Use this
-option with care, since the inode number may be changed silently and
-unexpectedly anytime.
-For example,
-rmdir failure, recursive chmod/chown/etc to a large and deep directory
-or anything else.
-And some applications will not work correctly.
-.\" When the inode number has been changed, your system
-.\" can be crazy.
-If you want to change the xino default path, use xino mount option.
-
-After you add branches, the persistence of inode number may not be
-guaranteed.
-At remount time, cached but unused inodes are discarded.
-And the newly appeared inode may have different inode number at the
-next access time. The inodes in use have the persistent inode number.
-
-When aufs assigned an inode number to a file, and if you create the
-same named file on the upper branch directly, then the next time you
-access the file, aufs may assign another inode number to the file even
-if you use xino option.
-Some applications may treat the file whose inode number has been
-changed as totally different file.
-
-.\" ----------------------------------------------------------------------
-.SH Pseudo Link (hardlink over branches)
-Aufs supports `pseudo link' which is a logical hard-link over
-branches (cf. ln(1) and link(2)).
-In other words, a copied-up file by link(2) and a copied-up file which was
-hard-linked on a readonly branch filesystem.
-
-When you have files named fileA and fileB which are
-hardlinked on a readonly branch, if you write something into fileA,
-aufs copies-up fileA to a writable branch, and write(2) the originally
-requested thing to the copied-up fileA. On the writable branch,
-fileA is not hardlinked.
-But aufs remembers it was hardlinked, and handles fileB as if it existed
-on the writable branch, by referencing fileA's inode on the writable
-branch as fileB's inode.
-
-Once you unmount aufs, the plink info for that aufs kept in memory are totally
-gone.
-It means that the pseudo-link is not permanent.
-If you want to make plink permanent, try `auplink' utility just before
-one of these operations,
-unmounting your aufs,
-using `ro' or `noplink' mount option,
-deleting a branch from aufs,
-adding a branch into aufs,
-or changing your writable branch to readonly.
-
-This utility will reproduces all real hardlinks on a writable branch by linking
-them, and removes pseudo-link info in memory and temporary link on the
-writable branch.
-Since this utility access your branches directly, you cannot hide them by
-`mount \-\-bind /tmp /branch' or something.
-
-If you are willing to rebuild your aufs with the same branches later, you
-should use auplink utility before you umount your aufs.
-If you installed both of /sbin/mount.aufs and /sbin/umount.aufs, and your
-mount(8) and umount(8) support them,
-`auplink' utility will be executed automatically and flush pseudo-links.
-
-.nf
-# auplink /your/aufs/root flush
-# umount /your/aufs/root
-or
-# auplink /your/aufs/root flush
-# mount -o remount,mod:/your/writable/branch=ro /your/aufs/root
-or
-# auplink /your/aufs/root flush
-# mount -o remount,noplink /your/aufs/root
-or
-# auplink /your/aufs/root flush
-# mount -o remount,del:/your/aufs/branch /your/aufs/root
-or
-# auplink /your/aufs/root flush
-# mount -o remount,append:/your/aufs/branch /your/aufs/root
-.fi
-
-The plinks are kept both in memory and on disk. When they consumes too much
-resources on your system, you can use the `auplink' utility at anytime and
-throw away the unnecessary pseudo-links in safe.
-
-Additionally, the `auplink' utility is very useful for some security reasons.
-For example, when you have a directory whose permission flags
-are 0700, and a file who is 0644 under the 0700 directory. Usually,
-all files under the 0700 directory are private and no one else can see
-the file. But when the directory is 0711 and someone else knows the 0644
-filename, he can read the file.
-
-Basically, aufs pseudo-link feature creates a temporary link under the
-directory whose owner is root and the permission flags are 0700.
-But when the writable branch is NFS, aufs sets 0711 to the directory.
-When the 0644 file is pseudo-linked, the temporary link, of course the
-contents of the file is totally equivalent, will be created under the
-0711 directory. The filename will be generated by its inode number.
-While it is hard to know the generated filename, someone else may try peeping
-the temporary pseudo-linked file by his software tool which may try the name
-from one to MAX_INT or something.
-In this case, the 0644 file will be read unexpectedly.
-I am afraid that leaving the temporary pseudo-links can be a security hole.
-It makes sense to execute `auplink /your/aufs/root flush'
-periodically, when your writable branch is NFS.
-
-When your writable branch is not NFS, or all users are careful enough to set 0600
-to their private files, you do not have to worry about this issue.
-
-If you do not want this feature, use `noplink' mount option.
-
-.SS The behaviours of plink and noplink
-This sample shows that the `f_src_linked2' with `noplink' option cannot follow
-the link.
-
-.nf
-none on /dev/shm/u type aufs (rw,xino=/dev/shm/rw/.aufs.xino,br:/dev/shm/rw=rw:/dev/shm/ro=ro)
-$ ls -li ../r?/f_src_linked* ./f_src_linked* ./copied
-ls: ./copied: No such file or directory
-15 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked
-15 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked2
-22 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ./f_src_linked
-22 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ./f_src_linked2
-$ echo abc >> f_src_linked
-$ cp f_src_linked copied
-$ ls -li ../r?/f_src_linked* ./f_src_linked* ./copied
-15 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked
-15 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked2
-36 -rw-r--r-- 2 jro jro 6 Dec 22 11:03 ../rw/f_src_linked
-53 -rw-r--r-- 1 jro jro 6 Dec 22 11:03 ./copied
-22 -rw-r--r-- 2 jro jro 6 Dec 22 11:03 ./f_src_linked
-22 -rw-r--r-- 2 jro jro 6 Dec 22 11:03 ./f_src_linked2
-$ cmp copied f_src_linked2
-$
-
-none on /dev/shm/u type aufs (rw,xino=/dev/shm/rw/.aufs.xino,noplink,br:/dev/shm/rw=rw:/dev/shm/ro=ro)
-$ ls -li ../r?/f_src_linked* ./f_src_linked* ./copied
-ls: ./copied: No such file or directory
-17 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked
-17 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked2
-23 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ./f_src_linked
-23 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ./f_src_linked2
-$ echo abc >> f_src_linked
-$ cp f_src_linked copied
-$ ls -li ../r?/f_src_linked* ./f_src_linked* ./copied
-17 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked
-17 -rw-r--r-- 2 jro jro 2 Dec 22 11:03 ../ro/f_src_linked2
-36 -rw-r--r-- 1 jro jro 6 Dec 22 11:03 ../rw/f_src_linked
-53 -rw-r--r-- 1 jro jro 6 Dec 22 11:03 ./copied
-23 -rw-r--r-- 2 jro jro 6 Dec 22 11:03 ./f_src_linked
-23 -rw-r--r-- 2 jro jro 6 Dec 22 11:03 ./f_src_linked2
-$ cmp copied f_src_linked2
-cmp: EOF on f_src_linked2
-$
-.fi
-
-.\"
-.\" If you add/del a branch, or link/unlink the pseudo-linked
-.\" file on a branch
-.\" directly, aufs cannot keep the correct link count, but the status of
-.\" `pseudo-linked.'
-.\" Those files may or may not keep the file data after you unlink the
-.\" file on the branch directly, especially the case of your branch is
-.\" NFS.
-
-If you add a branch which has fileA or fileB, aufs does not follow the
-pseudo link. The file on the added branch has no relation to the same
-named file(s) on the lower branch(es).
-If you use noxino mount option, pseudo link will not work after the
-kernel shrinks the inode cache.
-
-This feature will not work for squashfs before version 3.2 since its
-inode is tricky.
-When the inode is hardlinked, squashfs inodes has the same inode
-number and correct link count, but the inode memory object is
-different. Squashfs inodes (before v3.2) are generated for each, even
-they are hardlinked.
-
-.\" ----------------------------------------------------------------------
-.SH User's Direct Branch Access (UDBA)
-UDBA means a modification to a branch filesystem manually or directly,
-e.g. bypassing aufs.
-While aufs is designed and implemented to be safe after UDBA,
-it can make yourself and your aufs confused. And some information like
-aufs inode will be incorrect.
-For example, if you rename a file on a branch directly, the file on
-aufs may
-or may not be accessible through both of old and new name.
-Because aufs caches various information about the files on
-branches. And the cache still remains after UDBA.
-
-Aufs has a mount option named `udba' which specifies the test level at
-access time whether UDBA was happened or not.
-.
-.TP
-.B udba=none
-Aufs trusts the dentry and the inode cache on the system, and never
-test about UDBA. With this option, aufs runs fastest, but it may show
-you incorrect data.
-Additionally, if you often modify a branch
-directly, aufs will not be able to trace the changes of inodes on the
-branch. It can be a cause of wrong behaviour, deadlock or anything else.
-
-It is recommended to use this option only when you are sure that
-nobody access a file on a branch.
-It might be difficult for you to achieve real `no UDBA' world when you
-cannot stop your users doing `find / \-ls' or something.
-If you really want to forbid all of your users to UDBA, here is a trick
-for it.
-With this trick, users cannot see the
-branches directly and aufs runs with no problem, except `auplink' utility.
-But if you are not familiar with aufs, this trick may make
-yourself confused.
-
-.nf
-# d=/tmp/.aufs.hide
-# mkdir $d
-# for i in $branches_you_want_to_hide
-> do
-> mount -n --bind $d $i
-> done
-.fi
-
-When you unmount the aufs, delete/modify the branch by remount, or you
-want to show the hidden branches again, unmount the bound
-/tmp/.aufs.hide.
-
-.nf
-# umount -n $branches_you_want_to_unbound
-.fi
-
-If you use FUSE filesystem as an aufs branch which supports hardlink,
-you should not set this option, since FUSE makes inode objects for
-each hardlinks (at least in linux\-2.6.23). When your FUSE filesystem
-maintains them at link/unlinking, it is equivalent
-to `direct branch access' for aufs.
-
-.
-.TP
-.B udba=reval
-Aufs tests only the existence of the file which existed. If
-the existed file was removed on the branch directly, aufs
-discard the cache about the file and
-re-lookup it. So the data will be updated.
-This test is at minimum level to keep the performance and ensure the
-existence of a file.
-This is default and aufs runs still fast.
-
-This rule leads to some unexpected situation, but I hope it is
-harmless. Those are totally depends upon cache. Here are just a few
-examples.
-.
-.RS
-.Bu
-If the file is cached as negative or
-not-existed, aufs does not test it. And the file is still handled as
-negative after a user created the file on a branch directly. If the
-file is not cached, aufs will lookup normally and find the file.
-.
-.Bu
-When the file is cached as positive or existed, and a user created the
-same named file directly on the upper branch. Aufs detects the cached
-inode of the file is still existing and will show you the old (cached)
-file which is on the lower branch.
-.
-.Bu
-When the file is cached as positive or existed, and a user renamed the
-file by rename(2) directly. Aufs detects the inode of the file is
-still existing. You may or may not see both of the old and new files.
-Todo: If aufs also tests the name, we can detect this case.
-.RE
-
-If your outer modification (UDBA) is rare and you can ignore the
-temporary and minor differences between virtual aufs world and real
-branch filesystem, then try this mount option.
-.
-.TP
-.B udba=inotify
-Aufs sets `inotify' to all the accessed directories on its branches
-and receives the event about the dir a