Como eu posso (instalar e) usar o dispositivo cloop no Ubuntu?

0

Eu preciso montar e ler rapidamente uma imagem dd compactada. Eu acho que cloop é o que eu preciso. Mas eu não vejo isso em /lib/modules e, de qualquer forma, gostaria de saber como funciona primeiro.

Alguém já conseguiu montar uma imagem compactada e lê-la rapidamente usando cloop ?

    
por Avio 24.10.2012 / 13:25

1 resposta

1

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 .

    
por Avio 25.10.2012 / 13:45