Si je crée une image disque et la compresse avec gzip/xz/etc, existe-t-il un moyen de la monter directement sans la décompresser au préalable?
Dis que j'ai utilisé
Sudo dd if=/dev/sdc1 | gzip -9 > image1.dd.gz
comment puis-je monter l'image d'origine sans créer une copie non compressée au préalable?
Ou j'ai utilisé
Sudo dd if=/dev/sdc | gzip -9 > wholedisk.dd.gz
et le disque a plusieurs partitions, est-ce que cela le rendrait plus difficile?
Avec une image non compressée d'un disque entier, l'utilisation de kpartx
ou des versions plus récentes de losetup
avec son drapeau -P
devrait créer une boucle pour chaque partition.
Mais existe-t-il un moyen de monter/perdre/lire l'image compressée?
Si cela ne fonctionne pas pour gzip/xz, y a-t-il une méthode de compression pour laquelle cela fonctionnerait?
Le duplicata actuellement suggéré
N'UTILISE PAS LA COMPRESSION , et N'EST PAS UN DUPLICATA .
mount
ne montera pas une image compressée par elle-même.
J'ai pu obtenir un serveur NBD pour "servir" une version non compressée d'un fichier .gz ou .xz. Je ne sais pas s'il doit lire très souvent l'intégralité du fichier compressé (testé jusqu'à présent avec de petits fichiers en RAM), mais au moins cela fonctionne sans avoir à extraire une copie complète non compressée.
Installer nbdkit et client
apt install nbdkit nbd-client
Créer un fichier de style "dd" - un fichier 50M vide avec un système de fichiers ext et le compresser (facultatif pour les tests uniquement)
fallocate -l 50M 50m
mkfs.ext3 -v 50m
Compressez ensuite avec gzip ou xz
gzip -vk9 50m
xz -v9k 50m
Remarque: Une option xz
de --block-size=16MiB
devrait offrir de meilleures performances d'accès aléatoire, mais aux dépens d'une compression moindre (peut-être 1%?). Voir le description du plugin xz du nbdkit .
Exécuter le serveur sur l'image COMPRESSED
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 pour 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
Le --no-fork
indique au serveur "Ne pas basculer en arrière-plan" . Il est donc un peu plus facile de voir les messages d'erreur possibles et de les éliminer avec CTRL-C.
-v
peut afficher/affichera trop de messages d'état, notamment lors de la lecture.
Exécuter le client (dans un autre terminal/fenêtre)
Sudo nbd-client -nofork 127.0.0.1 10809 /dev/nbd0
Le -nofork
est semblable au -no-fork
ci-dessus, mais je pourrais ne pas tuer le client avec CTRL-C, kill <pid>
ou Sudo kill <pid>
. Terminer le serveur avec CTRL-C a arrêté le serveur et le client.
Notez que /dev/nbd0
est maintenant identique à l'image UN-COMPRESSED
$ Sudo diff -s /dev/nbd0 ~/Downloads/50m
Files /dev/nbd0 and /home/user/Downloads/50m are identical
/dev/nbd0
peut maintenant être utilisé comme l'image non compressée; monté, lecture/copie avec dd
name__, ou utilisez kpartx
name__, partprobe
name__, vgscan
name__/vgchange
name__, etc.!
Merci à Cristian Ciupitu sur Unix et Linux , bien que cela ait pris un peu plus de temps pour trouver le plugin et que tout soit ensemble.
Vous pouvez utiliser squashfs
pour compresser les images de disque, puis les monter.
Si vous n'avez pas encore d'image disque, utilisez dd
pour en créer une:
dd if=/dev/sda1 of=/tmp/sda1.img bs=4M
Installez squashfs
:
apt-get install squashfs-tools
Compressez l'image:
mksquashfs /tmp/sda1.img /tmp/sda1.squash.img
mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'
Compliments to terminator14 sur UbuntuForums.org . Définitions/explications:
empty-dir
- Rép. "Source" Fondamentalement, dans notre cas, juste un répertoire vide pour satisfaire le format d'argument d'entrée de mksquashfssquash.img
- la destination et le nom du fichier squashfs en sortiesda_backup.img
- nom de la sauvegarde dd dans le fichier squashfsf
- Spécifie que sda_backup.img est un fichier normal (par opposition à un répertoire, un périphérique en mode bloc ou un périphérique char).444
- autorisations du fichier sda_backup.img à l'intérieur de l'image squashfsroot root
- UID et GID du fichier sda_backup.img dans l'image squashfs. Peut être spécifié par des nombres décimaux ou par nomdd if=/dev/sda bs=4M
- Commande dd utilisée pour lire le périphérique que nous voulons sauvegarder.Commencez par monter l'image squashfs
:
mkdir /mnt/squash
mount /tmp/sda1.squash.img /mnt/squash
Ceci présentera l’image disque non compressée que vous souhaitez monter:
mkdir /mnt/sda1
mount /mnt/squash/sda1.img /mnt/sda1
Ou, s'il s'agit d'une image de lecteur complète (partitionnée), vous pouvez utiliser losetup
pour associer l'image dd à un périphérique en boucle (éventuellement facultatif), puis kpartx -a
ou partprobe
pour rechercher et séparer les partitions permettant de séparer les périphériques, ou même vgscan
/vgchange -ay
s'il existe de LVM .