Come montare un'immagine del disco compresso?


12

Se creo un'immagine disco e la comprimo con gzip / xz / etc, c'è un modo per montarla direttamente senza prima decomprimerla?

Di 'che ho usato

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

come posso montare l'immagine originale, senza prima creare una copia non compressa?

O ho usato

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

e il disco ha più partizioni, sarebbe più difficile?

Con un'immagine non compressa di un intero disco, l'utilizzo kpartxo le versioni più recenti di losetupcon il relativo -Pflag dovrebbero creare un ciclo per ogni partizione.

Ma c'è un modo per montare / losetup / leggere l'immagine compressa?

Se non funziona con gzip / xz, esiste un metodo di compressione per cui funzionerebbe?


Nota sul duplicato Q

Il duplicato attualmente suggerito

Non usano la compressione , e non è un duplicato .

mount non monterà un'immagine compressa da sola.


Posso dirti che è assolutamente possibile. Ma non posso dirti quanto atm perché le istruzioni sono su 2 HDD esterni e in questo momento non ho accesso a nessuno dei due, ma voglio farti sapere che funziona. Tornerò con una risposta quando ne ho una (e nessun altro ha pubblicato una fino ad allora).
UTF-8


1
@ UTF-8 È incoraggiante, grazie. Cordiali saluti, l'obiettivo originale è quello di fare un backup più piccolo di un'unità / partizione che è quasi vuota o ha molti dati facilmente comprimibili ed essere in grado di leggerlo senza scrivere MOLTI dati extra o aver bisogno di una tonnellata di spazio libero per estrarlo
Xen2050,


2
@ bodhi.zazen Pardon? Forse dovrei chiarire, mount non decomprime automaticamente le immagini, quindi questo Q non è un duplicato di askubuntu.com/questions/69363 (forse mi sono perso lo scherzo, speriamo che decomprimere non sia l' unica risposta :)
Xen2050,

Risposte:


10

È possibile utilizzare squashfsper comprimere le immagini del disco e quindi montarle.

Crea l'immagine del disco

Se non hai ancora un'immagine del disco, usa ddper crearne una:

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

Comprimi l'immagine con squashfs

Installa squashfs:

apt-get install squashfs-tools

Comprimi l'immagine:

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

Oppure esegui lo streaming della compressione (non è necessario un file dd temporaneo)

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

Complimenti a terminator14 su UbuntuForums.org . Definizioni / Spiegazioni:

  • empty-dir- dir "sorgente". Fondamentalmente nel nostro caso, solo una directory vuota per soddisfare il formato di input arg di mksquashfs
  • squash.img - la destinazione e il nome del file di output squashfs
  • sda_backup.img - il nome del backup dd all'interno del file squashfs
  • f - specifica che sda_backup.img è un file normale (al contrario di una directory, di un dispositivo a blocchi o di un dispositivo char)
  • 444 - permessi del file sda_backup.img all'interno dell'immagine di squashfs
  • root root- UID e GID per il file sda_backup.img all'interno dell'immagine di squashfs. Può essere specificato con numeri decimali o per nome
  • dd if=/dev/sda bs=4M - il comando dd utilizzato per leggere il dispositivo di cui si desidera eseguire il backup

Montare l'immagine

Innanzitutto montare l' squashfsimmagine:

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

Questo presenterà l'immagine del disco non compresso da montare:

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

Oppure, se si tratta di un'immagine di unità completa (partizionata), è possibile utilizzare losetupper collegare l'immagine dd a un dispositivo loop (possibilmente opzionale) e quindi kpartx -ao partprobeper trovare e separare le partizioni in dispositivi separati, o anche vgscan/ vgchange -ayse è presente LVM.


2
Ho aggiunto alcune informazioni al volo su squashfs, per evitare di aver bisogno di un semplice file dd temporaneo. Ottima risposta con squashfs, semplicemente non fa i formati xz / gz più pipe-friendly
Xen2050

Funzionerebbe in qualche modo con un'immagine del disco completa contenente anche più partizioni?
friederbluemle,


A seconda del tipo di file system, il montaggio potrebbe richiedere le ro,noloadopzioni, in questo modo:mount -o ro,noload /mnt/squash/sda1.img /mnt/sda1
HackerBoss

7

Sono stato in grado di ottenere un server NBD per "servire" una versione non compressa di un file .gz o .xz. Non sono sicuro che debba leggere l'intero file compresso molto spesso (testato finora solo con piccoli file in ram) ma almeno funziona senza dover estrarre un'intera copia non compressa.

Visualizzazione di un'immagine dd compressa gz / xz "al volo"

  1. Installa nbdkit e client

    apt install nbdkit nbd-client
    
  2. Crea un file di stile "dd" demo: un file 50M vuoto con un filesystem ext e comprimilo (opzionale solo per test)

    fallocate -l 50M 50m
    mkfs.ext3 -v 50m
    

    Quindi comprimi con gzip o xz

    gzip -vk9 50m
    xz -v9k 50m
    

    Nota: xzun'opzione di --block-size=16MiBdovrebbe fornire migliori prestazioni di accesso casuale, ma a scapito di una minore compressione (forse dell'1%?). Vedi la descrizione del plugin xz di nbdkit .

  3. Esegui il server sull'immagine COMPRESSA

    nbdkit -v --no-fork -i 127.0.0.1 /usr/lib/i386-linux-gnu/nbdkit/plugins/nbdkit-gzip-plugin.so file=~/Downloads/50m.gz
    

    o per 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
    

    La --no-forkracconta il server "Non fa il fork in secondo piano" in modo da vedere i possibili messaggi di errore e uccidendo con CTRL-C è un po 'più facile.

    -v può / mostrerà troppi messaggi di stato, specialmente durante la lettura.

  4. Esegui client (in un altro terminale / finestra)

    sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
    

    L' -noforkè simile a -no-forksopra, ma ho potuto non uccidere il cliente con CTRL-C, kill <pid>o sudo kill <pid>. La chiusura del server con CTRL-C ha interrotto sia il server che il client.

  5. Osservare che /dev/nbd0ora è identico all'immagine NON COMPRESSA

    $ sudo diff -s /dev/nbd0 ~/Downloads/50m
    Files /dev/nbd0 and /home/user/Downloads/50m are identical
    

    /dev/nbd0ora può essere usato proprio come l'immagine non compressa; montato, lettura / copia con dd, o l'uso kpartx, partprobe, vgscan/ vgchange, ecc!

Grazie a Cristian Ciupitu su Unix e Linux , anche se ci è voluto un po 'più di ricerca per trovare il plugin e far andare tutto insieme.


Su Fedora 31 nbdkit -v --no-fork -i 127.0.0.1 --filter=xz file ~/Downloads/50m.xzfunzionava alla grande con lo stesso comando client
EkriirkE

Su Ubuntu xenial 16.04 LTS nbdkit 1.1.11 utilizza il vecchio protocollo NBD, che differisce dal nuovo protocollo NBD, utilizzato in nbd-client 3.13, ma si può usare la versione nbd-client prima della 3.10, ad es. nbd-client 3.8 from Ubuntu precise 12.04 old LTS[Usare le vecchie versioni solo localmente per sicurezza!]
user1742529

0

Ecco il mio modo di farlo, non conosco l'equivalente console di questo però,

  • Comprimi la cartella in un iso. inserisci qui la descrizione dell'immagine
  • Montare il .isofile con Disk Image Mounter. inserisci qui la descrizione dell'immagine
  • Tada Apro l'iso compresso senza decomprimerlo. inserisci qui la descrizione dell'immagine

4
Questo metodo comprime effettivamente i dati? Sembra che utilizzi un'immagine iso9660 normale (tramite file-roller?), Che non utilizza la compressione. L'ho provato su un file da dd if=/dev/zero100 MB di tutti gli zero ( e file-roller) e in realtà aggiunge 362k di dati (supposizione iso overhead). Grazie, l'idea è sulla buona strada
Xen2050,

Scusa ma non ho idea delle tecnologie di compressione, ma se provi qualsiasi altro formato di compressione, scommetto che puoi anche elencarlo con il file-roller, ma se vuoi leggere quel file devi estrarre solo quel file specifico.
ciaozee,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.