GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser rsync avancé pour les sauvegardes Linux volumineuses

Il semble clair que les sauvegardes sont toujours un sujet brûlant dans le monde Linux. En 2017, David Both a proposé aux lecteurs d'Opensource.com des conseils sur « Utiliser rsync pour sauvegarder votre système Linux », et plus tôt cette année, il a publié un sondage nous demandant :« Quelle est votre principale stratégie de sauvegarde pour le répertoire /home sous Linux ? " Dans un autre sondage cette année, Don Watkins a demandé :"Quelle solution de sauvegarde open source utilisez-vous ?"

Ma réponse est rsync. J'aime vraiment rsync! Il existe de nombreux outils volumineux et complexes sur le marché qui peuvent être nécessaires pour gérer les lecteurs de bande ou les périphériques de bibliothèque de stockage, mais un simple outil de ligne de commande open source peut suffire.

Rsync de base

J'ai géré le système de référentiel binaire pour une organisation mondiale qui comptait environ 35 000 développeurs avec plusieurs téraoctets de fichiers. J'ai régulièrement déplacé ou archivé des centaines de gigaoctets de données à la fois. Rsync a été utilisé. Cette expérience m'a donné confiance en cet outil simple. (Donc, oui, je l'utilise à la maison pour sauvegarder mes systèmes Linux.)

La commande rsync de base est simple.

rsync -av SRC DST

En effet, les commandes rsync enseignées dans n'importe quel didacticiel fonctionneront correctement dans la plupart des situations générales. Cependant, supposons que nous ayons besoin de sauvegarder une très grande quantité de données. Quelque chose comme un répertoire avec 2 000 sous-répertoires, chacun contenant entre 50 Go et 700 Go de données. L'exécution de rsync sur ce répertoire peut prendre énormément de temps, en particulier si vous utilisez l'option de somme de contrôle, que je préfère.

Les performances risquent de souffrir si nous essayons de synchroniser de grandes quantités de données ou de synchroniser via des connexions réseau lentes. Permettez-moi de vous montrer quelques méthodes que j'utilise pour garantir de bonnes performances et une bonne fiabilité.

Rsync avancé

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

L'une des premières lignes qui s'affiche lors de l'exécution de rsync est :"envoi de la liste de fichiers incrémentiels". Si vous effectuez une recherche sur cette ligne, vous verrez de nombreuses questions telles que :pourquoi cela prend-il une éternité ? ou pourquoi semble-t-il raccrocher ?

Voici un exemple basé sur ce scénario. Disons que nous avons un répertoire appelé /storage que nous voulons sauvegarder sur un périphérique USB externe monté sur /media/WDPassport .

Si nous voulons sauvegarder /storage à un lecteur externe USB, nous pourrions utiliser cette commande :

rsync -cav /storage /media/WDPassport

Le c L'option indique à rsync d'utiliser les sommes de contrôle des fichiers au lieu des horodatages pour déterminer les fichiers modifiés, et cela prend généralement plus de temps. Afin de décomposer le /storage répertoire, je synchronise par sous-répertoire, en utilisant la recherche commande. Voici un exemple :

find /storage -type d -exec rsync -cav {} /media/WDPassport \;

Cela semble OK, mais s'il y a des fichiers dans le /storage répertoire, ils ne seront pas copiés. Alors, comment pouvons-nous synchroniser les fichiers dans /storage ? Il y a aussi une petite nuance où certaines options amèneront rsync à synchroniser le . répertoire, qui est la racine du répertoire source ; cela signifie qu'il synchronisera les sous-répertoires deux fois, et nous ne voulons pas cela.

Pour faire court, la solution sur laquelle j'ai opté est un script "double incrémentiel". Cela me permet de décomposer un répertoire, par exemple, en décomposant /home dans les répertoires personnels des utilisateurs individuels ou dans les cas où vous avez plusieurs répertoires volumineux, tels que la musique ou les photos de famille.

Voici un exemple de mon script :

HOMES="alan"
DRIVE="/media/WDPassport"

for HOME in $HOMES; do
     cd /home/$HOME
     rsync -cdlptgov --delete . /$DRIVE/$HOME
     find . -maxdepth 1 -type d -not -name "." -exec rsync -crlptgov --delete {} /$DRIVE/$HOME \;
done

La première commande rsync copie les fichiers et répertoires qu'elle trouve dans le répertoire source. Cependant, il laisse les répertoires vides afin que nous puissions les parcourir à l'aide de la commande find commande. Cela se fait en passant le d argument, qui indique à rsync de ne pas parcourir le répertoire.

-d, --dirs                  transfer directories without recursing

La trouvaille La commande passe ensuite chaque répertoire à rsync individuellement. Rsync copie ensuite le contenu des répertoires. Cela se fait en passant le r argument, qui indique à rsync de parcourir le répertoire.

-r, --recursive             recurse into directories

Cela maintient le fichier d'incrémentation utilisé par rsync à une taille gérable.

La plupart des tutoriels rsync utilisent le a (ou archiver ) argument de commodité. Il s'agit en fait d'un argument composé.

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

Les autres arguments que je passe auraient été inclus dans le a; ce sont l , p , t , g , et o .

-l, --links                 copy symlinks as symlinks
-p, --perms                 preserve permissions
-t, --times                 preserve modification times
-g, --group                 preserve group
-o, --owner                 preserve owner (super-user only)

Le --supprimer L'option indique à rsync de supprimer tous les fichiers de la destination qui n'existent plus sur la source. De cette façon, le résultat est une duplication exacte. Vous pouvez également ajouter une exclusion pour le .Trash répertoires ou peut-être le .DS_Store fichiers créés par MacOS.

-not -name ".Trash*" -not -name ".DS_Store"

Soyez prudent

Une dernière recommandation :rsync peut être une commande destructrice. Heureusement, ses créateurs réfléchis ont fourni la possibilité de faire des "essais à blanc". Si nous incluons le n option, rsync affichera la sortie attendue sans écrire de données.

rsync -cdlptgovn --delete . /$DRIVE/$HOME

Ce script est évolutif pour de très grandes tailles de stockage et des situations de latence importante ou de liaison lente. Je suis sûr qu'il y a encore place à l'amélioration, comme il y en a toujours. Si vous avez des suggestions, partagez-les dans les commentaires.


Linux
  1. Comment utiliser BusyBox sous Linux

  2. Comment utiliser systemd-nspawn pour la récupération du système Linux

  3. Comment utiliser la commande Rsync sous Linux ?

  4. Comment utiliser rsync depuis un PC Windows vers un serveur Linux distant ?

  5. Utilitaire de sauvegarde Linux pour les sauvegardes incrémentielles

Comment j'utilise Cockpit pour la gestion du serveur Linux de ma maison

Comment vérifier les ports d'écoute sous Linux (ports utilisés)

Comment choisir un outil de sauvegarde pour Linux

Comment utiliser Plus de commandes sous Linux pour lire des fichiers texte volumineux

Système de fichiers stable pour les fichiers volumineux (sauvegardes) pour Linux

Comment puis-je utiliser rsync avec un système de fichiers FAT ?