En tant qu'administrateur système, je consacre la majeure partie de mon énergie à deux choses (à part m'assurer qu'il y a du café) :m'inquiéter d'avoir des sauvegardes et trouver la meilleure façon de faire les choses. L'un de mes outils préférés pour résoudre les deux problèmes s'appelle rsync
.
Rsync
a été créé par l'une des personnes qui ont inventé la samba, Andrew Tridgell. C'est un outil tellement utile et flexible qu'il est inclus dans chaque version de Linux et a été porté sur d'autres systèmes d'exploitation. Plus simplement, rsync est un outil pour copier des fichiers. Cependant, c'est beaucoup plus puissant que cela.
- Il conserve deux ensembles de fichiers à jour et synchronisés.
- Il s'exécute comme une commande et peut être scripté.
- Il compresse et chiffre le flux de données.
- Il utilise plusieurs types de clients d'accès à distance (SSH et RSH, par exemple).
Il n'est donc pas surprenant qu'il soit l'un des favoris de nombreux administrateurs système.
Les bases
Comme le mv
et cp
commande, dans sa forme la plus basique rsync
a juste besoin d'une source et d'une destination :
[root@milo enable]# rsync ./foo/testfoo ./bar/
[root@milo enable]# ls -ilR
.:
total 8
5079202 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:15 bar
5079201 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:08 foo
./bar:
total 8
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4982446 -rw-rw-r-- 1 root root 8 Jun 11 15:15 testfoo
./foo:
total 4
5001268 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testfoo
Nous avons copié testfoo
à la bar
annuaire. Pas grave, vraiment.
Maintenant, ajoutons un fichier à ./foo
et resynchroniser :
[root@milo enable]# touch ./foo/bat.txt
[root@milo enable]# rsync ./foo/* ./bar/
[root@milo enable]# ls -ilR
.:
total 8
5079202 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:45 bar
5079201 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:25 foo
./bar:
total 8
4992599 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4992604 -rw-rw-r-- 1 root root 8 Jun 11 15:45 testfoo
./foo:
total 4
5002591 -rw-r--r-- 1 root root 0 Jun 11 15:25 bat.txt
5001268 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testfoo
À ce stade, nous voulons noter deux ou trois choses. Tout d'abord, lorsque nous avons relancé rsync
, il a recopié testfoo
et mis à jour le atime
. De plus, chaque fois qu'il copie un fichier, il donne au fichier un nouveau inode
Numéro. Par conséquent, en ce qui concerne le système de fichiers, il s'agit d'un fichier totalement différent (car il l'est—il a copié tout l'information à chaque fois). Enfin, notez que lorsque nous rsync
le fichier, il change la propriété de l'utilisateur qui a exécuté la commande (root, dans ce cas).
Tout cela est important si nous voulons faire des sauvegardes. Ce comportement est le même que le cp
commande. On peut aussi utiliser le cp
commande pour copier les répertoires de manière récursive, ainsi que pour préserver les attributs et la propriété. La grande différence est que rsync
peut faire une somme de contrôle du fichier et comparer les fichiers source et destination, où cp
regarde juste le atime
valeur. Rsync
La fonctionnalité supplémentaire de est utile pour préserver l'intégrité de la sauvegarde (nous aborderons l'intégrité plus tard dans cette série).
Alors mettons à jour un seul de ces fichiers et voyons ce que rsync
fait :
[root@milo enable]# echo 'this is new text'>>./foo/testfoo
[root@milo enable]# ls -al ./foo
-rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
[root@milo enable]# rsync -aruv ./foo/* ./bar/
sending incremental file list
testfoo
sent 194 bytes received 35 bytes 458.00 bytes/sec
total size is 25 speedup is 0.11
[root@milo enable]# ls -ilR
.:
total 8
5079202 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 16:16 bar
5079201 drwxrwxr-x 2 skipworthy skipworthy 4096 Jun 11 15:56 foo
./bar:
total 8
4992599 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
4998080 -rw-r--r-- 1 root root 0 Jun 11 15:56 footoo.txt
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4983541 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
./foo:
total 4
5002591 -rw-r--r-- 1 root root 0 Jun 11 15:25 bat.txt
4997949 -rw-rw-r-- 1 skipworthy skipworthy 0 Jun 11 15:56 footoo.txt
5001268 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
Notez que cette fois nous avons utilisé quelques commutateurs :
-a
Mode archive, conservemtime
, autorisations et liens symboliques.-r
Mode récursif, explore tous les répertoires et les synchronise (devrait être redondant avec le-a
switch, mais je le spécifie toujours quand même).-u
Ne met à jour les fichiers que si lemtime
sur la source est plus récent.-v
Mode verbeux, vous indique ce qu'il fait (c'est toujours agréable de pouvoir surveiller ce qui se passe. Une autre astuce utile consiste à diriger cette sortie vers un fichier et à la vérifier plus tard).
Restaurer le fichier avec rsync
Alors disons que c'est quelques semaines plus tard. Le directeur financier appelle et dit que quelque chose ne va pas :de nombreux fichiers manquent dans son répertoire /foo.
./foo:
total 8
5002591 -rw-r--r-- 1 root root 0 Jun 11 15:25 bat.txt
4997949 -rw-rw-r-- 1 skipworthy skipworthy 33 Jul 24 15:32 footoo.txt
5001268 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
Nous examinons les sauvegardes et voyons les fichiers manquants :
./bar:
total 12
4992599 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
4994298 -rw-rw-r-- 1 skipworthy skipworthy 33 Jul 24 15:32 footoo.txt
4994359 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles1.txt
4994367 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles2.txt
4994374 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles3.txt
4994413 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles4.txt
5001398 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
4983541 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
Un rapide rsync
restaurer :
[root@milo enable]# rsync -aruv ./bar/* ./foo
sending incremental file list
bat.txt
laterfiles1.txt
laterfiles2.txt
laterfiles3.txt
laterfiles4.txt
testbar
Et :
./foo:
total 12
4994387 -rw-r--r-- 1 root root 0 Jun 11 15:45 bat.txt
4997949 -rw-rw-r-- 1 skipworthy skipworthy 33 Jul 24 15:32 footoo.txt
4994562 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles1.txt
4994564 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles2.txt
4994565 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles3.txt
4994567 -rw-r--r-- 1 root root 0 Jul 24 15:31 laterfiles4.txt
4994579 -rw-rw-r-- 1 skipworthy skipworthy 8 Jun 11 15:08 testbar
5001268 -rw-rw-r-- 1 skipworthy skipworthy 25 Jun 11 16:13 testfoo
Les fichiers manquants sont restaurés ou mis à jour à partir des sauvegardes les plus récentes, mais les fichiers existants, qui n'ont pas changé, sont laissés seuls. Notez également que la propriété de footoo.txt
a été préservé.
Récapitulez
Je vous encourage à jeter un œil (comme toujours) à la page de manuel de rsync
, et essayez cette commande utile.
Voici quelques options supplémentaires à prendre en compte :
-r
(récursif)-b
(sauvegardes)-R
(relatif)-u
(mise à jour - copier uniquement les fichiers modifiés)-P
(progrès)-c
(compresser)-p
(préserver les autorisations)
Dans le prochain article de cette série, nous irons un peu plus loin et examinerons le rsync
distant et certaines des autres fonctionnalités plus avancées de cette commande.
[ Cours en ligne gratuit :Présentation technique de Red Hat Enterprise Linux. ]