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
umount 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 ferai généralement une
gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K
C’est vraiment simple et me permet d’économiser la totalité du disque, tout en préservant l’espace utilisé.
Voici le problème. Disons que je fais ce qui précède, mais pas sur un système propre, que les sauvegardes rsync ne sont pas lancées assez tôt et que certains fichiers auxquels je souhaite accéder se trouvent sur l'image. Supposons que je ne dispose pas de l'espace de stockage nécessaire pour décompresser et dd l'image sur un lecteur, mais que je veuille monter l'image pour extraire des fichiers individuels ... Est-ce possible?
Normalement, on ne compresse pas l'image en DD, ce qui vous permettra de monter l'image en utilisant -o loop
... mais ce n'est pas mon cas ...
Des suggestions pour monter l’img compressé à la volée?
Est-ce qu'utiliser AVFS pour 'monter' le fichier gz puis monter le fichier interne dd.img fonctionnerait (je ne le pense pas ... mais aurait besoin d'une vérification ...)?
la source
SquashFS
pour ce genre de choses. Il permet également de dupliquer les fichiers dupliqués.Réponses:
Cela dépend si l'image disque est une image disque complète ou juste une partition.
Lavage de la 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 l'image d'un disque entier, vous voudrez peut-être laver chacune des partitions du disque.
ATTENTION: Attention, vous voulez définir l'
of
un fichier dans la partition montée, PAS LA PARTITION LUI - MÊME!Faire une image de partition
Où
sda
est le nom du périphérique et1
le numéro de la partition. Ajustez en conséquence pour votre système si vous souhaitez créer une image sur un autre périphérique ou une autre partition.Faire une image de disque entière
Où
sda
est le nom de l'appareil. Ajustez en conséquence pour votre système si vous souhaitez créer une image avec un autre périphérique.Compression
Créez une image "squashfs" contenant l’image complète non compressée.
Compression en continu
Pour éviter de créer un fichier temporaire distinct de la taille complète du disque, vous pouvez diffuser en continu dans une image squashfs.
Monter une image de partition compressée
Commencez par monter l'image squashfs, puis l'image de partition stockée dans l'image squashfs montée.
Maintenant que vous avez l'image compressée montée, montez l'image elle-même (c'est à l'intérieur de l'image squashfs)
Maintenant, votre image est montée sous
compressed_image
.ÉDITER: si vous vouliez simplement restaurer l’image disque sur une partition à ce stade (au lieu de la monter pour parcourir / lire le contenu), il suffit d’afficher
dd
l’imagesquash_mount/sda1_backup.img
sur la destination au lieu de la fairemount
.Monter une image disque complète compressée
Cela nécessite l'utilisation d'un package appelé kpartx. kpartx vous permet de monter des partitions individuelles dans une image disque complète.
Commencez par monter votre partition écrasée contenant l’image de disque complète.
Maintenant, vous devez créer des périphériques pour chacune des partitions dans l'image de disque complète:
Cela créera des unités pour les partitions dans l’image de disque complète
/dev/mapper/loopNpP
où N est le numéro attribué à l’unité de bouclage et P le numéro de la partition. Par exemple:/dev/mapper/loop0p1
.Vous avez maintenant un moyen de monter les partitions individuelles dans l'image disque complète:
la source
-p
ou-pf
pour lui transmettre un pseudo-fichier. Un pseudo fichier peut être utilisé pour créer des nœuds de périphérique que vous ne pouvez pas utiliser autrement sans root (utile pour créer des images dans le cadre d'un processus de construction) ou pour transmettre en continu la sortie d'une commande dans l'image. L'un des exemples donnés dans la documentation (/usr/share/doc/squashfs-tools/examples/pseudo-file.example
sur Debian / Ubuntu) consisteinput f 444 root root dd if=/dev/sda1 bs=1024 count=10
à copier le premier 10K d'une image disque dans un fichier nommé "entrée" dans l'image squashfs.Si l'image est en lecture seule, vous pouvez également utiliser nbdkit ( page de manuel ) et son plug-in xz (xz devrait fournir une meilleure compression et des temps d'accès aléatoires supérieurs à ceux de gzip).
Créer l'image de partition compressée
Une
--block-size
option de 16 Mio devrait fournir de bonnes performances d'accès aléatoire.Remarque: vous pouvez utiliser d'autres programmes de compression xz tels que pixz, qui fournit une compression parallèle. Assurez-vous simplement de fractionner la sortie en plusieurs petits blocs, sinon nbdkit doit décompresser de nombreuses données. Par exemple, à compter de septembre 2015, pxz ne prend pas cela en charge.
Servez-le avec nbdkit
Se connecter au serveur NBD
Montez-le en lecture seule
Lorsque vous avez terminé
Arrêtez nbdkit en appuyant sur Ctrl+ C(ou avec kill ).
la source
Essayer
archivemount
archivemount est un système de fichiers basé sur FUSE pour les variantes Unix, y compris Linux. Son objectif est de monter des archives (tar, tar.gz, etc.) sur 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 les 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 utiliser son contenu comme un fichier normal. Vous pouvez peut-être obtenir une table de partition ou convertir une image de montage avec les outils qemu.
squashfs utile pour démarrer à partir d'une image, mais beaucoup plus complexe pour la sauvegarde.
la source
dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.ddimg.gz
Cette réponse complète la réponse de Cristian Ciupitu . Si vous utilisez la compression xz avec une taille de bloc raisonnable, vous pouvez accéder à l'image disque à l'aide de guestfish ou d'autres outils libguestfs tels que:
la source
Pas vraiment. Vous ne pouvez pas vraiment rechercher un bloc spécifique dans le fichier compressé sans tout d'abord décompresser, ce qui rend difficile l'utilisation de l'image compressée en tant que périphérique de bloc.
Vous pouvez utiliser quelque chose comme
dump
etrestore
(outar
vraiment), qui utilisent tous un format de diffusion en continu ... afin de pouvoir accéder à des fichiers individuels en balayant efficacement le flux non compressé. Cela signifie que si le fichier souhaité se trouve à la fin de l'archive compressée, l'attente peut être longue, mais cela ne vous oblige pas à tout décompresser réellement sur le disque.Utiliser
tar
des sauvegardes peut sembler un peu démodé, mais vous obtenez beaucoup de flexibilité.la source
Un autre addendum à la réponse de Cristian Ciupitu :
Si vous
nbdkit
montez une image de disque complète (par opposition à une image de partition), vous devrez peut-être spécifier la taille du bloc (taille du secteur du disque) lors de la connexion au serveur NBD, la valeur par défaut étant en1024
octets. Pour utiliser des512
octets à la place:Après cela, le disque apparaîtra comme
/dev/nbd0
, et vous devriez pouvoir voir la table de partition en utilisantfdisk -l
. Cependant, les partitions ne sont pas encore montables - Utilisezkpartx
(à partir de la réponse de doug65536 ) pour créer des périphériques pour les partitions, par exemple:Enfin, les partitions apparaîtront dans
/dev/mapper/
et vous pourrez les monter comme d’habitude. Veillez à utiliser le mode readonly (-o ro
), car le plugin xz ne prend en charge que les lectures suivantes:la source