Infelizmente, o Ubuntu 12.04 não inclui o módulo cloop.ko
necessário para ter um dispositivo loopback compactado . No entanto, é muito fácil adicioná-lo ao kernel em execução.
Eu encontrei em esta página (não tenho certeza se é a versão mais recente, mas compila e funciona bem), então eu wget'd e descomprimido este arquivo . O configure
parece estar incluído dentro do Makefile
, então está em execução:
make
é suficiente para construir o módulo corretamente. O pacote também contém o utilitário advfs
, o nome original para o comando create_compressed_fs
cuja sinopse pode ser encontrada aqui .
Eu copiei os módulos em /lib/modules
com:
sudo cp cloop.ko /lib/modules/'uname -r'
mas este passo não é obrigatório. Então pode-se escolher usar o advfs
ou instalar o pacote ubuntu cloop-utils
que fornece o mesmo utilitário com outro nome. Eu escolhi a opção de pacote porque é mais limpa (eu também sugiro instalar o pv
para ter uma boa barra de progresso):
sudo aptitude install cloop-utils pv
Agora, a imagem compactada pode ser criada através do utilitário create_compressed_fs
e, posteriormente, pode ser atribuída ao dispositivo /dev/clooop0
passando o nome do arquivo como parâmetro para o módulo cloop.ko
. Honestamente, não encontrei uma maneira melhor de passar o nome do arquivo para o módulo cloop
e isso cria um problema se alguém quiser montar várias imagens compactadas em diferentes intervalos de tempo. No entanto, por enquanto não tenho esse problema, portanto, esse script foi mais do que adequado para minhas necessidades.
#/bin/sh -e
INPUTDEVICE="/dev/sda1"
OUTPUTFILE="/tmp/dev-sda1.cloop.img"
BLOCKSIZE="1048576"
NUMBLOCKS="2000"
COMPRESSIONLEVEL="9"
#COMPRESSIONLEVEL="-1" # for 7zip compression (untested)
CLOOPLOGFILE="/tmp/cloop-creation.log"
CLOOPBLOCKSIZE="64K"
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
Algumas outras informações podem ser encontradas no wiki do Knoppix sobre cloop
devices, aqui .