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 50mEm seguida, comprima com gzip ou xz
gzip -vk9 50m xz -v9k 50mNota: Uma opção
xzde--block-size=16MiBdeve 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.gzou 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.xzO
--no-forkinforma 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.-vpode / 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/nbd0O
-noforké semelhante ao-no-forkacima, 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/nbd0agora é idêntico à imagem UN-COMPRESSED$ sudo diff -s /dev/nbd0 ~/Downloads/50m Files /dev/nbd0 and /home/user/Downloads/50m are identical/dev/nbd0agora pode ser usado como a imagem descompactada; montado, ler / copiar comddou 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.