create_compressed_fs, extract_compressed_fs - convert and extract a filesystem
to/from a cloop volume
create_compressed_fs [
OPTIONS ]
image outfile
extract_compressed_fs filename
create_compressed_fs compresses a filesystem image to a compressed image
suitable for mounting with the cloop driver.
extract_compressed_fs uncompresses a filesystem image created by
create_compressed_fs.
Run the
create_compressed_fs command with "-h" to get a list of
available options and description of data storages modes and advanced usage
(eg. with a network cluster). Blocksize must be a multiple of 512 bytes.
There is an alternative set of options which is supported for compatibility with
the original version of create_compressed_fs. When it's called with a pure
number as output, it assumes the old syntax and maps the default options to
memory mode and the block size to the number. -b for best mode is recognized
as well.
create_compressed_fs image.ext2 image.ext2.cloop
extract_compressed_fs image.ext2.cloop | cmp image.ext2 -
mkcmd="genisoimage -joliet-long -D -r data"
$mkcmd | create_compressed_fs -s $($mkcmd --print-size)i - file.cloop
create_compressed_fs image.iso -S image.cloop.a0 - | split -b 1024m -
image.cloop.
cat image.cloop.* | cdrskin -
For optimal performance, create_compressed_fs should be used with real input and
output files.
Operation with STDIN or STDOUT is complicated. create_compressed_fs cannot
operate as a simple pipe filter because it needs to know some things in
advance: a) the data length, b) the block lengths calculated during the
compression. This meta data needs to be stored in the header AFTER the
compression is trough, therefore it is not possible to push all generated data
to STDOUT on-the-fly.
And so compromises need to be made. The simpliest method (used by the ancient
create_compressed_fs) is a big temporary memory buffer (option
-m) to
keep compressed data in RAM. However, the overall system performance suffers
from such usage and this may drive other applications into OOM conditions.
The next alternative to this is storing the temprorary data in an extra file
aside (the
-f option). This improves the overall system performance but
create_compressed_fs operation is slower because it needs to copy data back
when it's finished. Plus, double disk space for the output is required. If
disk space is limited, the
-r option could be used (reusing output file
for temporary data), however the speed of the copy-back step may decrease
significantly.
There are strategies to avoid the temporary data storage completely. First, only
files should be used. If that is not possible, then the output should be a
(seekable) file and the input data length should be known (either specified
with the
-s option or detected from the input file size).
Second, it is possible to store the header of the cloop volume in a separate
file. After the work, header can be merged together with the compressed data
with the cat command. The output data can be written to stdout. Since the
header is stored too late, this method is not very usefull for immediate data
transfer. However, it allows to do some tricks like piping to the split
utility (to store DVD images in smaller files on VFAT) or piping data trough
ssh if the local system has no disk space (and copying the header separately).
You can pass an option to the cloop module on loading, or use losetup or losetup
functionality of the mount command. Examples:
insmod cloop.o file=/path/to/compressed/image
losetup /dev/cloop1 /path/to/compressed/image
mount -o ro -t whatever /dev/cloop /mnt/compressed
mount cl /mnt/misc -oloop=/dev/cloop0
/usr/share/doc/cloop-utils/*,
/usr/share/doc/cloop-src/*
This manual page was written by Eduard Bloch <
[email protected]> for the
Debian GNU/Linux system (but may be used by others). Permission is granted to
copy, distribute and/or modify this document under the terms of the GNU
GPLv2.