La Fibre

Télécom => Logiciels et systèmes d'exploitation => Ubuntu Tutoriels pour Ubuntu server => Discussion démarrée par: vivien le 06 novembre 2021 à 14:01:14

Titre: Sauvegarde incrémentielle et différentielle d'un serveur ou PC Linux
Posté par: vivien le 06 novembre 2021 à 14:01:14
Script bash pour faire une sauvegarde incrémentielle et différentielle d'un serveur ou d'un PC via le port SSH et garder plusieurs sauvegardes, en ne stockant que les différences entre deux sauvegardes.

Le principe se base sur des liens physiques proposés par Linux : Cela permet de donner plusieurs noms/chemin d'accès à un même fichier en pointant sur un numéro de fichier. En interne, Linux enregistre les fichiers sur la base d'un numéro (appelé numéro d'index ou inode) et pas sur la base d'un nom. Un fichier peut donc avoir plusieurs noms, et existera tant qu'il est utilisé dans une des sauvegardes. Quand aucune sauvegarde n'utilise l'inode le fichier est supprimé. Contrairement aux liens symboliques, les liens physiques ne peuvent pointer que vers un autre élément du même système de fichiers.

Donc chacune des sauvegardes appariait comme une sauvegarde complète et non une sauvegarde différentielle. Toutefois, sur le disque dur, la place occupée est celle d'une sauvegarde différentielle pour toutes les sauvegardes, sauf la plus ancienne qui prend la place d'une sauvegarde complète. Merci à Bad Max pour le script d'origine que j'ai adapté à mon besoin.

La sauvegarde peut se faire sur un autre serveur / PC, mais je vais vous partager ma technique qui permet de consacrer peu d'argent pour avoir des sauvegardes chiffrées à domicile et même sur un autre site, en déplaçant les disques dur de sauvegarde.

Pour avoir une sauvegarde chiffrée, le plus simple est d'installer un système d'exploitation en mode chiffré : Sur chaque disque dur de sauvegarde, j'ai un Ubuntu (j'ai coché la case pour avoir une installation minimale) avec le disque qui est chiffré (il demande un mot de passe au début de la phase de boot). Pour le PC, c'est mon vieux PC qui sert à cette tâche (Core 2 duo). C'est bien suffisant pour faire de la sauvegarde. Il est également possible d'utiliser un vieux PC portable avec des disques dur externes, connectés en USB.

(https://lafibre.info/testdebit/ubuntu/202111_sauvegarde_linux_1.jpg)

Le script me sert aussi bien à sauvegarder des serveurs, des PC distants de ma famille, mais aussi mon PC local. Afin d'avoir toujours les données sur deux sites distincts, j'ai deux disques dur de sauvegarde pour le "PC Vivien" : J'emporte mon disque dur quand je vais voir ma famille et je rapporte celui qui était sur place. J'ai donc toujours une sauvegarde locale et une sauvegarde sur un autre site. Pas besoin NAS qui tourne 24h/24 sur un autre site, je me contente de déplacer les disques dur.

(https://lafibre.info/testdebit/ubuntu/202111_sauvegarde_linux_2.jpg)

Le script peut fonctionner avec des disques dur externes, mais dans mon cas, il est rapide et simple de changer de disque dur sur mon PC : Je me suis donc basé sur des disques internes que je change facilement. Chaque disque dur de sauvegarde a son système d'exploitation, je n'ai pas besoin d'un autre disque.


(https://lafibre.info/testdebit/ubuntu/202111_sauvegarde_linux_3.jpg)
Titre: Sauvegarde incrémentielle et différentielle d'un serveur ou PC Linux
Posté par: vivien le 06 novembre 2021 à 14:01:59
Tutoriel testé avec Ubuntu version 20.04 LTS, Ubuntu 22.04 LTS et Ubuntu 23.10

Pré-requis coté serveur / PC à sauvegarder : L'utilisateur SSH du serveur doit avoir accès en lecture aux fichiers à sauvegarder. Un fichier lisible uniquement par "root" ne peut pas être sauvegardé par ce script.

Pré-requis coté PC de sauvegarde  : avoir un Linux (avec ou sans interface graphique, peu importe) et pouvoir se connecter en SSH au serveur / PC à sauvegarder.




1/ Coté PC qui fait la sauvegarde : Génération d'une clé publique / privée pour l'authentification par clé SSH

La clé publique n'a pas beaucoup d'importance, car, par définition, elle peut être rendue publique. La clé privée ne doit pas sortir du PC de sauvegarde. Je conseille de chiffrer le disque du PC de sauvegarde afin de limiter les risques.

$ ssh-keygen -t rsa : On génère une clé au format RSA avec la commande ssh-keygen. On doit exécuter cette commande avec l'utilisateur qui sera utilisé pour la sauvegarde (pas de sudo, on ne fera pas fonctionner le script avec les droits root)

ssh-keygen vous demande l'emplacement de la clef. Appuyer entrée pour accepter /home/[utilisateur]/.ssh/id_rsa

ssh-keygen propose de mettre une "passphrase" : Enter passphrase (empty for no passphrase):
Appuyer pour entrer pour de pas rentrer de "passphrase" car elle sera demandée à chaque connexion.

Le répertoire de l’utilisateur contient maintenant un répertoire .ssh dans lequel :


Ligne de commande à exécuter coté PC de sauvegarde sans être root pour récupérer la clé publique : cat  ~/.ssh/id_rsa.pub

Facultatif : Optimisation pour limiter le SWAP et permettre la montée du débit de la connexion TCP (tout sera sur une connexion TCP)
Sans ces lignes, lors d'une grosse sauvegarde, même si le PC qui fait la sauvegarde à de la RAM, Linux a tendance à déplacer la mémoire peu utilisée sur disque, ce qui est appelé swap.
La ligne vm.swappiness = 1 dans le fichier ci-dessous permet de limiter le phénomène de swap que si le PC manque réellement de mémoire.

sudo nano /etc/sysctl.d/90-optimisation.conf

Copier-coller le code ci-dessous
# Paramétrage de la fenêtre TCP à 32 Mio
net.ipv4.tcp_rmem=4096 131072 33554432
net.ipv4.tcp_wmem=4096 87380 33554432
net.core.rmem_max=33554432
net.core.wmem_max=33554432

# Limiter l’utilisation du swap
vm.swappiness = 1

Cela sera actif au prochain démarrage du PC.
Titre: Sauvegarde incrémentielle et différentielle d'un serveur ou PC Linux
Posté par: vivien le 06 novembre 2021 à 14:02:20
2/ Côté serveur sauvegardé : installer le serveur ssh et rajouter la clé publique du serveur de sauvegarde

sudo apt install ssh : installation du serveur SSH

Changement de port de SSH, pour limiter d'être la cible des attaques sur le port 22 :
(le port 2222 est un exemple, choisissez le port de votre choix)


cd ~/.ssh : Se rendre dans le répertoire .ssh du compte auquel vous souhaitez accéder pour faire la sauvegarde - cela ne doit pas être "root" (Si le dossier n'existe pas, il suffit de faire mkdir ~/.ssh pour le créer, puis cd ~/.ssh pour se placer dans le dossier).

nano authorized_keys On édite le fichier (créez-le s’il n’existe pas)
Copiez-y sur une nouvelle ligne le contenu du fichier id_rsa.pub du client récupéré sur le PC de sauvegarde.
Sauvegardez le fichier.
Titre: Sauvegarde incrémentielle et différentielle d'un serveur ou PC Linux
Posté par: vivien le 06 novembre 2021 à 14:02:35
3/ Uniquement si la machine sauvegardée n'a pas de nom de domaine : modification du fichier /etc/hosts

Faire la sauvegarde avec une IP en dur dans le script n'est pas une bonne solution, car le dossier de sauvegarde va porter comme nom l'IP et en cas de changement d'IP, cela va créer une seconde sauvegarde, comme si c'était une seconde machine à sauvegarder.

Je préconise d'utiliser un nom de domaine et s'il n'y en a pas.
En cas de changement d'IP, je modifierais uniquement le fichier / etc/hosts, sans toucher au script de sauvegarde.

sudo nano /etc/hosts

On rajoute une nouvelle ligne avec en premier l'IP du serveur à sauvegarder puis après un ou plusieurs espaces / tabulations, le nom de la machine à sauvegarder.

Exemple : Cette machine se nomme "Sauvegarde2", la machine à sauvegarder est "vivien1" et l'IP de vivien1 est "192.168.0.20".

(https://lafibre.info/testdebit/ubuntu/202111_ubuntu_etc_hosts.png)
Titre: Sauvegarde incrémentielle et différentielle d'un serveur ou PC Linux
Posté par: vivien le 06 novembre 2021 à 14:03:12
4/ Coté PC qui fait la sauvegarde : Test de l'authentification par clé SSH

Indispensable :
Il faut impérativement tenter une connexion SSH pour valider le key fingerprint.

ssh serveur.fr -p 2222


Si c'est la première connexion sur le serveur en SSH, ssh va vous demander de valider le "key fingerprint".
ECDSA key fingerprint is 3b:bb:2b:6b:3d:60:97:0a:8a:b8:34:8a:c1:be:c7:26.
Are you sure you want to continue connecting (yes/no)?
Répondre yes
Aucun mot de passe ne doit être demandé. Si un mot de passe est demandé, l'authentification par clé SSH est un échec. Vérifiez que vous n'avez pas inversé PC de sauvegarde et PC sauvegardé, vérifiez le fichier authorized_keys (il est bien dans le dossier .ssh ?),...

A la connexion suivante, le key fingerprint n'est pas demandé. La connexion se fera sans intervention de l'utilisateur, ce qui est nécessaire pour le script de sauvegarde.
Titre: Sauvegarde incrémentielle et différentielle d'un serveur ou PC Linux
Posté par: vivien le 06 novembre 2021 à 14:03:52
5/ Côté PC qui fait la sauvegarde : Script bash de sauvegarde

sudo apt install tcptraceroute : Dépendance à installer. "tcptraceroute" est utilisé pour vérifier que le port de SSH répond avant de lancer la sauvegarde.
sudo mkdir /home/sav : Les sauvegardes seront dans le dossier /home/sav
sudo chown utilisateur:utilisateur /home/sav : Le script de sauvegarde ne va pas se lancer avec les droits "root". Changer utilisateur par votre login.
cd /home/sav/ : On se place dans le dossier crée
nano sav-serveur.sh : Édition du script, remplacer serveur par le nom du serveur sauvegardé.

Copier-coller le texte ci-dessous dans le fichier :
#!/bin/bash
# Script de sauvegarde incrémentale d'un serveur ou PC Linux via SSH
# Version du 21/10/2021 pour Ubuntu / Debian / Raspbian / Linux Mint
# Dépendance à installer : sudo apt install tcptraceroute
# Pour ne pas demander de mot de passe, il faut une connexion SSH avec une clé au format RSA
# Créé par Olivier Bedouet (Bad Max) et Vivien Guéant
# Ce script est un logiciel libre que vous pouvez redistribuer ou modifier suivant la GNU GPLv3

#### Paramètres à personnaliser ####
SERVEUR=monserveur.fr # nom de SERVEUR du serveur à sauvegarder
NB_INCR=7 # Nombre de sauvegardes incrémentiel à garder
PORT_SSH=2222 # port où le SSH du serveur écoute (22 par défaut)
DEBIT_MAX=9000 # limite de bande passante, en ko par seconde, pour que la sauvegarde ne sature pas le réseau
REP_SAV=/home/sav # dossier où placer la sauvegarde en local
REP_SRC="
${SERVEUR}:/home/MonDossier1
${SERVEUR}:/home/MonDossier2
${SERVEUR}:/home/MonDossier3
" # Liste des dossiers à sauvegarder sur le serveur distant
FILE_ERR=${REP_SAV}/${SERVEUR}/log-${SERVEUR}.err # Emplacement du fichier qui log les éventuelles erreurs

#### Étape N°1: Test de l'ouverture du port TCP utilisé par SSH ####
echo -n "Test de l'ouverture du port ${PORT_SSH} : "
ttr=`tcptraceroute -q 1 ${SERVEUR} ${PORT_SSH} 2>&1`
if echo "${ttr}" | egrep -i "\[open\]" >/dev/null 2>&1
then
   echo "Port ${PORT_SSH} ouvert sur ${SERVEUR}"
else # Port SSH fermé, on quitte pour ne pas avoir une sauvegarde vide
   echo "Port ${PORT_SSH} fermé sur ${SERVEUR} : pas de sauvegarde"
   echo
   echo "!!!! ÉCHEC DE LA SAUVEGARDE !!!!"
   exit
fi

#### Étape N°2: Création du fichier de log des erreurs ####
if [ ! -d ${REP_SAV}/${SERVEUR} ]
then # le dossier pour le fichier de log manque, on le crée
   mkdir ${REP_SAV}/${SERVEUR}
fi
rm -f ${FILE_ERR}

#### Étape N°3: Efface la sauvegarde la plus ancienne ####
if [ -d ${REP_SAV}/${SERVEUR}/sav.${NB_INCR} ]
then
   echo -n "Efface derniere sauvegarde n-${NB_INCR} : "
   rm -fr ${REP_SAV}/${SERVEUR}/sav.${NB_INCR} 2>${FILE_ERR}
   cat ${FILE_ERR}
   echo "terminé"
fi

#### Étape N°4: Décale les autres sauvegardes ####
i=${NB_INCR}
while [ $i -gt 0 ]
do
   j=`expr $i - 1`
   if [ -d ${REP_SAV}/${SERVEUR}/sav.$j ]
   then
      echo -n "Sauvegarde n-$j "
      mv -v ${REP_SAV}/${SERVEUR}/sav.$j ${REP_SAV}/${SERVEUR}/sav.$i 2>>${FILE_ERR}
      cat ${FILE_ERR}
   fi
   i=`expr $i - 1`
done

#### Étape N°5: Contrôle de la présence de sav.1 ####
if [ ! -d ${REP_SAV}/${SERVEUR}/sav.1 ]
then # sav.1 n’existe pas / plus, on le crée
   mkdir ${REP_SAV}/${SERVEUR}/sav.1
fi

#### Étape N°6: Lancement de la sauvegarde avec rsync ####
echo "=================================================================================="
echo "${SERVEUR} -- Lancement de la sauvegarde incrémentale  -- `date`"
/usr/bin/rsync --verbose -a -e "ssh -p ${PORT_SSH}" --delete \
  --link-dest=${REP_SAV}/${SERVEUR}/sav.1 --stats --bwlimit=${DEBIT_MAX} ${REP_SRC} \
  ${REP_SAV}/${SERVEUR}/sav.0 2>>${FILE_ERR}
echo
echo "${SERVEUR} -- Fin de la sauvegarde incrémentale  -- `date`"

#### Étape N°7: Affichage des éventuelles erreurs ####
if [ -s ${FILE_ERR} ] ; then
  echo "=================================================================================="
  echo "Attention, il y a eu des erreurs lors de la sauvegarde :"
  cat ${FILE_ERR}
fi
Modifier les paramètres suivants :
Attention à ne pas mettre de "/" final pour les dossiers de sauvegardes, les données seraient mélangées dans /home/sav/sav-monserveur.fr/sav.0/
mettre ${SERVEUR}:/home/vivien/Documents/ est un exemple à ne pas suivre. Utiliser plutôt ${SERVEUR}:/home/vivien/Documents sans le / final.

Autre point d'attention : Si vous sauvegardez un disque complet, vous aurez une erreur, car il n'arrivera pas à sauvegarder le dossier "lost+found" qui se trouve à la racine de tous les volumes sous Linux. Je conseille de nommer un à un les dossiers du volume à sauvegarder ou d'ignorer l'erreur qui s'affiche en fin de sauvegarde.
Titre: Sauvegarde incrémentielle et différentielle d'un serveur ou PC Linux
Posté par: vivien le 06 novembre 2021 à 14:04:10
Utilisateur utilisé pour la sauvegarde :

Par défaut, le nom d'utilisateur distant utilisé est celui utilisé en local pour faire la sauvegarde. Pour préciser un autre nom d'utilisateur distant, il faut le placer devant chaque ligne de dossiers à sauvegarder.

Exemple si le nom d'utilisateur à utiliser est "vivien" :


chmod +x sav-serveur.sh : On rend le script exécutable



Exclure des dossiers de la sauvegarde

Une solution possible est de sauvegarder l'intégralité du dossier home et mentionner les dossiers à exclure avec la ligne --exclude

Il faut bien indiquer le dossier parent (si la syntaxe n'est pas bonne le dossier sera sauvegardé).

Un exemple concret est plus parlent : Sur ce PC, je sauvegarde l'intégralité de /home/jjg puis, j'exclus des dossiers systémes qui allourdisent bien la sauvegarde d'autant que c'est modifié réguliérement.
Je rajoute donc :
--exclude "jjg/snap"
--exclude "jjg/.local"
--exclude "jjg/.cache"
--exclude "jjg/.config"
--exclude "jjg/.googleearth"


#!/bin/bash
# Script de sauvegarde incrémentale d'un serveur ou PC Linux via SSH
# Version du 21/10/2021 pour Ubuntu / Debian / Raspbian / Linux Mint
# Dépendance à installer : sudo apt install tcptraceroute
# Pour ne pas demander de mot de passe, il faut une connexion SSH avec une clé au format RSA
# Créé par Olivier Bedouet (Bad Max) et Vivien Guéant
# Ce script est un logiciel libre que vous pouvez redistribuer ou modifier suivant la GNU GPLv3

#### Paramètres à personnaliser ####
SERVEUR=pc-jjg # nom de SERVEUR du serveur à sauvegarder
NB_INCR=5 # Nombre de sauvegardes incrémentiel à garder
PORT_SSH=2222 # port où le SSH du serveur écoute (22 par défaut)
DEBIT_MAX=20000 # limite de bande passante, en ko par seconde, pour que la sauvegarde ne sature pas le réseau
REP_SAV=/home/sav # dossier où placer la sauvegarde en local
REP_SRC="
--exclude "jjg/snap"
--exclude "jjg/.local"
--exclude "jjg/.cache"
--exclude "jjg/.config"
--exclude "jjg/.googleearth"
jjg@${SERVEUR}:/home/jjg
" # Liste des dossiers à sauvegarder sur le serveur distant
FILE_ERR=${REP_SAV}/${SERVEUR}/log-${SERVEUR}.err # Emplacement du fichier qui log les éventuelles erreurs

#### Étape N°1: Test de l'ouverture du port TCP utilisé par SSH ####
echo -n "Test de l'ouverture du port ${PORT_SSH} : "
ttr=`tcptraceroute -q 1 ${SERVEUR} ${PORT_SSH} 2>&1`
if echo "${ttr}" | egrep -i "\[open\]" >/dev/null 2>&1
then
   echo "Port ${PORT_SSH} ouvert sur ${SERVEUR}"
else # Port SSH fermé, on quitte pour ne pas avoir une sauvegarde vide
   echo "Port ${PORT_SSH} fermé sur ${SERVEUR} : pas de sauvegarde"
   echo
   echo "!!!! ÉCHEC DE LA SAUVEGARDE !!!!"
   exit
fi

#### Étape N°2: Création du fichier de log des erreurs ####
if [ ! -d ${REP_SAV}/${SERVEUR} ]
then # le dossier pour le fichier de log manque, on le crée
   mkdir ${REP_SAV}/${SERVEUR}
fi
rm -f ${FILE_ERR}

#### Étape N°3: Efface la sauvegarde la plus ancienne ####
if [ -d ${REP_SAV}/${SERVEUR}/sav.${NB_INCR} ]
then
   echo -n "Efface derniere sauvegarde n-${NB_INCR} : "
   rm -fr ${REP_SAV}/${SERVEUR}/sav.${NB_INCR} 2>${FILE_ERR}
   cat ${FILE_ERR}
   echo "terminé"
fi

#### Étape N°4: Décale les autres sauvegardes ####
i=${NB_INCR}
while [ $i -gt 0 ]
do
   j=`expr $i - 1`
   if [ -d ${REP_SAV}/${SERVEUR}/sav.$j ]
   then
      echo -n "Sauvegarde n-$j "
      mv -v ${REP_SAV}/${SERVEUR}/sav.$j ${REP_SAV}/${SERVEUR}/sav.$i 2>>${FILE_ERR}
      cat ${FILE_ERR}
   fi
   i=`expr $i - 1`
done

#### Étape N°5: Contrôle de la présence de sav.1 ####
if [ ! -d ${REP_SAV}/${SERVEUR}/sav.1 ]
then # sav.1 n’existe pas / plus, on le crée
   mkdir ${REP_SAV}/${SERVEUR}/sav.1
fi

#### Étape N°6: Lancement de la sauvegarde avec rsync ####
echo "=================================================================================="
echo "${SERVEUR} -- Lancement de la sauvegarde incrémentale  -- `date`"
/usr/bin/rsync --verbose -a -e "ssh -p ${PORT_SSH}" --delete \
  --link-dest=${REP_SAV}/${SERVEUR}/sav.1 --stats --bwlimit=${DEBIT_MAX} ${REP_SRC} \
  ${REP_SAV}/${SERVEUR}/sav.0 2>>${FILE_ERR}
echo
echo "${SERVEUR} -- Fin de la sauvegarde incrémentale  -- `date`"

#### Étape N°7: Affichage des éventuelles erreurs ####
if [ -s ${FILE_ERR} ] ; then
  echo "=================================================================================="
  echo "Attention, il y a eu des erreurs lors de la sauvegarde :"
  cat ${FILE_ERR}
fi
Titre: Sauvegarde incrémentielle et différentielle d'un serveur ou PC Linux
Posté par: vivien le 06 novembre 2021 à 14:06:55
6/ Lancement de la sauvegarde

Maintenant, il vous suffit de lancer le script /home/sav/sav-serveur.sh pour lancer une sauvegarde.
La première sauvegarde sera longue, car il devra sauvegarder l'intégralité.
Les sauvegardes suivantes seront rapides, parce qu'incrémentielles.

Si la sauvegarde est lancée automatiquement, par exemple chaque nuit, vous pouvez enregistrer le contenu de ce qui normalement affiché à l'écran via une redirection : /home/sav/sav-serveur.sh > /home/sav/log-serveur.log




Sur votre PC de sauvegarde, vous avez les dossiers suivants :

Chaque dossier sav.x contiendra l'intégralité du contenu sauvegardé. Un contenu non modifié est donc présent logiquement une fois dans chaque dossier. Bien que présent 7 fois (si 7 sauvegardes), les données réelles sont uniques sur le disque. Un compteur de références permet de savoir combien de noms pointent sur les mêmes données. Quand la plus ancienne sauvegarde est supprimée, l'effacement n'est suivi d'une récupération de l'espace alloué aux données que si c'est sa dernière utilisation dans une sauvegarde (les sauvegardes plus récentes n'utilisent plus ce fichier).



Exemple d'utilisation du script pour sauvegarder un PC bureautique :

(https://lafibre.info/testdebit/ubuntu/202110_script_sauvegarde_ubuntu.png)



7/ Optionnel : Côté PC qui fait la sauvegarde : Sauvegarde incrémentale automatique chaque nuit.

crontab -e : Optionnel si le PC de sauvegarde est allumé en permanence, programmer une sauvegarde incrémentale quotidienne dans la crontab :
Copier-coller les lignes ci-dessous en fin de crontab, en prenant soins de remplacer serveur par le nom du serveur sauvegardé.

# Sauvegarde à 3h01 :
01 3 * * * /home/sav/sav-serveur.sh
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: vincent0 le 06 novembre 2021 à 15:32:19
Article et script intéressants.

Une autre solution que j'aime beaucoup est restic : https://restic.net/

Utilitaire de backup standalone qui tourne sous Linux, windows et Mac et peut sauvegarder sur beaucoup de stockage cloud et aussi bien du sftp tout en chiffrant les backups.
La doc est aussi très bien faite.
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: letsar le 06 novembre 2021 à 17:43:52
Korben a fait un article sur Restic :

https://korben.info/comment-sauvegardez-vos-fichiers-avec-restic.html (https://korben.info/comment-sauvegardez-vos-fichiers-avec-restic.html)

ainsi qu'une vidéo :

https://www.youtube.com/watch?v=hSvVRZvcI4E
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: Sn@ke le 06 novembre 2021 à 22:44:28
Sinon t'as ZFS ;)
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: kazyor le 08 novembre 2021 à 17:37:03
sudo apt install tcptraceroute : Dépendance à installer. "tcptraceroute" est utilisé pour vérifier que le port de SSH répond avant de lancer la sauvegarde.


De mon côté, j'aime bien utiliser ncat avec un post traitement de l'exit (0 ou 1) :

kazyor:~$ ncat -w .1 -z 127.0.0.1 80
kazyor:~$ echo $?
0
kazyor:~$ ncat -w .1 -z 127.0.0.1 81
kazyor:~$ echo $?
1
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: vivien le 08 novembre 2021 à 17:41:46
Merci, je pense que ncat cela sera mieux que tcptraceroute. Ce dernier est assez lent pour voir si un port est ouvert.

Mon pré-requis était qu'il tourne sans avoir besoin des droits root, ce qui semble bien le cas de ncat.

Quand j'ai un peu de temps, je modifie le script.
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: flying38 le 10 novembre 2021 à 16:29:55
Bonjour,

Sinon, il y'a le très bon Veeam Agent for Linux qui est gratuit: https://www.veeam.com/fr/linux-backup-free.html
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: Kedare le 16 novembre 2021 à 11:59:03
Pour les backups j'ai tendance a préférer les object storage ou autre (ca coute moins cher au final et rien a gérer), j'utilisais pendant pas mal de temps rclone avec du bucket backblaze et du lifecycle policy (pour garder les X anciennes version pendant plusieurs jours), puis je suis passé récemment sur https://kopia.io/ qui gère ca lui même et j'ai mis ca sur de l'object storage chez nous (Scaleway) a Amsterdam.

Ça juste marche et c'est relativement simple a configurer (avec chiffrage et compression)
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: M@yeulC le 25 novembre 2021 à 17:08:36
Personnellement je recommande borg-backup. C'est super, et gère la dé-duplication et le chiffrement.

En interne, ça se passe un peu comme git: il y a des dépots distants et locaux, et des rolling hash pour la déduplication.

Je n'ai pas testé voir comment il se comportait avec les fichiers sparse ("troués" là où ils n'ont pas été écrits), les reflinks (copy on write) et les hard links (fichiers partageant l'inode). Mais pour le reste, nickel!

J'ai récemment mis en place borgmatic: https://torsion.org/borgmatic/

Pour ce qui est du serveur, rsync.net propose de l'espace de stockage à un prix raisonable. Assez facile de donner de l'espace à des amis via SSH sécurisé (accès uniquement à la commande `borg`).
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: kazyor le 25 novembre 2021 à 17:12:36
Question bête, qqn a déjà regardé comment backup des fichiers CSV ?

Avec un tri du fichier, et un git / diff, on peut éviter la duplication d'une ligne si elle est identique.
En revanche, dans le cas où nous avons qu'une colonne qui change, la ligne étant complètement différente, on duplique tous les champs.

En bref, vous connaissez un outil à la diff qui sait gérer les CSV ?
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: Kedare le 30 novembre 2021 à 14:52:18
Question bête, qqn a déjà regardé comment backup des fichiers CSV ?

Avec un tri du fichier, et un git / diff, on peut éviter la duplication d'une ligne si elle est identique.
En revanche, dans le cas où nous avons qu'une colonne qui change, la ligne étant complètement différente, on duplique tous les champs.

En bref, vous connaissez un outil à la diff qui sait gérer les CSV ?

Quand tu commence à avoir des besoins comme ca c'est peut être temps de passer a autre chose que du CSV :)

Ce genre de diff est en général géré sans soucis via les binlogs des bases de données.
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: kazyor le 30 novembre 2021 à 15:19:08
Ce n'est pas moi qui choisi le format d'échange :)
En l’occurrence, export quotidien de données peu volatiles.
Si je pouvais ne pas archiver bêtement, ça serait top ...
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: JeannotPlanche le 30 novembre 2021 à 20:13:42
puis je suis passé récemment sur https://kopia.io/ qui gère ca lui même et j'ai mis ca sur de l'object storage chez nous (Scaleway) a Amsterdam.

Je ne connaissais pas Kopia ! Comment le comparerais-tu à Restic ?

Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: Kedare le 03 décembre 2021 à 14:20:21
Je ne connaissais pas Kopia ! Comment le comparerais-tu à Restic ?

Je connais pas du tout Restic donc je pourrais pas comparer,
Mais Kopia est vraiment simple a config en tout cas, et ca gère la compression et le chiffrage automatiquement (avec des algos configurable pour les deux selon le besoin)
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: M@yeulC le 11 décembre 2021 à 18:31:07
Question bête, qqn a déjà regardé comment backup des fichiers CSV ?

Avec un tri du fichier, et un git / diff, on peut éviter la duplication d'une ligne si elle est identique.
En revanche, dans le cas où nous avons qu'une colonne qui change, la ligne étant complètement différente, on duplique tous les champs.

En bref, vous connaissez un outil à la diff qui sait gérer les CSV ?

De la simple compression devrait gérer cela très efficacement. Pour stocker de multiples copies sauvegardées ? Des snapshots de système de fichier, ou quelque chose avec des rolling hashes, peut-être ostree, ou la plupart des outils avec dé-duplication (borg inclus).
Titre: Sauvegarde incrémentielle et différentielle d'un serveur
Posté par: vivien le 15 octobre 2023 à 09:59:34
Le disque dur externe : la meilleure solution de stockage ? 🤔 Pas sûr… @Micode nous montre ses limites et nous parle des solutions qui s'offrent à vous !

https://www.youtube.com/watch?v=UsoOr50Uhdk
Titre: Sauvegarde incrémentielle et différentielle d'un serveur ou PC Linux
Posté par: vivien le 15 mars 2024 à 08:54:42
Avec mon script, si la dernière sauvegarde incrémentielle est vide, incomplète, cela pose un problème, car la sauvegarde suivante ne sera plus une sauvegarde incrémentielle, mais complète, ce qui prend du temps et peu saturer votre espace disque (vous aurez deux sauvegardes complètes).

Pour résoudre ce problème, il faut donc supprimer la sauvegarde vide, mais également décaler les précédentes sauvegardes.

Voici un script, à exécuter dans le dossier dans lequel sav.0 sav.1 sav.2 ... apparaissent.

Il va supprimer la dernière sauvegarde ratée (sav.0) et décaler les sauvegardes précédentes, de façon à ce que la prochaine sauvegarde soit incrémentielle : sav.1 est renommé sav.0, sav.2 est renommé sav.1 et ainsi de suite.


#!/bin/bash
if [ -d sav.0 ]
then
   echo -n "Efface sav.0"
   rm -r sav.0
fi
if [ -d sav.1 ]
then
   echo -n "Déplace sav.1"
   mv sav.1 sav.0
fi
if [ -d sav.2 ]
then
   echo -n "Déplace sav.2"
   mv sav.2 sav.1
fi
if [ -d sav.3 ]
then
   echo -n "Déplace sav.3"
   mv sav.3 sav.2
fi
if [ -d sav.4 ]
then
   echo -n "Déplace sav.4"
   mv sav.4 sav.3
fi
if [ -d sav.5 ]
then
   echo -n "Déplace sav.5"
   mv sav.5 sav.4
fi
if [ -d sav.6 ]
then
   echo -n "Déplace sav.6"
   mv sav.6 sav.5
fi
if [ -d sav.7 ]
then
   echo -n "Déplace sav.7"
   mv sav.7 sav.6
fi
if [ -d sav.8 ]
then
   echo -n "Déplace sav.8"
   mv sav.8 sav.7
fi
if [ -d sav.9 ]
then
   echo -n "Déplace sav.9"
   mv sav.9 sav.8
fi
if [ -d sav.10 ]
then
   echo -n "Déplace sav.10"
   mv sav.10 sav.9
fi
if [ -d sav.11 ]
then
   echo -n "Déplace sav.11"
   mv sav.11 sav.10
fi
if [ -d sav.12 ]
then
   echo -n "Déplace sav.12"
   mv sav.12 sav.11
fi
if [ -d sav.13 ]
then
   echo -n "Déplace sav.13"
   mv sav.13 sav.12
fi
if [ -d sav.14 ]
then
   echo -n "Déplace sav.14"
   mv sav.14 sav.13
fi
if [ -d sav.15 ]
then
   echo -n "Déplace sav.15"
   mv sav.15 sav.14
fi
if [ -d sav.16 ]
then
   echo -n "Déplace sav.16"
   mv sav.16 sav.15
fi