Unfortunately Ubuntu 12.04 doesn't include the
cloop.ko module needed to have a compressed loopback device. However, it's very easy to add it to the running kernel.
I found it on this page (not sure if it's the latest version but compiles and works well), so I wget'd and uncompressed this file. The
configure seems to be already included inside the
Makefile so running:
is enough to build the module correctly. The package also contains the
advfs utility, the original name for the command
create_compressed_fs whose synopsis can be found here.
I copied the modules in
sudo cp cloop.ko /lib/modules/`uname -r`
but this step is not mandatory. Then one can choose to use the
advfs or install the ubuntu package
cloop-utils that provides the same utility with another name. I chose the package option because it's cleaner (I also suggest to install
pv to have a nice progress bar):
sudo aptitude install cloop-utils pv
Now the compressed image can be created through the
create_compressed_fs utility, and can be subsequently assigned to the
/dev/clooop0 device passing the filename as parameter to the module
cloop.ko. Honestly I didn't find a better way to pass the filename to the
cloop module and this poses a problem if one wants to mount multiple compressed images in different time frames. However, for the moment I don't have this problem, so this script has been more than adequate for my needs.
#COMPRESSIONLEVEL="-1" # for 7zip compression (untested)
dd if="$INPUTDEVICE" bs="$BLOCKSIZE" count="$NUMBLOCKS" | pv -s "$((NUMBLOCKS * BLOCKSIZE))" -Wpetr | create_compressed_fs -L "$COMPRESSIONLEVEL" -B "$CLOOPBLOCKSIZE" -s "$NUMBLOCKS"M - "$OUTPUTFILE" > "$CLOOPLOGFILE" 2>&1
insmod /lib/modules/`uname -r`/cloop.ko file="$OUTPUTFILE"
mount -o ro /dev/cloop0 /mnt/cloop
Some other information can be found on the Knoppix wiki about
cloop devices, here.