2011-10-22 3 views
0

Est-il possible de canaliser la sortie (données brutes, pas de journalisation) vers un fichier de rsync, et peut-être enregistrer dans un bsdiff? Je trouve rsnapshot très irritant avec le manque de configuration et de syntaxe stupide (indenting, wtf?) Et rdiff pour être un peu instable.Pipe sortie rsync vers le fichier

J'ai une solution de travail où je rsync toutes les données, en faire une archive tar.gz et bsdiff pour générer un patch entre deux archives tar.gz. Mais cela demande beaucoup de ressources CPU et nécessite beaucoup de disque, car vous devez créer l'archive entière à chaque fois.

Pour résumer: - Faire le rsync initial - bsdiff contre les fichiers précédents - Archive diff de manière à le rendre facile à récupérer

Quand j'écrit ce que je viens de recevoir une idée avec lvm-snapshot, les preneurs sur comment je devrais aller de l'avant avec ça?

Répondre

0

rsync(1) peut utiliser une coque différente facilement lors de la mise en contact avec des systèmes distants; -e ssh est la valeur par défaut, mais vous pouvez écrire un programme wrapper qui commence ssh et enregistre une copie de tout le contenu que vous transférez le long de ssh.

Certains pseudo-code pour ce que je pense:

in[2] = pipe 
out[2] = pipe 
err[2] = pipe 
fork 
if child, fork 
grandparent /* ssh */ 
    close 0, 1, 2 
    dup2 in[0], 0 
    dup2 out[1], 1 
    dup2 err[1], 2 
    close in, out, err 
    exec(ssh, hostname, rsync) -- copy from rsync itself 
parent /* stdin -> pipe */ 
    close in[0], out, err, 1, 2 
    open (log, "/path/to/log", "w") 
    loop forever: 
     read(0, buf) 
     write(in[1], buf) 
     write(log, buf) 
child /* pipe -> stdout, stderr */ 
    close in, out[1], err[1], 0 
    loop forever: 
     read(out[0], bufout) 
     write(1, bufout) 
     read(err[0], buferr) 
     write(2, buferr) 

S'il vous plaît revérifier les pipe(2), dup2(2) et close(2) appels avant l'exécution du présent; Je crois que j'ai branché les descripteurs correctement et fermé les descripteurs inutilisés dans chaque processus, mais c'est un peu subtil. Je ne sais pas à quel point il sera facile pour vous d'appliquer le fichier résultant à l'archive tar de votre terminal distant, mais j'espère que ce n'est pas la partie sur laquelle vous êtes bloqué.

Questions connexes