[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