From: Tomas M <to...@sl...> - 2012-10-13 17:47:15
|
Hello all, I am announcing availability of a new filesystem developed for FUSE, which I developed for Slax Linux. It is DynFileFS, a dynamic-sized-file filesystem. Example usage: # dynfilefs /tmp/storage.dat 4000 /mnt What the filesystem provides is a single file, accessible as /mnt/loop.fs in our example, which is of configurable size (4000MB in our example). All changes you make to this loop.fs file are stored in /tmp/storage.dat in space-efficient way. It is like cow (copy on write) filesystem, but it saves only the modified 4096 bytes blocks (and only if the block is not empty). This is useful if you make a filesystem on the virtual file loop.fs and loop-mount it: # mke2fs -F /mnt/loop.fs # mount -o loop,sync /mnt/loop.fs /mnt As a result, you have fully writable posix filesystem mounted on /mnt, and all changes you make to it are stored in /tmp/storage.dat. The storage uses 256KB index for each 64MB of data, thus the filesystem overhead is 0.4%. The file format is described in README file. This is practically useful if you need a big file on filesystem which doesn't support sparse files (holes) like VFAT. You can have a virtual file of configurable size, loopmount it, and have only the changed data stored. Future: 1) the filesystem heavily uses fseeko() and ftello(). This is no problem on USB Flash Drives, for which was the filesystem designed, but performance can be degraded on regular hard drives. Future implementation could use in-memory cache of the indexes, to avoid most of the unnecessary fseek()s 2) the blocks which are written (4096bytes each) could be compressed, say with LZO, that would even make the storage.dat smaller, eg by 50% smaller. But I do not know how to use LZO libs or link it to my executable, I am not experienced developer, I know only a bit of C coding :-) For this to work the filesystem format will need to be changed a bit, each data block will have to contain a prefix (2 bytes of total block compressed length). If there is anybody how is interested enough to help with especially the task 2, I will be very happy. I need basically just to know how to call compression and decompression functions and how to tell my C program that it should use LZO (libs installed in system). Thanks for all possible feedback! Download: http://ftp.slax.org/Slax-7.x-development/sources/Slax-7.0-sources/DynFileFS/dynfilefs-2.2.tar.gz Tomas M slax.org |