rsync à l'archive compressée du fichier

11

Je prends des sauvegardes d'un serveur avec rsync, mais ces sauvegardes sont assez volumineuses et j'aimerais les compresser. Existe-t-il un moyen d'avoir une sorte de wrapper autour de rsync pour gunzip le fichier dans la sauvegarde, rsync les modifications du fichier live, puis re-gzip le fichier dès qu'il est copié?

Autrement dit , si les fichiers source sur le live sont foo , bar et baz , la sauvegarde a foo.gz , bar.gz et baz.gz .

Pour reformuler: je veux des fichiers compressés à une extrémité et des fichiers non compressés à l'autre extrémité. Je ne veux pas compresser avant la synchronisation, car même avec --rsyncable, cela rend la synchronisation moins efficace. Je connais l'option -z pour rsync. Je n'ai pas d'espace sur la machine de sauvegarde pour stocker tous les fichiers non compressés.

rjmunro
la source

Réponses:

10

Je ne suis pas sûr de comprendre ce que vous essayez de faire, mais vous pouvez créer des sauvegardes compressées sur le serveur principal en vous assurant qu'elles sont facilement synchronisables et qu'elles ne prennent pas la peine de décompresser quoi que ce soit en transit.

gzip(1)

--rsyncable
       While compressing, synchronize the output occasionally based on
       the  input.   This  increases  size by less than 1 percent most
       cases, but means that the rsync(1) program can much more  effi‐
       ciently  synchronize  files  compressed with this flag.  gunzip
       cannot tell the difference between a  compressed  file  created
       with this option, and one created without it.
UN B
la source
Agréable. Je ne connaissais pas le drapeau rsyncable. C'est pratique. Je me demande pourquoi ce n'est pas le défaut pour une perte de 1%
Matt Simmons
NB: l'option --rsyncable n'est pas disponible sur toutes les versions de gzip, et elle provient également d'un patch couramment appliqué plutôt que du code gzip de base, donc les numéros de version ne suffisent pas pour savoir si vous l'avez.
mc0e
-1

Vous pouvez écrire un wrapper dans rsync. Si vous «tirez» des données, il n'y a rien de spécial à faire. Si vous voulez «pousser» les données des machines d'origine vers le serveur de sauvegarde, il est plus délicat de les faire fonctionner:

Vous devez d'abord vous assurer que l'encapsuleur est appelé avec le même nom, le même chemin et les mêmes paramètres que le rsync d'origine, au moins pour l'utilisateur sous lequel vous exécutez les sauvegardes.

Deuxièmement, assurez-vous de ne rien écrire sur stdout, car cela gênerait le canal de communication.

Et troisièmement, assurez-vous de passer tous les paramètres que vous obtenez, en les modifiant simplement en fonction de la destination nouvellement non compressée.

Javier
la source
-2

Il recherche probablement la compression de transmission de données via rsync, pas la compression de fichiers à l'autre bout.

Consultez: http://jimmyg.org/blog/2007/rsync-basics.html

Paramètres de compression de la page de manuel:

   -z, --compress              compress file data during the transfer

        --compress-level=NUM    explicitly set compression level

Par défaut, ssh effectue sa propre compression dans une certaine mesure. Je ne sais pas à quel point rsync est meilleur que ssh natif. Si la majorité de vos fichiers sont déjà compressés en fichiers gzip, le mécanisme de compression de rsync ne fera probablement pas grand chose pour vous. Vous ne pouvez presser qu'un fichier autant.


la source
Non, je recherche la compression de fichiers à une seule extrémité. La synchronisation des fichiers déjà compressés est inefficace, donc j'aimerais que la partie rsync se produise avec des données non compressées.
rjmunro