web-dev-qa-db-fra.com

Automatisez la création de sauvegardes à partir de plusieurs emplacements, structurez-les par date, maintenez des sauvegardes incrémentielles locales et dans le cloud.

J'ai mon application sur un VPS (Ubuntu Server 18.04), et l'hôte peut faire des sauvegardes hebdomadaires de tout le système.

Mais cela ne suffit pas, alors je veux faire mes propres sauvegardes (en plus, j'avais des fichiers de sauvegarde d'hôtes qui échouaient dans le passé), mais pas tout le système.

  1. Je dois effectuer des sauvegardes incrémentielles de plusieurs emplacements.
  2. Les sauvegardes incrémentielles doivent être dans une structure de dossier/directeur (tous les emplacements multiples dans le même dossier de date, mais restent incrémentiels):

    • nom_dossier__date1
    • nom_dossier__date2
    • nom_dossier__aujourd'hui
  3. Automatiser le processus, à faire quotidiennement

  4. Maintenir une sauvegarde locale de la structure de dossiers/fichiers
  5. Mise à jour vers un nuage (DropBox, Box), mais avant la mise à jour, archivez les sauvegardes avec des mots de passe

J'ai lu sur rsync et chron, mais je ne sais pas:

  • comment faire l'incrémentation en utilisant des dossiers
  • archiver/mettre à jour vers le cloud
  • automatiser tous les processus en utilisant bash
1
user3541631

J'ai également dû lire un document pour me préparer à atteindre votre objectif, commençons! Sans connaître le type de données et la fréquence d'accès, vous pouvez utiliser rsync pour synchroniser le dossier que vous souhaitez sauvegarder dans un répertoire temporaire afin d'effectuer la sauvegarde incrémentielle. Je suggère d'utiliser tar pour compresser 7Zip pour encription et pour la copie distante.

  1. source tar: http://www.gnu.org/software/tar/manual/html_node/Incremental-Dumps.html
  2. source rsync: https://download.samba.org/pub/rsync/rsync.html
  3. Source 7Zip: https://linux.die.net/man/1/7z
  4. dbox source rclone: ​​ https://rclone.org/dropbox/
  5. script bash: https://www.tldp.org/LDP/abs/html/

Donc ce que je vais faire a fait cette tâche, en supposant que les dossiers à sauvegarder soient / home/utilisateur et / home/utilisateur2 le répertoire temporaire est / media/Sauvegarde/nom_dossier__date1. Je vais démarrer un script avec deux travaux rsync, l'un pour le dossier, afin d'obtenir la structure suivante:

mkdir -pv /media/Backup/folder_name__`date +%Y%m%d`
Backup/
└── folder_name__20180910
    ├── user
    └── user1

la commande rsync pour le faire est la suivante:

rsync -a /home/user /media/Backup/folder_name__20180910
rsync -a /home/user1 /media/Backup/folder_name__20180910

ATTENTION: si le chemin source se termine par un / sera ne créez pas de dossier de destination, mais synchronisez toutes les données du dossier de destination racine.

Maintenant que vous avez une copie exacte dans un endroit où vous êtes certain que les données ne seront pas accessibles au cours du processus de sauvegarde, il est important de garantir la qualité des données et de permettre à tar de fonctionner correctement. Il fonde l'incrémental sur l'horodatage des fichiers. Créons notre archive:

tar --create \
           --file=/path/where/you/like/folder_name__20180910.tar \
           -C /media/Backup/ \
           --listed-incremental=/var/log/db.snar \
           folder_name__20180910
  • - create Indiquez pour créer et archiver
  • - file Indiquez le chemin où le fichier tar sera enregistré.
  • - listing-incremental c'est le chemin de la base de données où tar cherchera dans le delta de données
  • - C Indiquez à tar le répertoire de travail, cela vous permettra de ne pas avoir d'archive avec tout le dossier du chemin, avec ceci vous trouverez nom_du_fix__20180910 à la racine du fichier tar.
  • Le dernier est le dossier à ajouter dans l'archive

IMPORTANT: la base de données crée doit être la même à l'avenir, si cela change vous aurez toujours

Maintenant nous avons notre première sauvegarde! cryptons-le!

password=`date | md5sum | cut -c1-15` 
echo ${password} > /root/folder_name__20180910.pwd && chmod 400 /root/folder_name__20180910.pwd
/root/folder_name__date1.pwd
7z a -mhe=on -p`echo ${password}` \
-t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on \
/path/where/you/like/folder_name__20180910.7z \
/path/where/you/like/folder_name__20180910.tar

ici, nous générons un mot de passe aléatoire à partir de la somme de date md5 (vous pouvez utiliser différentes méthodes). Enregistrez le mot de passe dans un fichier correspondant à l'archive et enregistrez-le dans le dossier/racine après avoir créé l'archive compressée.

dernière étape, copiez-le à distance sur un service cloud, je suppose que vous lisez la documentation et que le compte dans rclone est configuré comme remotecopydata et si vous voulez remotecopypassword

rclone copy /path/where/you/like/folder_name__20180910.7z remotecopydata:Backup
rclone copy /path/where/you/like/folder_name__20180910.7z remotecopypassword:Backup

BASH Pour automatiser en bash de manière rapide et sale, vous pouvez simplement adapter la commande de ce post dans un fichier, cela devrait fonctionner! Pour ajouter un peu de contrôle, lisez la documentation de bash sur tlpd.org ou cherchez également ici, beaucoup de questions sur la commande de bash pour savoir comment faire quelque chose.

Pour que le script s'exécute automatiquement tous les jours à minuit:

crontab -e 

et ajouter:

[email protected]
0 0 * * * /path/to/your/scrypt.sh

mAILTO = laisser tous les messages du script envoyés au courrier électronique configuré. Ajoute un peu de contrôle au script avant de l'exécuter automatiquement

C'est tout, j'espère que vous trouverez cet article utile!

1
AtomiX84

Je vous suggère d'installer rsnapshot. Dans le fichier de configuration, vous pouvez définir les éléments suivants:

backup /etc/ localhost/

définirait/etc/à sauvegarder dans le dossier localhost /. Ainsi, vous pouvez également sauvegarder d'autres répertoires et les placer ailleurs (bien que je vous suggère de créer un emplacement de sauvegarde pour chaque hôte que vous prévoyez de sauvegarder).

rsnapshot effectue des sauvegardes incrémentielles et économise de l'espace en utilisant des liens symboliques. Ainsi, chaque sauvegarde est une sauvegarde complète du répertoire en question, sans utiliser d'espace supplémentaire.

Pour automatiser cela, définissez un travail cron. Exécutez Sudo crontab -e et ajoutez des règles comme celle-ci:

0 4 * * *         /usr/bin/rsnapshot alpha
0 3 * * 3         /usr/bin/rsnapshot beta
0 2 1 * *         /usr/bin/rsnapshot gamma

Cela effectue une sauvegarde alpha quotidienne, une sauvegarde bêta une fois par semaine le mercredi et une sauvegarde gamma une fois par mois. Bien sûr, définissez ceci comme vous le souhaitez. Les documentations ont des recommandations, y compris l'ordre (en un jour) entre alpha, bêta et gamma. Rien de tout cela (jusqu'à présent) ne nécessite un script bash. rsnapshot et cron gérera tout ici.

Cependant, la dernière chose que vous souhaitiez est le chiffrement et le téléchargement sur le cloud. Honnêtement, je ne sais pas comment faire ça - désolé! Si je sauvegardais sur Dropbox, je devrais supprimer en permanence des fichiers ... ce que rsnapshot fait déjà.

Je suppose que vous pouvez utiliser tar et gzip pour archiver et compresser, puis gpg pour chiffrer. Mais si vous avez un autre ordinateur ou un NAS à la maison ou au travail, je vous suggère simplement de copier vos fichiers dessus. Ou, comme le dit le fichier de configuration (/etc/rsnapshot.conf), vous pouvez sauvegarder un autre ordinateur à distance. c'est à dire.:

backup [email protected]:/etc/ example.com/

Il existe des options pour monter (c.-à-d. Attacher) un lecteur externe, le sauvegarder puis le démonter également.

Quoi qu'il en soit, je sais que ce n'est pas tout ce que vous avez demandé, mais j'espère que cela vous aidera.

1
Ray