[gull] Équivalent de Time Machine
felix
felix at f-hauri.ch
Sat Oct 17 11:08:25 CEST 2020
On Fri, Oct 16, 2020 at 09:03:26AM +0200, Pierre Maitre wrote:
> Le jeu. 1 oct. 2020 à 11:47, felix <felix at f-hauri.ch> a écrit :
>
> > (Nota: je préfère ``tirer les données depuis la machine de backups'',
> > plutôt que d'avoir un accès à la machine de backups depuis une
> > machine en production)
>
> Bonjour à tous
> Je rebondis sur cette remarque pertinente de Félix. Depuis que
> l'incitation à des économies d'énergie nous fait éteindre les machines
> quand on ne les utilise pas (... même le standby consomme beaucoup...
> j'ai mesuré), le backup en "pull" pose un problème parce que lorsque
> le backup est initié sur le serveur, la machine à backuper peut être
> éteinte.
C'est donc l'inverse, dans ce que tu décris, la machine en prod **accède**
au backup pour **initier** la synchronisation!?
Je disais que je préfère accéder depuis la machine de backup vers la
machine en prod, ceci présente le principal avantage que la machine
de backup reste **confinée** et n'offre AUCUN accès depuis Internet.
Mais il est égallement possible d'imaginer utiliser le démarrage BIOS
automatiques (p.ex à 1h du mat), pour lancer une routine, par exemple
via crond `@reboot`, qui fera (en gros):
- Abandonner tout, si boot pas BIOS!
- lancer ``delbackups'' pour effacer les anciens devenus superflus
https://f-hauri.ch/vrac/delbackups.pl.txt
- lancer la copie-link du répertoire de base
root=/backup/prodserv/base
CPYDIR=$(date -r $root +$root-%Y-%m-%d-%Hh%M)
[ -d "$CPYDIR" ] || cp -al $root $CPYDIR
touch $root # Date time of current sync
- lancer la synchronisation
ssh -M prodserver /bin/bash <<eof &
umount snapshot if mounted
lvremove snapshot if exist
lvcreate snapshot
mount snapshot
touch /run/sshdemoloop
while [ -e /run/sshdemoloop ] ;do
sleep 3
done
umount snapshot
lvremove snapshot
eof
ssh prodserver sh 'while ! [ -e /run/sshdemoloop ] ;do sleep 1;done'
rsync -axe 'ssh -e none' --delete --... prodserver:/snapshot $root
ssh prodserver rm /run/sshdemoloop
- Eteindre la machine de backups.
> J'ai trouvé un joli script (il n'est pas de moi) que le
> crontab du serveur "backup" pourra appeler chaque heure et qui teste
> si la machine qu'il faut backuper est allumée.
> #!/bin/bash
> if ! /bin/ping -c 1 192.168.1.116 &> /dev/null; then echo "station0
> not available"; exit 1; fi
Oui, par exemple, (si le ping passe) ou, si tu comptes utiliser SSH,
alors le simple fait d'ouvrir une ``pre-connection'' avec ``ssh -M'',
maintenue par une boucle fait le job. Après, si la machine à backuper
est appelée à être éteinte, il faut stopper le script après quelques
tests:
ssh -M prodserver /bin/bash <<eof &
touch /run/sshdemoloop
while [ -e /run/sshdemoloop ] ;do
sleep 3
done
eof
for((test=10;test--;)){ # wait 5 second for ssh socket
[ -e .ssh/SSH_root_prodserver_22.sock ] && break
sleep .5
}
[ -e .ssh/SSH_root_prodserver_22.sock ] || exit 1
Dans ce genre de cas, je placerai cette partie au début du script,
afin d'éviter ``rm -fR'' et ``cp -al'', si le script doit être
interrompu.
``ssh -M'' ouvre un socket SSH utilisable par les prochains
ssh [-S] prodserver 'lvcreate;mount'
> Si oui et que le dernier backup date de plus que x heures,
> le backup est initié....
Mais alors pour `rsnapshot` qui est censé simplifier la procédure, je trouve
la suite un peu lourde, voir:
read lastentry < <(/bin/ls -1t $DATADIR)
read lastdate < <(stat -c %X "$lastentry")
((EPOCHSECONDS-lastdate < 86400)) && exit 1 # EPOCHSECONDS si bash V5+
printf -v now '%(%s)T' -1 # si pas EPOCHSECONDS
((now-lastdate < 86400)) && exit 1
Et je le redis, plutôt que nommer mes dossier ``daily'',
``monthly'', etc, il sont juste nommée selon:
CPYDIR=$(date -r $root +$root-%Y-%m-%d-%Hh%M)
Donc pas (plus) de ``rotations'', Ce qui fait que je ne dois pas en effacer 3
d'un coup, juste parce qu'on est un lundi 1er à 1h...
--
Félix Hauri - <felix at f-hauri.ch> - http://www.f-hauri.ch
More information about the gull
mailing list