diff options
Diffstat (limited to 'system/ciopfs/ciopfs.txt')
-rw-r--r-- | system/ciopfs/ciopfs.txt | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/system/ciopfs/ciopfs.txt b/system/ciopfs/ciopfs.txt new file mode 100644 index 0000000000000..2d5981faa0b57 --- /dev/null +++ b/system/ciopfs/ciopfs.txt @@ -0,0 +1,138 @@ + ciopfs - case insensitive on purpose filesystem + +ciopfs is a stackable or overlay linux userspace file system (implemented with +FUSE) which mounts a normal directory on a regular file system in case +insensitive fashion. + +The commands below should illustrate it’s function: + +mkdir -p ~/tmp/ciopfs/{.data,case-insensitive} +ciopfs ~/tmp/ciopfs/.data ~/tmp/ciopfs/case-insensitive +cd ~/tmp/ciopfs +mkdir -p case-insensitive/DeMo/SubFolder +echo demo >> case-insensitive/DEMO/subFolder/MyFile + +At this point your file system should look like this: + +case-insensitive +`-- DeMo + `-- SubFolder + `-- MyFile +.data +`-- demo + `-- subfolder + `-- myfile + +To avoid any conflicts you should not manipulate the data directory directly, +any change should be done over the mount point. All filenames in the data +directory which aren’t all lower case are ignored. + +If you want to mount the file system automatically at boot time add a line like +the one below to your /etc/fstab. + +/ciopfs/data /ciopfs/mnt ciopfs allow_other,default_permissions,use_ino,attr_timeout=0 0 0 + +Note that ciopfs is primarily designed for single user mode. It was originally +developed to mount the wine program folder and provide faster case insensitive +file access. If you want to give multiple users write access to the same file +system, then you have to mount it as root. However, in order to avoid security +problems ciopfs will force fuse into single threaded mode and thus hurt +performance. + +News + + * ciopfs-0.4 released (18.06.2011) + * Bugfix in symlink creation + * Better errno handling + * ciopfs-0.3 released (25.09.2010) + * Security improvements: ciopfs forces single threaded mode if the file + system is mounted by root and accessible for others + * ASCII mode should now work (an off by one error which caused a segfault + was fixed) + * Various bug fixes + * ciopfs-0.2 released (30.06.2008) + * Unicode support based on glib + * Better error handling in out of memory situations + * Various code cleanups + * ciopfs-0.1 released (24.05.2008) + +How it works + +ciopfs works by translating every path element to lower case before further +operations take place. On file or directory creation the original file name is +stored in an extended attribute which is later returned upon request. + +This is illustrated below: + +getfattr -dR .data +# file: .data/demo +user.filename="DeMo" + +# file: .data/demo/subfolder +user.filename="SubFolder" + +# file: .data/demo/subfolder/myfile +user.filename="MyFile" + +Runtime Requirements + +If you want the file system to preserve case information you have to make sure +that the underlying file system supports extended attributes (for example for +ext{2,3} you need a kernel with CONFIG_EXT{2,3}_FS_XATTR enabled). You probably +also want to mount the underlying filesystem with the user_xattr option which +allows non root users to create extended attributes. + +Build Requirements + +In order to compile ciopfs you will need the fuse development files, libattr and +if you plan to use Unicode characters within file names you will either need +glib which is the default or alternatively libicu. + +If you want to use neither of those the file system will fall back to libc’s +tolower(3) function which is only defined for [a-zA-Z]. Hence, it will only work +case insensitively for ASCII file names. + +For ease of use the following 3 Makefile targets are supported: + + * unicode-glib (default) + * unicode-icu + * ascii + +Running one of those followed by sudo make install should do everything that is +needed. + +Alternatively, you can also use one of the distribution provided binary +packages. + +POSIX Compliance + +ciopfs passes all test of a slightly patched POSIX file system test suite when +mounted as root user with the following options: + +allow_other,use_ino,attr_timeout=0,entry_timeout=0 + +and $fs set to "ciopfs" in the test suite configuration file. This was last +tested with pjd-fstest-20090130-RC.tgz and ext3 as the underlying file system. + +Stability and Speed + +ciopfs just passes every requested operation to the underlying file system, so +in theory it shouldn’t have a negative impact on stability. However, if you find +a bug then send me an email with the instruction to reproduce it. + +As far as speed is of concern, I didn’t really benchmark or optimize it so far. +There is the usual overhead associated with user / kernel space context +switches. Furthermore, ciopfs in it’s current implementation uses libc’s +malloc/free quite extensively, maybe this could be a bottleneck. + +Development + +You can always fetch the current code base from the git repository located at +Github or Sourcehut. + +If you have comments, suggestions, ideas, a bug report, a patch or something +else related to ciopfs then don’t hesitate to write me an email. + +License + +ciopfs is licensed under the GNU GPL v2. |