Admin/Dev

21
Juil.
2019

Astuce macOS : Créer une sauvegarde automatique avec rsync et launchctl - Partie 1

Publié par sky

Sauvegarder ses données est tout un problème, mais c'est une nécessité ! Les disques durs de nos ordinateurs sont les pièces qui s'usent le plus, et ne pas faire de sauvegarde se résume à prendre un énorme risque, qui bien souvent, finit avec la perte pure et simple de des données.

Heureusement pour nous, MacUser, TimeMachine est l'un des meilleurs outils d'Apple, et se destine à résoudre cette problématique d'une manière simple et élégante. On choisit son disque de sauvegarde, on choisit les dossiers que l'on ne souhaite pas sauvegarder, et le Mac s'occupe du reste !

Malheureusement lorsque l'on dispose de plusieurs disques à sauvegarder, ou d'un disque de sauvegarde bien trop petit pour sauvegarder l'ensemble de nos disques, on peut se retrouver bloqué. En effet, si la force de TimeMachine est sa simplicité et sa transparence d'utilisation, c'est aussi sa faiblesse. Il n'est, à aucun moment, possible de configurer plusieurs sauvegardes différentes, en choisissant par exemple, de sauvegarder le disque A vers le disque B et le disque C vers le disque D.

Voici une solution, moins élégante que TimeMachine mais qui permettra de faire vos sauvegardes et donc d'éviter de perdre vos données. Cette solution passe par l'utilisation du terminal. Plus particulièrement, c'est de la commande rsync que nous allons voir dans cette première partie de l'article, puis nous écrirons le script de la sauvegarde dans un second temps, et enfin nous étudierons launchctl. Sacré programme, dont il est évidemment possible de profiter indépendemment !

 

1/ Qu'est ce que rsync ?

rsync est une commande, qui comme son nom l'indique partiellement, permet de synchroniser deux dossiers. Elle dispose de nombreuses options qui permettent de faire beaucoup de choses. Dans le cadre de cet article, nous allons en analyser quelques unes, parmi les plus intéressantes mais surtout qui pourraient nous être utiles dans notre projet de sauvegarde.

 

2/ Préparatifs et première synchronisation

Afin de réaliser nos expérimentations, nous allons préparé un petit dossier, que je nommerai sobrement MonDossier. Ce dossier MonDossier sera notre source. Dans ce dossier, copies-y quelques documents légers, tels que des documents au format texte, ou de petites images.

Le but étant d'avoir plusieurs éléments, mais que l'ensemble ne soit pas trop lourd afin de pouvoir faire les tests rapidement, et ne pas attendre plusieurs secondes que les copies se fassent.

Maintenant, je créé un second dossier, à côté que je nomme Backup et qui sera le dossier de destination.

Pour synchroniser le contenu de MonDossier dans Backup, ouvrez un terminal, placez vous à la racine des deux dossiers, et lancez la commande

rsync -r MonDossier/ Backup

Maintenant, ajoutez un document dans MonDossier, et relancez la commande une nouvelle fois, le nouveau document apparaitra dans Backup.

3/ Recommendations

Vous l'avez remarqué, nous avons mis un / à la fin de MonDossier, cela indique que l'on veut copier le contenu du dossier dans le répertoire de destination.

Si l'on avait omis le /, c'est le dossier qui aurait été copié. Cela peut aussi être pratique lorsque l'on souhaite par exemple copier plusieurs dossiers dans le répertoire de sauvegarde.

Mais il faut bien faire attention parce qu'en oubliant un simple /, vous pouvez vous retrouver à copier deux fois le même dossier. Et selon sa taille cela peut faire mal.

Attention aussi, une synchronisation dans le mauvais sens pourrait écraser ou effacer vos données. Il est donc nécessaire d'être bien conscient de ce que l'on fait au risque de ne causer plus que de problème qu'on essaye d'en régler.

Enfin, avant de vous lancer dans de grandes sauvegardes, vérifiez bien les chemins de vos dossiers de sauvegarde et de destination, afin que les éléments soient bien copiés et au bon endroit. Une petite vérification de temps en temps est aussi l'assurance d'une bonne sauvegarde de ses données.

rsync est une commande qui doit être utilisée avec un peu de vigilance, si l'on veut éviter les problèmes.

 

4/ Paramètre -a

Jusqu'ici nous demandions la synchronisation de notre dossier avec le paramètre -r. Ce -r indiquait la copie récursive des dossiers. Le paramètre -a pour "archive" permet une copie plus proche de l'original. C'est en fait un groupe de paramètre, dont :

  • r : copie récursive des dossiers
  • l : copie des liens symboliques en tant que liens symboliques (au lieu de copier les documents ou dossiers liés)
  • p : préserve les permissions des éléments
  • t : préserve les dates de création et dates de modification des éléments
  • o : préserve le propriétaire des éléments
  • g : préserve le groupe attaché aux éléments
  • D : préserve les documents spéciaux (et les devices mais cela devient plus compliqué)

Globalement, pour faire une copie (presque) parfaite, il est préférable d'utiliser le paramètre -a.

rsync -a MonDossier/ Backup

 

5/ Mode verbose

rsync dispose d'un mode verbose, c'est à dire un mode où la commande indique tout ce qu'elle fait. Vidons notre dossier Backup, et lançons la commande suivante

rsync -av MonDossier/ Backup

La commande rsync commence par construire la liste des fichiers, puis l'on voit le transfer de chacun des fichiers. Maintenant, ajoutons un ou deux fichiers dans MonDossier, et relançons la même commande.

Vous verrez que rsync ne va copier que les nouveaux documents, les documents existant étant identiques.

 

6/ Paramètre --delete

Ce paramètre est extrèment utile, mais à utiliser avec encore plus d'attention. Nous avons vu que rsync ne copie que les nouveaux fichiers, mais que ce passe-t-il si nous enlevons un document de MonDossier. Essayons, et relançons la commande.

rsync -av MonDossier/ Backup

Et bien, il ne se passe pas grand chose, et si nous regardons le contenu de Backup, le fichier retiré de MonDossier s'y trouve toujours.

Par défaut, rsync va ajouter les nouveaux fichiers, mais ne supprimera pas les documents qui ont été retirés de la source.

Il est cependant possible de lui demander de supprimer de la destination, les documents qui n'existent plus dans la source, avec le paramètre --delete.

rsync -av --delete MonDossier/ Backup

Par défaut, avec l'option --delete, rsync va s'occuper des suppressions avant d'attaquer le transfer.

Il existe 2 variantes à cette option :

  • --delete-during : les suppressions se font au fur et à mesure
  • --delete-after : les suppressions se font après le transfer. C'est d'ailleurs l'option que je privilègie, car, au moindre soucis, aucun élément est supprimé. Dans le cas inverse si il y a des soucis lors de chaque synchronisation les fichiers "en trop" ne sont jamais supprimés.

 

7 / Paramètre --exclude

Encore une option extrêmement pratique ! Elle permet d'exclure des dossiers ou des fichiers que l'on ne voudrait pas sauvegarder.

Par exemple pour ne pas sauvegarder les documents au format texte. Pour être plus précis, TOUS les fichiers textes du dossier source, qu'ils soient à la racine ou dans des sous-dossiers.

rsync -av --exclude '*.txt' MonDossier/ Backup

On peut être plus fin en jouant avec la règle d'exclusion, par exemple pour supprimer les fichiers texte d'un dossier "Test" en particulier (et de ses sous-dossiers)

rsync -av --exclude 'Test/*.txt' MonDossier/ Backup

ou encore de tous les fichiers texte de tous les dossiers "Test" qui se trouveraient dans le dossier source

rsync -av --exclude '*/Test/*.txt' MonDossier/ Backup

Il est possible d'ajouter plusieurs exclusion dans la meme commande, par exemple pour exclure les fichiers textes toujours, mais aussi les fichiers PNG.

rsync -av --exclude '*.txt' --exclude '*.png' MonDossier/ Backup

 

8 / Paramètres --progress et --partial pour les gros fichiers

Lors de la copie de fichiers volumineux, il peut être intéressant d'avoir encore plus d'informations, notamment sur l'évolution de la copie des fichiers. Le paramètre --progress va vous permettre de suivre la progression sur chaque fichier.

En cas de coupure de la copie, au milieu d'un gros fichier, le paramère --partial vous permettra de reprendre la synchronisation au milieu du fichier au lieu de le reprendre du début.

 

9 / Copie vers un autre Mac (ou Linux)

Faire un backup c'est bien ! Mais faire un backup distant, c'est mieux ! En effet, dans les cas extrêmes que sont le vol ou l'incendie, vous perdrez vos données tout autant que les sauvegardes qui sont à côté. C'est pour cela que faire une synchronisation distante peut devenir intéressante.

rsync permet évidemment de faire cela, en passant par SSH. Pour cela il faut que l'ordinateur qui dispose du dossier de destination soit disponible via ce service.

Ensuite, il suffit d'insérer le paramètre -e ssh, puis d'indiquer les informations de connexion, le chemin complet du dossier et tout se passera de la même manière.

rsync -av  MonDossier/ User@MacDistant:/Chemin/Vers/Le/Dossier/Backup

Evidemment, le mot de passe du compte User sur la machine MacDistant vous sera demandé. Pour rendre tout cela plus automatique, vous pouvez organiser une connexion sans mot de passe entre les deux machines, ce qui sera l'objet du prochain article sur le SSH !

Si vous le préférez, il est possible de faire le backup dans l'autre sens, c'est à dire, que c'est la Mac qui sauvegarde qui se connecte au Mac à sauvegarder. Il suffit pour cela d'indiquer les informations de connexion au niveau de la source.

rsync -av User@MacASauvegarder:/Chemin/Vers/Le/Dossier/MonDossier/ Backup

 

10 / Paramètre -n

Ce paramètre ne nous servira à rien pour faire nos backups, mais peut nous donner des indications sur le fonctionnement de TimeMachine. Si vous avez déjà regardé les fichiers de votre sauvegarde TimeMachine, vous verrez que le système d'Apple créé une multitude de dossiers qui sont en fait, les différences par date, et qui permet ainsi d'avoir un historique aussi précis, et cet affichage si particulier lorsque l'on rentre dans TimeMachine.

La commande -n va indiquer à la commande rsync de ne faire AUCUNE modification sur les fichiers. Ainsi, si je combine les paramètres vus au dessus, avec le paramètre -n :

rsync -rvnc --delete MonDossier/ Backup

J'obtiens une commande qui me donne la liste des changements (y compris les suppressions), sans rien faire de plus. N'est ce pas la base d'une sauvegarde TimeMachine ?

Il ne reste ensuite plus qu'à créer un dossier et copier les fichiers modifiés, et d'enregistrer quelque part (un fichier invisible dans le dossier), la liste des documents à supprimer.

 

11 / Bien d'autres options

Il suffit de regarder l'interminable page de man pour se rendre compte de l'ampleur des capacités de rsync.

 
Sommaire de la série
 
 
Commentaires
Aucun commentaire pour le moment.

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Les cookies assurent le bon fonctionnement de nos services. En continuant, vous acceptez leur utilisation sur notre site internet.
Accepter