|
|
@ -5,23 +5,37 @@ fusefile, fusedisk \- FUSE file mount for combining file fragments |
|
|
|
|
|
|
|
.SH SYNOPSIS |
|
|
|
.B fusefile \fR[\fIfuse-opts\fR] \fBmountpoint\fR \fR[\fIoverlay\fR] \fIfilename/from-to\fR ... |
|
|
|
.br |
|
|
|
.B fusedisk \fR[\fIfuse-opts\fR] \fBmountpoint\fR \fR[\fIoverlay\fR] \fIfilename/from-to\fR ... |
|
|
|
|
|
|
|
.SH DESCRIPTION |
|
|
|
|
|
|
|
\fBfusefile\fR 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. It accepts over-writing on the fused |
|
|
|
file which gets distributed accordingly to the fragments, but cannot |
|
|
|
change size. |
|
|
|
|
|
|
|
An optional overlay file is declared with an |
|
|
|
\fB-overlay:\fIfilename\fR argument between the mount point and the |
|
|
|
fragments. This file is then set up as an overlay for capturing writes |
|
|
|
to the fused file. The overlay file will contain the written fused |
|
|
|
file regions, followed by meta data to distinguish between written |
|
|
|
content and "holes" (where content comes from the fused fragments). |
|
|
|
\fBfusefile\fR is a 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. \fBfusefile\fR accepts |
|
|
|
over-writing on the fused file (i.e. the mountpoint) which gets |
|
|
|
distributed accordingly to the fragments, but it cannot change size; |
|
|
|
any writing thus merely replaces content without truncating fragments. |
|
|
|
All fragment files are held open while \fBfusefile\fR is active. |
|
|
|
|
|
|
|
\fBfusedisk\fR is a helper script to set up a \fBfusefile\fR as a |
|
|
|
block device (via \fIfuseblk\fR) by using the device mapper |
|
|
|
(\fBdmsetup\fR) to manage an empty block device mapping where content |
|
|
|
is handled at the mountpoint via \fBfusefile\fR. (Note that the same |
|
|
|
thing may be done with the device manager directly, but then all |
|
|
|
fragments need to be in sectors of N*512 bytes. With \fBfusedisk\fR |
|
|
|
only the fused file as a whole is "clipped" at N*512 bytes) |
|
|
|
|
|
|
|
By using the optional \fB-overlay:\fIfilename\fR argument between the |
|
|
|
mount point and the fragments, an overlay file may be set up. The |
|
|
|
overlay file will then be used by \fBfusefile\fR for capturing writes |
|
|
|
to the fused file (i.e. the mountpoint). The overlay file will contain |
|
|
|
any new written fused file regions followed by meta data to |
|
|
|
distinguish between new, written content and old content that comes |
|
|
|
from the fragments. |
|
|
|
|
|
|
|
.SH FRAGMENT ARGUMENTS |
|
|
|
|
|
|
|
The fragment arguments include the filename of a source file, and |
|
|
|
optionally start and end byte positions. All in all there five |
|
|
@ -55,49 +69,75 @@ Note that a negative start position is clipped to 0 and a too large |
|
|
|
end position is clipped to the end of the file. |
|
|
|
|
|
|
|
.P |
|
|
|
Charater devices are treated as being of any given finite size, but |
|
|
|
Character devices are treated as being of any given finite size, but |
|
|
|
have size 0 by default. For example, "/dev/zero/:100" means a fragment |
|
|
|
of 100 NUL bytes. |
|
|
|
|
|
|
|
\fBfusedisk\fR is a helper script to set up a fused file as a block |
|
|
|
device. This uses the device mapper (\fBdmsetup\fR) to manage empty |
|
|
|
block device mappings where content is handled via \fBfusefile\fR. |
|
|
|
.SH OPTIONS |
|
|
|
|
|
|
|
This section enumerates the most interesting options to use with |
|
|
|
\fBfuesfile\fR. See "man fuse" and "man mount" for more options. |
|
|
|
|
|
|
|
.TP |
|
|
|
\fI-oallow_other\fB |
|
|
|
|
|
|
|
The fuse option \fI-oallow_other\fR is needed for sharing the fused |
|
|
|
file with other users who otherwise will not have access to it |
|
|
|
(including "root"). Note however that this must first be enabled in |
|
|
|
\fI/etc/fuse.conf\fR. |
|
|
|
|
|
|
|
.TP |
|
|
|
\fI-ononempty\fR |
|
|
|
|
|
|
|
The fuse option \fI-ononempty\fR may need to be used when reusing an |
|
|
|
existing file as mountpoint. |
|
|
|
|
|
|
|
.TP |
|
|
|
\fI-ouid=...\fR, \fI-ogid=...\fR, |
|
|
|
|
|
|
|
The mount options \fI-ouid=...\fR and \fI-ogid=...\fR, where \fI...\fR |
|
|
|
is a user or group id respectively, are useful for root when using |
|
|
|
\fBfusedisk\fR and thereby give user or group ownership for the mount |
|
|
|
to the nominated user or group. |
|
|
|
|
|
|
|
.SH EXAMPLES |
|
|
|
This section illustrates uses of \fBfusefile\fR. |
|
|
|
|
|
|
|
Insert file "y" into file "x" at position 1200: |
|
|
|
.SS Exanple 1. |
|
|
|
Insert a file "y" into a file "x" at position 1200. |
|
|
|
.RS |
|
|
|
\fB$ fusefile -ononempty x x/:1200 y x/1200:\fR |
|
|
|
.RE |
|
|
|
The bind mount shadows the original file "x", and presents the |
|
|
|
fused file instead. |
|
|
|
This also shadows the original file "x" and presents the fused file |
|
|
|
instead. |
|
|
|
|
|
|
|
.SS Example 2. |
|
|
|
Make fused file y be a swap of the beginning and end of file "x", at |
|
|
|
position 2442: |
|
|
|
position 2442. |
|
|
|
.RS |
|
|
|
\fB$ fusefile y x/2442: x/:2442\fR |
|
|
|
.RE |
|
|
|
|
|
|
|
Replace a partition in an image file with a different file |
|
|
|
.SS Example 3. |
|
|
|
Replace partition 2 of an image file, \fIA\fR, with a different |
|
|
|
file, \fIX\fR. For this example the partition table looks as follows. |
|
|
|
.RS |
|
|
|
# Check the partition table |
|
|
|
.br |
|
|
|
\fB$ partx -oNR,START,SECTORS disk.raw\fR |
|
|
|
\fB$ partx -oNR,START,SECTORS \fIA\fR |
|
|
|
NR START SECTORS |
|
|
|
1 2048 2097152 |
|
|
|
2 2099200 409600 |
|
|
|
3 2508800 14268383 |
|
|
|
.RE |
|
|
|
.br |
|
|
|
# Replace partition 2 of 409600 sectors from 2099200 with |
|
|
|
.br |
|
|
|
# the file "insert.fat" clipped to 409600 sectors. |
|
|
|
.br |
|
|
|
\fB$ fusefile -ononempty disk.raw \\ |
|
|
|
disk.raw/0:$(( 2099200*512 )) \\ |
|
|
|
insert.fat/0:$(( 409600*512 )) \\ |
|
|
|
disk.raw/$(( (2099200+409600)*512 )):\fR |
|
|
|
As each sector is 512 bytes the clipping points around partition 2 are |
|
|
|
1074790400 and 1284505600 and the insertion size is 209715200 bytes. |
|
|
|
The \fBfusefile\fR comman will therefore be as follows. |
|
|
|
.RS |
|
|
|
\fB$ fusefile -ononempty \fIA\fB \fIA\fB/:1074790400 \fIX\fB/:209715200 \fIA\fB/1284505600\fR |
|
|
|
.RE |
|
|
|
Note that the fused file shadows the original file \fIA\fR. |
|
|
|
|
|
|
|
.SS Example 4. |
|
|
|
Protect raw disk image file with an overlay: |
|
|
|
.RS |
|
|
|
\fB$ fusefile -ononempty disk.raw -overlay:today disk.raw\fR |
|
|
@ -106,8 +146,34 @@ By that set up, the overlay file, "today", will protect the disk image |
|
|
|
file, "disk.raw" from changes, and also override the pathname |
|
|
|
"disk.raw" to be the fused file. |
|
|
|
|
|
|
|
As final example, make a fused block device y as a swap of the |
|
|
|
beginning and end of file "x", at position 2442: |
|
|
|
.SS Example 5. |
|
|
|
A fusefile mount with an \fIoverlay file\fR is writable regardless of |
|
|
|
the fused fragments, but all updates are written to the overlay file |
|
|
|
instead of to the fragments. |
|
|
|
|
|
|
|
.RS |
|
|
|
\fB$ fusefile -ononempty \fIA\fR \fB-overlay:\fIB\fB \fIA\fR |
|
|
|
.RE |
|
|
|
|
|
|
|
The overlay file, \fIB\fR in the example, contains all changes to the |
|
|
|
shadowed original file, \fIA\fR. The overlay file contains only the |
|
|
|
newly written regions and content is otherwise obtained from the |
|
|
|
original file. |
|
|
|
|
|
|
|
To that end, the overlay file also contains a "marker table" at the |
|
|
|
end as if appended to the fused file. That part of the file is outside |
|
|
|
of the fused file; and it's simply an element count followed by pairs |
|
|
|
of byte addresses that tell which regions of the fused file have been |
|
|
|
captured into the overlay file. (The marker table is of course |
|
|
|
maintained so that adjoining regions are collapsed) |
|
|
|
|
|
|
|
Thus, an overlay file may be reused to later re-establish the same |
|
|
|
fused file with overlay as previously, to continue capturing more |
|
|
|
changes. |
|
|
|
|
|
|
|
.SS Example 6. |
|
|
|
As final example, we set up a fused block device \fIy\fR as a swap of |
|
|
|
the beginning and end of file "x", at position 2442: |
|
|
|
.RS |
|
|
|
\fB$ sudo fusedisk -ouid=1000 y x/2442: x/:2442\fR |
|
|
|
.RE |
|
|
@ -117,42 +183,21 @@ to make the block device \fIy\fR be owned by the user with id 1000. |
|
|
|
|
|
|
|
.SH NOTES |
|
|
|
|
|
|
|
Note that \fBfusefile\fR opens the nominated source file or files |
|
|
|
before bind mounting. With the fuse option \fI-ononempty\fR 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 the fused file will present the new content. |
|
|
|
If a source is reduced in size, access will be inconsistent. |
|
|
|
\fBfusefile\fR opens the nominated source files before any bind |
|
|
|
mounting. With the fuse option \fI-ononempty\fR it will bind over an |
|
|
|
non-empty file, which may be useful. The source files remain open, but |
|
|
|
the source fragments are not recomputed. If a source file changes the |
|
|
|
fused file will present the new content. If a source is reduced in |
|
|
|
size, access will be inconsistent. |
|
|
|
|
|
|
|
If the mountpoint file doesn't exist, then \fBfusefile\fR creates it. |
|
|
|
|
|
|
|
The fuse option \fI-oallow_other\fR is needed for sharing the fused |
|
|
|
file with other users (including "root"). Note however that this |
|
|
|
option must first be enabled in \fI/etc/fuse.conf\fR. |
|
|
|
|
|
|
|
Unmount is done with "\fBfusermount -u\fR \fImountpoint\fR" as usual. |
|
|
|
|
|
|
|
.P |
|
|
|
\fBUsing overlay file\fR |
|
|
|
|
|
|
|
.P |
|
|
|
A fusefile mount with an \fIoverlay file\fR is writable regardless of |
|
|
|
the fused fragments, but all updates are written to the overlay file |
|
|
|
instead of to the fragments. |
|
|
|
|
|
|
|
$ fusefile -oallow_other -ononempty disk.raw \fB-overlay:today\fR disk.raw |
|
|
|
|
|
|
|
The overlay file ("today" in the example) contains all changes to the |
|
|
|
original file ("disk.raw" in the exmaple). It also contains a marker |
|
|
|
table at the end, as if appended to the fused file. This part of the |
|
|
|
overlay file is outside of the fused file; it consists of an element |
|
|
|
count followed by pairs of byte addresses to mark out which regions |
|
|
|
have been written into the overlay file, and the marker table is |
|
|
|
maintained so that adjoining regions are collapsed. |
|
|
|
Unmounting is done with "\fBfusermount -u\fR \fImountpoint\fR" as |
|
|
|
usual. A \fBfusedisk\fR mount is unmounted by \fIroot\fR using |
|
|
|
\fBumount\fR. |
|
|
|
|
|
|
|
That means that an overlay file may be reused to later re-establish |
|
|
|
the same fused file with overlay as previously, to continue capturing |
|
|
|
more changes. |
|
|
|
.SH SEE ALSO |
|
|
|
\fBfuse, fusermount, mount, dmsetup\fR |
|
|
|
|
|
|
|
.SH AUTHOR |
|
|
|
|
|
|
|