J'aime créer une sauvegarde d'image pour la première fois que je sauvegarde un système. Après cette première fois, j'utilise rsync pour effectuer des sauvegardes incrémentielles.
Ma sauvegarde d'image habituelle est la suivante:
Montez et mettez à zéro l'espace vide:
dd if=/dev/zero of=temp.dd bs=1M
rm temp.dd
démonter et DD le lecteur tout en le compressant
dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz
pour remettre le système à la normale, je fais généralement un
gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K
C'est vraiment simple et cela me permet de sauvegarder le "disque entier", mais vraiment juste d'économiser l'espace utilisé.
Voici le problème. Disons que je fais ce qui précède mais pas sur un système propre et que les sauvegardes rsync ne démarrent pas assez tôt et qu'il y a des fichiers auxquels je veux accéder qui sont sur l'image. Disons que je n'ai pas l'espace de stockage pour décompresser et ajouter l'image sur un lecteur, mais que je souhaite monter l'image pour en retirer des fichiers individuels .... Est-ce possible?
Normalement, on ne compresserait pas l'image dd, ce qui vous permettra de simplement monter l'image en utilisant -o loop
... mais ce n'est pas mon cas ...
Des suggestions pour monter l'img compressé à la volée?
Utiliserait AVFS pour 'monter' le fichier gz puis monter le travail interne dd.img (je ne pense pas ... mais aurait besoin d'une vérification. ..)?
Cela dépend si l'image disque est une image disque complète ou juste une partition.
Si le disque est en bon état de fonctionnement, vous obtiendrez une meilleure compression si vous nettoyez l'espace vide du disque avec des zéros. Si le disque échoue, ignorez cette étape.
Si vous créez un disque entier, vous souhaiterez laver chacune des partitions du disque.
ATTENTION: Attention, vous voulez définir le of
sur un fichier dans la partition montée, PAS LA PARTITION ELLE-MÊME!
mkdir image_source
Sudo mount /dev/sda1 image_source
dd if=/dev/zero of=image_source/wash.tmp bs=4M
rm image_source/wash.tmp
Sudo umount image_source
mkdir image
Sudo dd if=/dev/sda1 of=image/sda1_backup.img bs=4M
Où sda
est le nom du périphérique et 1
est le numéro de partition. Ajustez en conséquence pour votre système si vous souhaitez créer une image d'un autre périphérique ou partition.
mkdir image
Sudo dd if=/dev/sda of=image/sda_backup.img bs=4M
Où sda
est le nom du périphérique. Ajustez en conséquence pour votre système si vous souhaitez créer une image d'un autre appareil.
Créez une image "squashfs" qui contient l'image non compressée complète.
Sudo apt-get install squashfs-tools
mksquashfs image squash.img
Pour éviter de créer un fichier temporaire distinct de la taille complète du disque, vous pouvez diffuser en flux dans une image squashfs.
mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'
Montez d'abord l'image squashfs, puis montez l'image de partition stockée dans l'image squashfs montée.
mkdir squash_mount
Sudo mount squash.img squash_mount
Maintenant que vous avez monté l'image compressée, montez l'image elle-même (c'est-à-dire à l'intérieur de l'image squashfs)
mkdir compressed_image
Sudo mount squash_mount/sda1_backup.img compressed_image
Votre image est maintenant montée sous compressed_image
.
EDIT: Si vous vouliez simplement restaurer l'image disque sur une partition à ce stade (au lieu de la monter pour parcourir/lire le contenu), juste dd
l'image à squash_mount/sda1_backup.img
sur la destination au lieu de faire mount
.
Cela vous oblige à utiliser un package appelé kpartx. kpartx vous permet de monter des partitions individuelles dans une image disque complète.
Sudo apt-get install kpartx
Tout d'abord, montez votre partition écrasée qui contient l'image disque complète
mkdir compressed_image
Sudo mount squash.img compressed_image
Vous devez maintenant créer des périphériques pour chacune des partitions dans l'image disque complète:
Sudo kpartx -a compressed_image/sda_backup.img
Cela créera des périphériques pour les partitions dans l'image disque complète à /dev/mapper/loopNpP
où [~ # ~] n [~ # ~] est le numéro attribué au périphérique de bouclage, et [~ # ~] p [~ # ~] est le numéro de partition. Par exemple: /dev/mapper/loop0p1
.
Vous avez maintenant un moyen de monter les partitions individuelles dans l'image disque complète:
mkdir fulldisk_part1
Sudo mount /dev/mapper/loop0p1 fulldisk_part1
Essayez archivemount
root@srv1:/backup# archivemount windows-2003-S.gz /target/
Unrecognized archive format
root@srv1:/backup# archivemount -o formatraw windows-2003-S.gz /target/
Calculating uncompressed file size. Please wait.
root@srv1:/backup# ls /target/
data
root@srv1:/backup# file /target/data
/target/data: DOS/MBR boot sector; partition 1 : ID=0x7, start-CHS (0x0,1,1), end-CHS (0x3ff,254,63), startsector 63, 58717512 sectors, extended partition table (last)
archivemount est un système de fichiers basé sur Fuse pour les variantes Unix, y compris Linux. Son but est de monter des archives (c'est-à-dire tar, tar.gz, etc.) à un point de montage où elles peuvent être lues ou écrites comme avec tout autre système de fichiers. Cela rend l'accès au contenu de l'archive, qui peut être compressé, transparent pour d'autres programmes, sans les décompresser.
http://linuxaria.com/howto/how-to-mounts-an-archive-for-access-as-a-file-system
Après avoir monté l'archive, vous pouvez l'utiliser comme un fichier normal. Peut-être obtenir une table de partition, ou convertir, monter l'image avec les outils qemu.
squashfs utile pour démarrer à partir d'une image, mais très complexe pour la sauvegarde.
Si l'image est en lecture seule vous pouvez également utiliser nbdkit ( page de manuel ) et son plugin xz (xz devrait fournir une meilleure compression et des temps d'accès aléatoires que gzip).
dd if=/dev/sda1 bs=16M | xz -9 --block-size=16MiB - > sda1.img.xz
UNE --block-size
l'option de 16 Mio devrait fournir de bonnes performances d'accès aléatoire.
Remarque: vous pouvez utiliser des programmes de compression xz alternatifs tels que pixz qui fournit une compression parallèle, assurez-vous simplement qu'il divise la sortie en plusieurs petits blocs, sinon nbdkit doit décompresser beaucoup de données. Par exemple, depuis septembre 2015, pxz ne prend pas cela en charge.
nbdkit --no-fork --user nobody --group nobody -i 127.0.0.1 \
xz file=sda1.img.xz
nbd-client 127.0.0.1 10809 /dev/nbd0 -nofork
mount -o ro /dev/nbd0 sda1
umount /dev/nbd0
nbd-client -d /dev/nbd0
Arrêtez nbdkit en appuyant sur Ctrl+C (ou avec kill ).
Cette réponse complète réponse de Cristian Ciupit . Si vous utilisez la compression xz avec une taille de bloc raisonnable, vous pouvez accéder à l'image disque en utilisant guestfish ou autre libguestfs des outils comme celui-ci:
nbdkit xz file=disk.img.xz --run 'guestfish --format=raw -a $nbd -i'
[~ # ~] update [~ # ~] : Puisque xz n'est plus un plugin, mais est devenu un filtre, la commande est maintenant:
nbdkit file disk.img.xz --filter xz --run 'guestfish --format=raw -a $nbd -i'
Pas vraiment. Vous ne pouvez pas vraiment rechercher un bloc spécifique dans le fichier compressé sans décompresser tout d'abord, ce qui rend difficile l'utilisation de l'image compressée comme périphérique de bloc.
Vous pouvez utiliser quelque chose comme dump
et restore
(ou tar
, vraiment), qui utilisent tous un format de diffusion en continu ... afin que vous puissiez accéder à des fichiers individuels en parcourant efficacement le flux non compressé. Cela signifie que si le fichier que vous voulez se trouve à la fin de l'archive compressée, vous devrez peut-être attendre longtemps, mais cela ne vous oblige pas à tout décompresser sur le disque.
L'utilisation de tar
pour les sauvegardes peut sembler un peu démodée, mais vous obtenez beaucoup de flexibilité.
Un autre addendum à réponse de Cristian Ciupit :
Si vous utilisez nbdkit
pour monter une image disque complète (par rapport à une image de partition), vous devrez peut-être spécifier la taille du bloc ( taille de secteur du disque) lors de la connexion au serveur NBD, car il est par défaut 1024
octets. Utiliser 512
octets à la place:
nbd-client 127.0.0.1 /dev/nbd0 -b 512 -n
Après cela, le disque apparaîtra comme /dev/nbd0
, et vous devriez pouvoir afficher la table de partition à l'aide de fdisk -l
. Cependant, les partitions ne sont pas encore montables - Utilisez kpartx
(de réponse de doug65536 ) pour créer des périphériques pour les partitions, par exemple:
kpartx -arv /dev/nbd0
Enfin, les partitions apparaîtront dans /dev/mapper/
, et vous pouvez les monter comme d'habitude. Assurez-vous d'utiliser le mode lecture seule (-o ro
), car le plugin xz ne prend en charge que les lectures:
mount -o ro /dev/mapper/nbd0p3 /mnt