Como montar uma imagem de disco compactada?

10

Se eu criar uma imagem de disco e compactar com gzip / xz / etc, existe uma maneira de montá-la diretamente sem antes descompactá-la?

Digamos que usei

sudo dd if=/dev/sdc1 | gzip -9 > image1.dd.gz

Como posso montar a imagem original sem criar uma cópia não compactada primeiro?

Ou usei

sudo dd if=/dev/sdc | gzip -9 > wholedisk.dd.gz

e o disco tem várias partições, isso tornaria mais difícil?

Com uma imagem não compactada de um disco inteiro, usar kpartx ou versões mais recentes de losetup com seu -P sinalizador deve criar um loop para cada partição.

Mas existe uma maneira de montar / losetup / ler a imagem compactada?

Se não funcionar para o gzip / xz, existe algum método de compressão para o qual isso funcione?

Nota sobre Q duplicado

A duplicata sugerida no momento

NÃO UTILIZA COMPRESSÃO e NÃO É DUPLICADO .

mount não montará uma imagem compactada por si só.

    
por Xen2050 12.10.2016 / 21:41

3 respostas

1

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"

  1. Instale nbdkit & amp; cliente

    apt install nbdkit nbd-client
    
  2. 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 .

  3. 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.

  4. 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> ou sudo kill <pid> . Terminando o servidor com CTRL-C parou ambos server & amp; cliente.

  5. 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 com dd ou usar kpartx , 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.

    
por Xen2050 11.12.2016 / 12:50
5

Você pode usar squashfs para compactar imagens de disco e montá-las.

Crie a imagem de disco

Se você ainda não tem uma imagem de disco, use dd para criar uma:

dd if=/dev/sda1 of=/tmp/sda1.img bs=4M

Comprima a imagem com squashfs

Instale squashfs :

apt-get install squashfs-tools

Comprima a imagem:

mksquashfs /tmp/sda1.img /tmp/sda1.squash.img

Ou Transmita a compactação (não precisa de um arquivo dd temporário)

mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'

Cumprimentos ao terminator14 no UbuntuForums.org . Definições / Explicações:

  • empty-dir - dir. "origem" Basicamente, no nosso caso, apenas um diretório vazio para satisfazer o formato arg input de mksquashfs
  • squash.img - o destino e nome do arquivo de saída do arquivo squashfs
  • sda_backup.img - o nome do backup do dd dentro do arquivo squashfs
  • f - especifica que sda_backup.img é um arquivo normal (em oposição a um diretório, um dispositivo de bloco ou um dispositivo char)
  • 444 - permissões do arquivo sda_backup.img dentro da imagem do squashfs
  • root root - UID e GID para o arquivo sda_backup.img dentro da imagem do squashfs. Pode ser especificado por números decimais ou por nome
  • dd if=/dev/sda bs=4M - o comando dd usado para ler o dispositivo do qual queremos backup

Monte a imagem

Primeiro, monte a imagem squashfs :

mkdir /mnt/squash
mount /tmp/sda1.squash.img /mnt/squash

Isso apresentará a imagem de disco não compactada para você montar:

mkdir /mnt/sda1
mount /mnt/squash/sda1.img /mnt/sda1

Ou se for uma imagem de unidade completa (particionada) você pode usar losetup para anexar a imagem dd a um dispositivo de loop (possivelmente opcional) e kpartx -a ou partprobe para localizar & amp; separe as partições para separar dispositivos, ou mesmo vgscan / vgchange -ay se houver LVM.

    
por Eborbob 09.11.2016 / 14:05
0

Aqui está o meu jeito de fazer isso, mas não sei o equivalente no console,

  • Compacte a pasta em um iso.
  • Monte o arquivo .iso com Disk Image Mounter .
  • Tada eu abro o iso comprimido sem desempacotá-lo.
por Kuntal Majumder 22.10.2016 / 08:07