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.