Rclone: The Swiss Army Knife of Cloud Storage
4 minute reading time
Rclone is a terminal application that manages remote storage. It supports the standard remote filesystem protocols such as S3, (S)FTP, WebDAV as well as easy to use integration with cloud providers such as Amazon S2, Backblaze B2, Google Drive, and others. We can even perform regular backups using Restic with Rclone underneath. With all these features, it’s easy to configure all remote storage within Rclone and then synchronize the configuration file across machines.
Setting up a remote
Below is an example of setting up a WebDAV remote.
No remotes found - make a new one n) New remote s) Set configuration password q) Quit config n/s/q> n name> WebDav-Test Type of storage to configure. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / 1Fichier \ "fichier" ... 31 / Webdav \ "webdav" ... 35 / seafile \ "seafile" Storage> 31 ** See help for webdav backend at: https://rclone.org/webdav/ ** URL of http host to connect to Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / Connect to example.com \ "https://example.com" url> https://webdav.example.com Name of the Webdav site/service/software you are using Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / Nextcloud \ "nextcloud" ... 4 / Other site/service or software \ "other" vendor> 4 User name Enter a string value. Press Enter for the default (""). user> brandon Password. y) Yes type in my own password g) Generate random password n) No leave this optional password blank (default) y/g/n> y Enter the password: password: Confirm the password: password: Bearer token instead of user/pass (eg a Macaroon) Enter a string value. Press Enter for the default (""). bearer_token> Edit advanced config? (y/n) y) Yes n) No (default) y/n> n Remote config -------------------- [WebDav-Test] url = https://webdav.example.com vendor = other user = brandon pass = *** ENCRYPTED *** -------------------- y) Yes this is OK (default) e) Edit this remote d) Delete this remote y/e/d> y Current remotes: Name Type ==== ==== WebDav-Test webdav e) Edit existing remote n) New remote d) Delete remote r) Rename remote c) Copy remote s) Set configuration password q) Quit config e/n/d/r/c/s/q>
Mounting a remote
Now that we have a remote, it would be great to mount it in order to explore the filesystem.
The simplest way is through the following command. Where the mountpoint is an empty directory.
rclone mount remote_name:remote_path /path/to/mountpoint
To unmount use the
fusermount -u /path/to/mountpoint
If you forget the exact mountpoint, we can list all mountpoints with the following command.
You can then try to narrow it down such as “show me mounts under the /home directory”
mount | grep /home
Amy Nagle wrote the following gist in order to get this to work with
systemd. First make sure
user_allow_other is in
/etc/fuse.conf. Then create the following user systemd service in
[Unit] Description=rclone: Remote FUSE filesystem for cloud storage config %i Documentation=man:rclone(1) After=network-online.target Wants=network-online.target AssertPathIsDirectory=%h/remote/%i [Service] Type=notify ExecStart= \ /usr/bin/rclone mount \ --config=%h/.config/rclone/rclone.conf \ --vfs-cache-mode writes \ --vfs-cache-max-size 100M \ --log-level INFO \ --log-file /tmp/rclone-%i.log \ --umask 022 \ --allow-other \ %i: %h/remote/%i ExecStop=/bin/fusermount -u %h/remote/%i [Install] WantedBy=default.target
Then you can enable it on user login with the following command.
systemctl --user enable rclone@REMOTE_NAME
You can start it now by
systemctl --user start rclone@REMOTE_NAME
Serving a remote
This option is especially useful when you want a computer to access a cloud service without having
rclone or the cloud specific tool installed. A computer can act as a hub for all the cloud services and present it to other computers in a network with a standard protocol such as SFTP and WebDAV.
To serve via SFTP:
rclone serve \ --addr 0.0.0.0:9191 \ --user brandon \ --pass SuperSecurePasswordHere \ sftp \ REMOTE_NAME:
We can adapt Amy Nagle’s systemd script above to serve SFTP instead:
[Unit] Description=rclone: Remote FUSE filesystem for cloud storage config %i Documentation=man:rclone(1) After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart= \ /usr/bin/rclone serve \ --config=%h/.config/rclone/rclone.conf \ --log-level INFO \ --log-file /tmp/rclone-Icedrive-Secure.log \ --addr 0.0.0.0:9191 \ --user brandon \ --pass SUPER_SECURE_PASS_HERE \ sftp REMOTE_NAME: [Install] WantedBy=default.target
This is just the tip of the iceburg when it comes to Rclone! Another popular feature is automatically encrypting files uploaded to cloud storage. Once you have everything configured to your liking, you can synchronize the file under
~/.config/rclone/rclone.conf across all your machines.