Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

replication de backups ?

8 réponses
Avatar
Thierry B.
Bonjour le monde.

J'ai chez moi une dizaine de machines qui tournent sous des Unix
divers. Sur certaines d'entre elles, je fait du dev, et donc je
ne voudrais pas perdre quoi que ce soit si l'une d'entre elle se
gauffre. J'ai donc réfléchi longuement sur mon cas, et je suis
arrivé à cette idée:

Sur chacune des machines, j'ai un répertoire ~/Backups/ dans
lequel je copie ce que je veux préserver. Pour le moment, je
duplique manuellement d'une machine à l'autre (par scp ou rsync)
quelques fichiers. Au bout d'un moment c'est assez fastidieux :{

Maintenant, j'aimerais bien que tout ça devienne automatique. Sur
une machine Z, je copie ~/Essais/machin.tar.gz dans ~/Backups et
ce fichier sera automatiquement dupliqué dans tous les ~/Backups
des autres machines. Et là, j'hésite...

Donc, si vous connaissez une solution qui marche, surtout avec
des machines qui ne sont pas allumées tout le temps, je suis
preneur...

tTh (qui vient de perdre une machine ;)


--
Ca sert pas à grand chose de dire "wiki" en sautant comme un cabri ;->

8 réponses

Avatar
JKB
Le 16-04-2008, à propos de
replication de backups ?,
Thierry B. écrivait dans fr.comp.os.unix :
Bonjour le monde.


Salut tout seul !

J'ai chez moi une dizaine de machines qui tournent sous des Unix
divers. Sur certaines d'entre elles, je fait du dev, et donc je
ne voudrais pas perdre quoi que ce soit si l'une d'entre elle se
gauffre. J'ai donc réfléchi longuement sur mon cas, et je suis
arrivé à cette idée:

Sur chacune des machines, j'ai un répertoire ~/Backups/ dans
lequel je copie ce que je veux préserver. Pour le moment, je
duplique manuellement d'une machine à l'autre (par scp ou rsync)
quelques fichiers. Au bout d'un moment c'est assez fastidieux :{

Maintenant, j'aimerais bien que tout ça devienne automatique. Sur
une machine Z, je copie ~/Essais/machin.tar.gz dans ~/Backups et
ce fichier sera automatiquement dupliqué dans tous les ~/Backups
des autres machines. Et là, j'hésite...

Donc, si vous connaissez une solution qui marche, surtout avec
des machines qui ne sont pas allumées tout le temps, je suis
preneur...

tTh (qui vient de perdre une machine ;)


J'espère que ce n'est pas une SS20...

Personnellement, j'ai réglé le problème différemment. J'exporte un
volume en NFSv3/TCP sur toutes mes machines (y compris les NetBSD
depuis que j'ai réussi à faire cohabiter le ypserv de Linux avec le
ypbind de NetBSD, md5 et les shadow password...). Ce volume est
exporté par une machine (linux en l'occurrence) qui est redondée par
une seconde (deux UltraSPARC U60 bipro avec chacune une tour de
disques SCSI).

Ces deux machines ont un système en raid1 et un volume de données en
raid5. Le volume de données réellement exporté est formé d'un volume
raid1 dont les volumes "élémentaires" sont les volumes raid5 de
chacune des deux machines les deux serveurs communiquant en iSCSI.
Là-dessus, j'ai un dérouleur de bande... Cela fait des années que je
tourne comme ça sans souci particulier (j'avais commencé ce système
sur des SS20, c'est dire ;-) ).

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.

Avatar
Nicolas George
"Thierry B." wrote in message :
Maintenant, j'aimerais bien que tout ça devienne automatique. Sur
une machine Z, je copie ~/Essais/machin.tar.gz dans ~/Backups et
ce fichier sera automatiquement dupliqué dans tous les ~/Backups
des autres machines. Et là, j'hésite...


Ça, c'est très facile à faire. Quelque chose comme ceci devrait suffire :

cd
for m in [toutes tes machines]; do
[[ $m == $HOST ]] && continue
rsync -a Backups/ $m:Backups/
done

Là où c'est plus difficile, c'est (1) si tu veux supprimer un fichier : il
faut le supprimer partout, ou sinon il va revenir ; et (2) si tu fais la
bêtise de nommer deux fichier de la même manière sur deux machines
différentes, au mieux l'un va écraser l'autre, au pire tu pourrais avoir des
exemplaires de l'un et de l'autre qui se déplacent entre les différentes
machines au gré des synchronisations (ça peut être assez rigolo à regarder).

Une solution pour résoudre ces deux problèmes, c'est d'avoir un répertoire
~/var/backups qui contient un répertoire par machine (avec ~/Backups qui est
un lien vers le bon exemplaire). Dans ce cas, le rsync devient :

rsync -a --delete-after var/backups/$HOST/ $m:var/backups/$HOST/

Ceci dit, tu as parlé de développement. Donc ça doit normalement être des
petits fichiers textes. Donc mon neurone « suivi de version » fait bip.
Plutôt que des tarballs, ~/Backups contient des dépôts Git, et tu fais un
git pull sur chaque machine dans tous les sens.

Donc, si vous connaissez une solution qui marche, surtout avec
des machines qui ne sont pas allumées tout le temps, je suis
preneur...


Normalement, une machine éteinte, ça va juste bloquer pendant deux minutes à
la tentative de connexion, et c'est tout. La synchronisation se refera
après. Il faudrait regarder ce qui se passe si on lance deux rsync en sens
opposés entre les mêmes répertoires en même temps, mais le problème ne se
pose pas si tu as un répertoire par machine. Et j'ose espérer que Git a un
système de verrou fiable.

Avatar
Thierry B.
--{ Nicolas George a plopé ceci: }--

Maintenant, j'aimerais bien que tout ça devienne automatique. Sur
une machine Z, je copie ~/Essais/machin.tar.gz dans ~/Backups et
ce fichier sera automatiquement dupliqué dans tous les ~/Backups
des autres machines. Et là, j'hésite...


Ça, c'est très facile à faire. Quelque chose comme ceci devrait suffire :

cd
for m in [toutes tes machines]; do
[[ $m == $HOST ]] && continue
rsync -a Backups/ $m:Backups/
done


Oui, ça, c'est la solution "brute-force", que j'ai déja testée, et
pas totalement approuvée...

Là où c'est plus difficile, c'est (1) si tu veux supprimer un fichier : il
faut le supprimer partout, ou sinon il va revenir ;


Le retour du fichier fou du fils de la vengeance... Bon, on va écarter
ça dans un premier temps.

et (2) si tu fais la
bêtise de nommer deux fichier de la même manière sur deux machines
différentes, au mieux l'un va écraser l'autre, au pire tu pourrais avoir des
exemplaires de l'un et de l'autre qui se déplacent entre les différentes
machines au gré des synchronisations (ça peut être assez rigolo à regarder).


Voilà, c'est un peu au yoyo que je pensais. Si je donne le même nom
à deux fichiers différents, d'accord, c'est /paf/ pour moi. C'est
plutôt le souci du fichier qui se balade d'une machine à l'autre
parce que deux rsync/whatever se lance en parallele qui me tracasse,
et l'un risque d'écraser ce que fait l'autre.

Une solution pour résoudre ces deux problèmes, c'est d'avoir un répertoire
~/var/backups qui contient un répertoire par machine (avec ~/Backups qui est
un lien vers le bon exemplaire). Dans ce cas, le rsync devient :


Ouiménon, là. Je voudrais que cette "architecture de réplication" soit
personnelle à chaque yuser séparément. Et que ce soit transparent pour
chacun des yusers: il met un truc dans son ~/Backups, et hop...

Ceci dit, tu as parlé de développement. Donc ça doit normalement être des
petits fichiers textes. Donc mon neurone « suivi de version » fait bip.


Pour certains trucs, j'ai déja un subversion qui tourne, mais pas pour
tout. Et ce subversion est déja répliqué et sauvegardé... Pour les
autres trucs, c'est pas de petits fichiers textes (eg: images Gimp)
mais dans tous les cas, j'ai un Makefile qui fait un tarball, prêt à
être mis de coté.

Plutôt que des tarballs, ~/Backups contient des dépôts Git, et tu fais un
git pull sur chaque machine dans tous les sens.


Ce qui implique de mettre Git partout ? Mmm, je ne sais pas si ça
va être si facile que ça; dans mes machines, j'ai une RedHat du
siècle dernier, qui ne supporte plus trop les trucs modernes !)

opposés entre les mêmes répertoires en même temps, mais le problème ne se
pose pas si tu as un répertoire par machine. Et j'ose espérer que Git a un
système de verrou fiable.


Merci pour tout, je vais regarder Git pour voir si ça peut aider,
et je continue à réfléchir à tout ça. C'est pas si évident...


--
L'attaque d'Usenet par UTF-8 (film à 22h30)


Avatar
Nicolas George
"Thierry B." wrote in message :
Ouiménon, là. Je voudrais que cette "architecture de réplication" soit
personnelle à chaque yuser séparément. Et que ce soit transparent pour
chacun des yusers: il met un truc dans son ~/Backups, et hop...


Ce que j'ai proposé n'est pas contradictoire avec ça. La seule différence
avec ce que tu proposes est que ~/Backups est un lien symbolique vers
~/var/backups/machine, mais tout ça reste local à un compte.

Avatar
Nicolas-MICHEL'_remove_'
Thierry B. wrote:

Sur chacune des machines, j'ai un répertoire ~/Backups/ dans
lequel je copie ce que je veux préserver. Pour le moment, je
duplique manuellement d'une machine à l'autre (par scp ou rsync)
quelques fichiers. Au bout d'un moment c'est assez fastidieux :{


En bonne logique, et ta dernière ligne semble le confirmer,
le jour du crash ton backup manuel ne sera pas à jour.

Seul un système automatisé et contrôlé est fiable, amha.

Donc, si vous connaissez une solution qui marche, surtout avec
des machines qui ne sont pas allumées tout le temps, je suis
preneur...


Perso j'ai une centaine de machines sauvegardées avec du rsync, c'est
nickel.

une clef ssh, puis un script dans la crontab avec en gros :
rsync --delete -ave "ssh -l bkpuser" /source server:/dest/`hostname`/

Par contre 2 trucs me chiffonnent :
- Pourquoi se limiter à un dossier backup remplis manuellement plutôt
qu'à tout /home, voir à / ?
- Pourquoi faire un backup dans tous les sens plutôt que de définir un
certain ordre ?

A présent pour la question des machines allumées / éteintes, une
solution simple est de mettre un cron job toutes les heures et vérifier
que le "serveur" est dispo avec une commande ssh genre "uanme"

--
Nicolas - MICHEL at bluewin point ch
AIM : michelnicolas

Avatar
Thierry B.
--{ Nicolas MICHEL a plopé ceci: }--

Seul un système automatisé et contrôlé est fiable, amha.

C'est bien ce que je cherche à mettre en place :)


une clef ssh, puis un script dans la crontab avec en gros :
rsync --delete -ave "ssh -l bkpuser" /source server:/dest/`hostname`/


Je vais décortiquer ça...

- Pourquoi se limiter à un dossier backup remplis manuellement plutôt
qu'à tout /home, voir à / ?


Parce que pour ces trucs là, j'ai déja des procédures, et d'autre
part, parmi tous ces /home, il y en a qui contiennent des dizaines
de giga de fichier intermédiaires qui n'ont pas vraiment besoin
d'être sauvé toutes les trois minutes. Je cherche un système de
réplication transparent. Peut-être voir avec Unison ?

- Pourquoi faire un backup dans tous les sens plutôt que de définir un
certain ordre ?


En fait, ça fait partie des questions que je me pose en ce moment,
mais je suis en train de réaliser que ce n'est pas si simple que ça:
je suppose par exemple qu'il faut que les machines soient toutes à
la même heure (pas trop difficile à faire). Et plus ça va, plus je
trouve que ça ressemble à un truc de p2p...

A présent pour la question des machines allumées / éteintes, une
solution simple est de mettre un cron job toutes les heures et vérifier
que le "serveur" est dispo avec une commande ssh genre "uanme"


J'ai déja des trucs qui me permettent de savoir qui est connecté
sur le réseau. C'est codé assez goret, mais ça commence à être
utilisable :)

En tout cas, merci pour vos suggestions/questions qui me permettent
de mieux cerner mon problème. Je vous tiens au courant...


--
Pourquoi le Poulet a traversé la rue ?
* Albert Einstein : Le fait que le poulet traverse la route ou que la route
se déplace sous le poulet dépend uniquement du référentiel dans lequel on
se place.

Avatar
Nicolas-MICHEL'_remove_'
Thierry B. wrote:

Parce que pour ces trucs là, j'ai déja des procédures, et d'autre
part, parmi tous ces /home, il y en a qui contiennent des dizaines
de giga de fichier intermédiaires qui n'ont pas vraiment besoin
d'être sauvé toutes les trois minutes.


Bon, j'ai un point de vue différent du fait que ce ne sont pas mes
données que je sauvegarde. Donc je backup sans chichi.

On peut affiner avec --include="" et --exclude=""
Notament /dev ne se sauvegarde pas tel que avec rsync.

Par contre, ce dont tu parles resemble à un travail professionnel.
Si je compare le prix de l'heure d'un dev au prix du Go, je ne comprends
pas vraiment ton point de vue.

Perso je mettrais non pas sur toutes les machines, mais 3 seulement, un
"serveur" de backup contenant la totalité des autres.
Et je ferais un backup rotatif qui prendrait un serveur différent chaque
semaine. Avec éventuellement un --delete le lundi mais pas les autres
jours pour pouvoir retrouver un fichier effacé.

Une autre option serait d'avoir un seul "serveur" de backup mais équipé
d'un lecteur de tape.

Je cherche un système de
réplication transparent. Peut-être voir avec Unison ?


Connais pas.
Mais ça a l'air intéressant.


--
Nicolas - MICHEL at bluewin point ch
AIM : michelnicolas

Avatar
Thierry B.
--{ Nicolas MICHEL a plopé ceci: }--

Par contre, ce dont tu parles resemble à un travail professionnel.
Si je compare le prix de l'heure d'un dev au prix du Go, je ne comprends
pas vraiment ton point de vue.


Hop, me voici de retour après quelques vacances. Et non, ce n'est
pas un travail professionnel, c'est juste une idée "en l'air" qui
colle à ma façon personnelle d'utiliser mes machines...

Je cherche un système de
réplication transparent. Peut-être voir avec Unison ?


Connais pas.
Mais ça a l'air intéressant.


Je vais regarder de plus près ces jours-ci, et je reviendrais
raconter ce que j'en pense dans mon contexte "particulier"...


--
As Snow White said to Pinocchio, "Tell a lie! Tell the truth! Tell a lie!
Tell the truth!..."