Consegui que um servidor NBD "exibisse" uma versão não compactada de um arquivo .gz ou .xz. Não tenho certeza se ele precisa ler todo o arquivo compactado com muita frequência (só foi testado até agora com arquivos pequenos no RAM), mas pelo menos funciona sem precisar extrair toda uma cópia não compactada.
Visualizando uma imagem dd comprimida em gz / xz "on-the-fly"
-
Instale nbdkit & amp; cliente
apt install nbdkit nbd-client
-
Crie um arquivo de estilo "dd" de demonstração - um arquivo vazio de 50M com um sistema de arquivos ext & amp; zip it (Opcional apenas para testes)
fallocate -l 50M 50m mkfs.ext3 -v 50m
Em seguida, comprima com gzip ou xz
gzip -vk9 50m xz -v9k 50m
Nota: Uma opção
xz
de--block-size=16MiB
deve oferecer melhor desempenho de acesso aleatório, mas à custa de menos compactação (talvez 1%?). Veja a descrição do plugin xz do nbdkit . -
Executar servidor na imagem COMPRESSADA
nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-gzip-plugin.so file=~/Downloads/50m.gz
ou para xz
nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-xz-plugin.so file=~/Downloads/50m.xz
O
--no-fork
informa ao servidor "Não bifurque-se no plano de fundo" para ver possíveis mensagens de erro & amp; matá-lo com CTRL-C é um pouco mais fácil.-v
pode / irá mostrar muitas mensagens de status, especialmente ao ler. -
Executar cliente (em outro terminal / janela)
sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
O
-nofork
é semelhante ao-no-fork
acima, mas eu poderia não matar o cliente com CTRL-C,kill <pid>
ousudo kill <pid>
. Terminando o servidor com CTRL-C parou ambos server & amp; cliente. -
Observe que
/dev/nbd0
agora é idêntico à imagem UN-COMPRESSED$ sudo diff -s /dev/nbd0 ~/Downloads/50m Files /dev/nbd0 and /home/user/Downloads/50m are identical
/dev/nbd0
agora pode ser usado como a imagem descompactada; montado, ler / copiar comdd
ou usarkpartx
,partprobe
,vgscan
/vgchange
, etc!
Agradecimentos a Cristian Ciupitu no Unix & amp; Linux , embora tenha demorado um pouco mais para encontrar o plugin & amp; junte tudo.