fusefile ======== This project implements a "fuse" device to mount as a single file that is a concatenation of fragments of one or more files. The fused file allows overwriting the parts files, but not changing their sizes, and only for parts files that are writable upon first access. FUSE file mount for combining file fragments. == SYNOPSIS ==== *fusefile* [ _fuse options_ ] *mountpoint* +_filename_/from:to+ ... ==== ## DESCRIPTION *fusefile* is FUSE file mount that presents a series of fragments of other files as a contiguous concatenation. It bind mounts a driver on top of the file mountpoint to present the nominated file fragments as a single, contiguous file. The fragment arguments include the filename of a source file, and optionally start and end byte positions. All in all there five variations: * __filename__ include all of the file. * __filename/__ include all of the file named with "/" in the pathname. This case requires a final "/", since the last "/" separates the filename from the position details. * __filename/from__ include the file from the given start position, to end. * __filename/-to__ include the file from beginning to the given end position (not included). * __filename/from:to__ include the file from the given start position, up to the given end position (not included). ## EXAMPLES .Insert file "y" into file "x" at position 1200: $ fusefile -ononempty x x/:1200 y x/1200: That mount will shadow the original file "x", and presents the fused file instead. .Make file y be a swap of the beginning and end of file "x", at position 2442: $ fusefile y x/2442: x/:2442 .Replace a partition in an image file with a different file $ partx -oNR,START,SECTORS disk.raw NR START SECTORS 1 2048 2097152 2 2099200 409600 3 2508800 14268383 # Replace partition 2 of 409600 sectors from 2099200 with # the file "insert.fat" clipped to 409600 sectors. $ fusefile -ononempty disk.raw \ disk.raw/0:$(( 2099200*512 )) \ insert.fat/0:$(( 409600*512 )) \ disk.raw/$(( (2099200+409600)*512 )): ## NOTES Note that **fusefile** opens the nominated source file(s) before bind mounting. With the fuse option __-ononempty__ it will bind over an non-empty file, which may be useful. The source file descriptors remain open, but the source fragments are not recomputed. If a source file changes or reduces in size "behind" the fused file, then anything may happen. If the mountpoint file doesn't exist, then **fusefile** creates it and removes it when unmounted. Unmounting is done with "fusermount -u __fused file__" as usual. ## AUTHOR Ralph Rönnquist