RClone - Gérer vos données sur le cloud
Publié le : 12 août 2022 | Mis à jour le : 27 juin 2023Rclone est un outil en ligne de commande permettant de gérer ses données dans le cloud qui peut être utilisé sur Linux, MacOS et Windows.
C’est un outil bien pratique pour par exemple déplacer des données d’un fournisseur de stockage vers un autre.
Rclone gère de très nombreux fournisseurs de stockage de données en ligne dont :
- Amazon S3
- DigitalOcean Spaces
- DropBox
- Google Cloud Storage
- Google Drive
- Google Photos
- OVH Hubic (bientôt remplacé)
- Scaleway
Et plein d’autres. La liste complète
Installation de Rclone
Si vous ne connaissez pas encore asdf
, je vous renvoie à ce billet : asdf le
maxi choco du Devops.
asdf plugin add rclone
asdf install rclone latest
asdf global rclone latest
Pour ceux qui ne veulent pas utiliser asdf :
curl https://rclone.org/install.sh | sudo bash
Utilisation d’un bucket S3 AWS
rclone propose de créer les fichiers de configuration de manière
interactive avec la commande rclone config
. Il vous posera pas mal de
questions (en anglais) pour créer votre remote configuration.
Current remotes:
Name Type
==== ====
google_drive drive
mybackup s3
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
Vous remarquerez que j’ai déjà créé deux remotes sur mon poste de travail. Un utilisant un bucket S3 et un second mon Google Drive.
Pour des bucket S3 je vous conseille de créer un user spécifique et de limiter les droits d’accès à ce seul user. Récupérer son ID et sa clé secrète qu’il faudra renseigner.
Afficher le contenu d’un bucket.
La commande rclone lsd <nom de la conf>:
permet de lister les buckets existant.
rclone lsd mybackup:
-1 2022-08-06 14:09:38 -1 srt-backup
-1 2022-02-07 12:25:25 -1 terraform-stephrobert
Pour afficher le contenu d’un compartiment rclone ls <nom du remote>:<nom du compartiment>
:
rclone ls mybackup:srt-backup
6768 rclone-logo.svg
Pour créer un compartiment rclone ls <nom du remote>:<nom du bucket>
:
rclone mkdir mybackup:test-srt2
rclone lsd mybackup:
-1 2022-08-06 14:09:38 -1 srt-backup
-1 2022-02-07 12:25:25 -1 terraform-stephrobert
-1 2022-08-12 11:34:58 -1 test-srt2
Attention le nom doit être unique dans la région donc, mettez par exemple vos initiales.
Pour synchroniser un répertoire local et un compartiment rclone sync ~/Projets <nom du remote>:<nom du bucket>
:
rclone sync ~/Projets mybackup:test-srt2
rclone ls mybackup:test-srt2
566 personal/ansible-gendoc/.vscode/launch.json
0 personal/ansible-gendoc/README.rst
22 personal/ansible-gendoc/ansible_gendoc/__init__.py
186 personal/ansible-gendoc/ansible_gendoc/__pycache__/__init__.cpython-310.pyc
4142 personal/ansible-gendoc/ansible_gendoc/__pycache__/gendoc.cpython-310.pyc
Pour copier un fichier rclone copy /home/user/file.txt <nom du remote>:<nom du bucket>
:
rclone copy ~/.ssh/config mybackup:test-srt2
Pour vider un bucket rlcone delete <nom du remote>:<nom du bucket>
:
rclone delete mybackup:test-srt2 --rmdirs
Pour le détruire rlcone purge <nom du remote>:<nom du bucket>
:
rclone purge mybackup:test-srt2
rclone lsd mybackup:
-1 2022-08-06 14:09:38 -1 srt-backup
-1 2022-02-07 12:25:25 -1 terraform-stephrobert
On peut également monter un bucket en local rclone mount <nom du remote>:<nom du bucket> <point de montage>
:
rclone ls mybackup:srt-backup
6768 rclone-logo.svg
rclone mount mybackup:srt-backup ~/cloud/ &&
ls ~/cloud
rclone-logo.svg
Pour le démonter il suffit de tout simplement tuer la commande rclone :
killall rclone
Monter un bucket S3 en arrière plan via un service
L’idée est que le point de montage se fasse au démarrage de la machine. Il faut créer un service :
sudo vi /etc/systemd/system/rclone.service
et y mettre ce contenu avec vos informations :
[Unit]
Description=Amazon S3
Requires=systemd-networkd.service
AssertPathIsDirectory=/media/S3
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/rclone mount \
--config=/home/vagrant/.config/rclone/rclone.conf \
--allow-other \
--cache-tmp-upload-path=/tmp/rclone/upload \
--cache-chunk-path=/tmp/rclone/chunks \
--cache-workers=4 \
--cache-writes \
--cache-dir=/tmp/rclone/vfs \
--cache-db-path=/tmp/rclone/db \
--no-modtime \
--drive-use-trash \
--stats=0 \
--checkers=8 \
--dir-cache-time=60m \
--allow-non-empty \
--cache-info-age=60m mybackup:srt-backup /media/S3
ExecStop=/bin/fusermount -u /media/S3
Restart=always
RestartSec=10
TimeoutSec=45
[Install]
WantedBy=multi-user.target
Ensuite, il suffit d’activer le service et de le démarrer :
sudo systemctl enable rclone.service
sudo systemctl start rclone.service
Ca me donne une idée pour écrire ma première lambda. Si je dépose une image dans mon bucket elle sera convertie au format webp. Ca fera l’objet d’un prochain billet. Si vous avez d’autres idées ou cas d’usage laissez les en commentaires.