Rclone es una aplicación de Software Libre, que nos permite conectar nuestra Raspberry, Servidor o PC, a las más conocidas nubes públicas (Dropbox, Google Drive, OneDrive, Mega, Hubic, PCloud, Box, Nextcloud, Owncloud, Amazon,…).
Gracias a esta conectividad, podremos hacer copias o sincronizaciones de nuestras carpetas o archivos. Además, combinando Rclone con cron, podremos programar estas copias o sincronizaciones.
Rclone también permite copiar y sincronizar carpetas en local, por SSH, SFTP, WebDav, etc…
Otros dos puntos fuertes de Rclone, es la posibilidad de montar la nube pública en una carpeta en Local, permitiendonos acceder a todo el contenido de esta nube, como si estuviera en local. El otro punto fuerte, es la posibilidad de cifrar todo el contenido que guardemos en la nube pública.
Rclone está en los repositorios oficiales, así que su instalación es muy simple:
sudo apt install rclone
Como sabeis, las api de muchas nubes públicas van cambiando periodicamente, así que quizas sería muy insteresante instalar la última versión. Para ello descargaremos el paquete de la arquiectura de nuestro procesador y los instalaremos así:
sudo dpkg -i <PAQUETE_DESCARGADOR>
Mucho mas desactualizado. También podemos instalar rclone desde snap
sudo snap install rclone
Aunque el uso de rclone es muy sencillo, es probable que quieras utilizar interfaz gráfica para gestionar tus nubes:
En Ubuntu 19.04, podemos instalarlo desde los repositorios de oficiales:
sudo apt install rclone-browser
Instalación por PPA:
sudo add-apt-repository ppa:mmozeiko/rclone-browser
sudo apt-get update
sudo apt install rclone-browser
Como el proyecto rclone-browser está desactualizado hace más de 2 años, podemos encontrar también un Fork en GitHub de noabody.
Rclone dispone de un listado amplio de nubes públicas.
Para utilizar una cuenta en rclone, teclearemos en nuestra terminal:
rclone config
Ahora, entre las opciones, introduciremos n, para crear una nueva cuenta en Rclone:
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> n
Nos pedirá que le pongamos un nombre
name> drive
Y ahora nos saldrá el gran listado de nubes públicas:
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 / A stackable unification remote, which can appear to merge the contents of several remotes
\ "union"
2 / Alias for a existing remote
\ "alias"
3 / Amazon Drive
\ "amazon cloud drive"
4 / Amazon S3 Compliant Storage Providers (AWS, Ceph, Dreamhost, IBM COS, Minio)
\ "s3"
5 / Backblaze B2
\ "b2"
6 / Box
\ "box"
7 / Cache a remote
\ "cache"
8 / Dropbox
\ "dropbox"
9 / Encrypt/Decrypt a remote
\ "crypt"
10 / FTP Connection
\ "ftp"
11 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
12 / Google Drive
\ "drive"
13 / Hubic
\ "hubic"
14 / JottaCloud
\ "jottacloud"
15 / Local Disk
\ "local"
16 / Mega
\ "mega"
17 / Microsoft Azure Blob Storage
\ "azureblob"
18 / Microsoft OneDrive
\ "onedrive"
19 / OpenDrive
\ "opendrive"
20 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
21 / Pcloud
\ "pcloud"
22 / QingCloud Object Storage
\ "qingstor"
23 / SSH/SFTP Connection
\ "sftp"
24 / Webdav
\ "webdav"
25 / Yandex Disk
\ "yandex"
26 / http Connection
\ "http"
Introducimos el número de la nube o cifrado y seguimos con el proceso…
El resto de pasos, está en un Ingles simple e intuitivo. Si no entiendes Ingles, te recomiendo Google Translate.
Uno de los problemas que podemos encontrar, es que para autorizar la cuenta de una nube pública, rclone nos pedirá el conectarnos a una url desde nuestro navegador, en el dispositivo en local y autorizar a rclone acceder a esta cuenta.
La verdad es que si no tienes interfaz gráfica, esto puede ser un serio problema, ya que no puedes utilizar un navegador como Firefox, Chrome, etc…
Los navegadores de texto para terminal, no todos son compatibles, así que solucioné el problema instalando un navegador como uzbl y accediendo a él remotamente desde un PC de un modo virtualizado:
sudo apt install uzbl
Desde otro dispositivo, como puede ser un PC, nos conectaremos por SSH y abriremos el navegador:
ssh -X -p 22 angel@192.168.1.100 uzbl
sustituye el usuario e IP
Ahora introducimos la url que nos de rclone en la terminal, pulsando la tecla o
Ya podemos autorizar a rclone!!!
El método más sencillo, sería instalar rclone en tu PC o Portátil, conectarte a tus nubes desde él y copiar el archivo completo o la parte perteneciente a la nube que te interesa, en el configuración de rclone de tu raspberry o servidor sin interfaz gráfica.
El archivo de configuración, te recuerdo que está en: $HOME/.config/rclone/rclone.conf
Si has llegado hasta aquí, ya has vinculado con una de tus nubes a Rclone. Vamos a comprobar que todo funciona correctamente haciendo un ls.
Para utilizar una de las nubes, escribiremos el nombre que hemos otorgado a la unidad, seguido de dos puntos.
Ejem:
A mi cuenta de Google Drive, le he puesto el nombre drive.
drive:
Si quiero acceder a una carpeta dentro de la nube. Por ejemplo, mi carpeta /Podcast/ugeek, lo representariamos así:
drive:podcast/ugeek
drive:podcast
Para listar todas las nubes que hemos añadido a rclone, utilizaremos el siguiente comando:
rclone listremotes
rclone size drive:Carpeta
Ver un listado de todos los archivos en la unidad:
rclone ls unidad_creada:carpeta
Ver un listado, únicamente de las carpetas de la unidad con su fecha de creación:
rclone lsd unidad_creada:carpeta
-> ls de carpetas
Ver un listado, únicamente de las carpetas de la unidad:
rclone lsf unidad_creada:carpeta
Hacer un tree de todas las carpetas y archivos
rclone tree unidad_creada:
Hacer un tree, para conocer la estructura únicamente de las carpetas.
rclone tree unidad_creada: -d
rclone tree --dirs-only unidad_creada:
ncdu es una herramienta que muestra todas las carpetas que tienes en tu disco duro y las ordena por tamaño. Haz lo propio con rclone mediante este comando:
rclone ncdu unidad_creada:
Leer remotamente un archivo de la nube:
rclone cat unidad_creada:archivo.txt
Para crear un directorio nuevo, igual que lo hacemos habitualmente en la terminal, utilizaremos mkdir.
Ejemplo:
rclone mkdir drive:fotos/viaje
rclone moveto <origen> <destino>
Ejemplo:
Podemos utilizar -P para ver el proceso:
rclone moveto drive:Mis_Fotos drive:Mis_Archivos/Mis_Fotos -P
Si en una carpeta cifrada, tenemos varias carpetas de gran tamaño y queremos mover una de estas a la raíz de la nube, tenemos que copiar el nombre de la carpeta cifrado, del tipo (vgaq89yqhg34gbhvai7g9q479) y moverlo a una nueva carpeta que crearemos en la raíz. Dentro podremos el archivo original cifrado.
En el archivo rclone.conf, copiaremos todos los datos de esa carpeta cifrada, modificando el nombre de esta nueva carpeta y la nueva ruta en la nube. Como puedes observar, ahora tendremos 2 carpetas cifradas, con la misma contraseña de cifrado.
rclone cleanup drive:
Para conocer los comandos disponibles, lanza la ayuda:
rclone -h
about Get quota information from the remote.
authorize Remote authorization.
cachestats Print cache stats for a remote
cat Concatenates any files and sends them to stdout.
check Checks the files in the source and destination match.
cleanup Clean up the remote if possible
config Enter an interactive configuration session.
copy Copy files from source to dest, skipping already copied
copyto Copy files from source to dest, skipping already copied
copyurl Copy url content to dest.
cryptcheck Cryptcheck checks the integrity of a crypted remote.
cryptdecode Cryptdecode returns unencrypted file names.
dbhashsum Produces a Dropbox hash file for all the objects in the path.
dedupe Interactively find duplicate files and delete/rename them.
delete Remove the contents of path.
deletefile Remove a single file from remote.
genautocomplete Output completion script for a given shell.
gendocs Output markdown docs for rclone to the directory supplied.
hashsum Produces an hashsum file for all the objects in the path.
help Show help for rclone commands, flags and backends.
link Generate public link to file/folder.
listremotes List all the remotes in the config file.
ls List the objects in the path with size and path.
lsd List all directories/containers/buckets in the path.
lsf List directories and objects in remote:path formatted for parsing
lsjson List directories and objects in the path in JSON format.
lsl List the objects in path with modification time, size and path.
md5sum Produces an md5sum file for all the objects in the path.
mkdir Make the path if it doesn't already exist.
mount Mount the remote as file system on a mountpoint.
move Move files from source to dest.
moveto Move file or directory from source to dest.
ncdu Explore a remote with a text based user interface.
obscure Obscure password for use in the rclone.conf
purge Remove the path and all of its contents.
rc Run a command against a running rclone.
rcat Copies standard input to file on remote.
rcd Run rclone listening to remote control commands only.
rmdir Remove the path if empty.
rmdirs Remove empty directories under the path.
serve Serve a remote over a protocol.
settier Changes storage class/tier of objects in remote.
sha1sum Produces an sha1sum file for all the objects in the path.
size Prints the total size and number of objects in remote:path.
sync Make source and dest identical, modifying destination only.
touch Create new file or change file modification time.
tree List the contents of the remote in a tree like fashion.
version Show the version number.
Es probable que queramos hacer una copia de nuestra fotos guardadas en Google Drive, en Dropbox. Para ello utilizariamos:
rclone copy drive:fotos/verano/ dropbox:fotos/verano
Una de las cosas que me ponen nervioso, es que cuando ejecutas un comando, la terminal se queda con ese comando introducido y no sucede nada. No sabes si se está copiando o sincronizando bien.
Si al final de la línea añadimos -v, veremos en nuestra terminal todo el proceso de copia o sincronización. Irá apareciendo toda la información del proceso archivo a archivo.
rclone copy drive:fotos/verano/ dropbox:fotos/verano -v
El archivo de configuración de rclone, está en la ruta: $HOME/.config/rclone/rclone.conf
Este archivo si lo llevamos a otro servidor o PC, podremos copiar todas las nubes con sus contraseñas en el otro dispositivo.
Esto es genial, porque es muy cómodo y a la vez peligroso. Cuidado donde dejas este archivo
Con –config, podemos especificar otra ruta del archivo de configuración de rclone.
Imagina que tengo mi archivo de configuración dentro de la carpeta rclone en el home del usuario, lo haríamos así:
rclone sync --config "/home/angel/rclone/rclone.conf" drive:fotos/verano/ dropbox:fotos/verano -v
Con Rclone podemos hacer tanto copias como sincronizaciones. La sincronización, es algo parecido a rsync, ideal backups.
La sincronización solo copiará o borrará aquellos archivos modificados entre el origen y destino.
Recuerda que el origen puede ser tanto la carpeta local, como la carpeta en la nube y viceversa.
Ejemplo de copia en rclone:
rclone copy origen destino
Copiamos los archivos de Google Drive, a mi carpeta fotos en local:
rclone copy drive:fotos/verano/ /home/angel/fotos/
Ejemplo de sincronización en rclone:
rclone sync origen destino
Syncronizamos mis nuevas fotos del verano, a la carpeta de Google Drive /fotos/verano
rclone sync /home/angel/fotos drive:fotos/verano/
Para crear una carpeta cifrada, utilizaremos el mismo proceso que para vincular rclone a una nube pública:
rclone config
9 / Encrypt/Decrypt a remote
\ "crypt"
En la versión de rclone 1.47, aparece en el número nueve. Esto puede variar según la versión.
Mi carpeta cifrada, será una carpeta que crearé en la raíz de Google Drive, que llamaré "Mis Fotos".
Se da por hecho que has seguido la primera parte del tutorial, donde me he conectado a mi cuenta de Google Drive, creando una unidad con rclone llamada drive, y dentro de esta unidad, ahora voy a crear una carpeta llamada Mis Fotos.
De este modo, dentro de Google Drive tendré mis fotos cifradas.
remote> drive:Mis_Fotos
No voy a detallar todos los pasos, pero los siguientes son:
Es opcional el añadir la contraseña, yo prefiero ponerla.
Recuerda que conservando el archivo de configuración, esta carpeta cifrada podrás montarla en otro dispositivo con rclone
Si tu Pc lo compartes con otras personas, quizás te interese el cifrar el archivo rclone.conf, para que nadie copie este archivo de configuración y pueda acceder a tus nubes.
Para ello haremos lo siguiente:
rclone config
Y seleccionaremos la opción:
s) Set configuration password
Nos informará que nuestro archivo de configuración no está cifrado y si deseamos cifrarlo. Cuando digamos que si, nos pedirá que introduzcamos la contraseña 2 veces, para confirmar que no nos hemos equivocado.
Ahora cada vez que utilicemos rclone, nos pedirá la contraseña!!!
Con RCLONE_CONFIGPASS="contraseña", delante de comando, no nos pedirá la contraseña:
RCLONE_CONFIG_PASS="contraseña" rclone copy drive:fotos/verano/ /home/angel/fotos/
Esto en realidad, en entornos confiables puede ser una solución, a mi personalmente me gusta hacerlo así:
Vamos a crear un script, que al iniciarlo, nos pedirá la contraseña:
nano script.sh
#!/bin/echo Source this file don't run it
read -s RCLONE_CONFIG_PASS
export RCLONE_CONFIG_PASS
Damos permisos de ejecución:
sudo chmod +x script.sh
Iniciamos el script:
./script.sh
Ahora, el script nos pedirá que introduzcamos la contraseña.
Si creamos un script automatizado y no queremos que nos pida esta la contraseña, ya que este script probablemente se ejecute en segundo plano mediante cron, utilizaremos al final de la línea del comando rclone :
--ask-password=false
Ejemplo:
rclone lsd drive: --ask-password=false
Vamos a montar la nube pública en nuestro servidor, como si fuera una unidad de disco duro. Para ello, necesitamos instalar Fuse si no lo tenemos instalado.
sudo apt-get install fuse
Descomentar la línea –allow-others
sudo nano /etc/fuse.conf
Para permitir a usuarios no root, montar unidades
# Allow non-root users to specify the allow_other or allow_root mount options.
--allow-others
Reinicia
rclone mount <nube> <carpeta_local>
sudo rclone mount drive:Mis_Fotos /home/<tu_usuario>/Mis_Fotos
Podemos utilizar los siguiente flags:
--allow-other
-> Permitir otros usuarios se conecten --read-only
-> Acceso solo de lectura --vfs-cache-mode full -v
-> Con esto activas el caché de lectura y escritura y ves los logs. Se comporta muchísimo más estable. Cuando escribes un fichero primero lo sube a la caché y después a la nube, pero durante el proceso el archivo estará bloqueado. Hay que tener paciencia. No sirve para usarlo como almacenamiento normal pero es muy cómodo para enviar archivos en bloque.
Ejemplo:
sudo rclone mount drive:Mis_Fotos /home/<tu_usuario>/Mis_Fotos =--allow-other =--read-only
Para automontar nuestra nube en una carpeta local, podemos hacerlo de diferentes formas. Vamos a utilizar cron ya que me parece el método más sencillo.
sudo crontab -e
Escribimos en cron, por ejemplo en mi caso:
@reboot ( rclone mount --config "/home/<tu_usuario>/.config/rclone/rclone.conf" drive:Mis_Fotos /home/<tu_usuario>/Mis_Fotos --allow-other & )
Reiniciamos.
Es muy importante especificar la ruta del archivo de configuración, ya que si no lo hacemos, como estamos ejecutando el comando como root, el archivo no lo buscará en el $HOME del usuario, sino que en el $HOME de root
Germán Martín me mostró como gestiona rclone como si fuera un servicio gracias a SystemD.
Esto es muy bueno!!!.
Mediante una llamada de terminal, el mismo servicio vale para todas las nubes.
Ejemplo:
sudo service rclone-mount@Dropbox_gmag11 start
El directorio /cloud/Dropbox_gmag11/
debe existir así como el remoto Dropbox_gmag11
en la configuración de RClone en el usuario rclone.
Ha hecho un pequeño script llamado rclone-mount.sh
echo $1
sudo systemctl $1 rclone-mount@Dropbox_gmag11
sudo systemctl $1 rclone-mount@Dropbox_gmag11hm
sudo systemctl $1 rclone-mount@GDrive_gmag11
Para montar hace todas las nubes
rclone-mount start
Para desmontar todas las nubes
rclone-mount stop
Super Ingenioso!!!
# Rclone mount on boot
# Copy file to: /lib/systemd/system
# You need to create a remote on RClone and a folder on your disk, both with same name <rclone-remote>
# This example uses /cloud/ folder as origin to mount all remotes, change it to your needs
# This example use a linux user named rclone. Create it or adapt it to your needs. Rclone will get config from that user's home folder
# Register new service by typing:
# sudo systemctl daemon-reload
# Do the next one for every remote you want to load on boot
# sudo systemctl enable rclone-mount@<rclone-remote>.service
# systemctl start rclone-mount@<rclone-remote>.service
# Usage:
# To unmount drive use
# systemctl stop rclone-mount@<rclone-remote>.service
# To mount use:
# systemctl start rclone-mount@<rclone-remote>.service
# To disable mount on boot use:
# systemctl disable rclone-mount@<rclone-remote>.service
[Unit]
Description=rclone FUSE mount for %i
Documentation=http://rclone.org/docs/
After=network-online.target externo.mount
# Mount point in my system is on a USB drive, don't ask why :))), that's why I have to wait for it to get mounted
Requires=externo.mount
[Service]
#Type=forking
# This example use a linux user named rclone. Create it or adapt it to your needs. Rclone will get config from that user's home folder
User=rclone
Group=rclone
# This example uses /cloud/ folder as origin to mount all remotes, change it to your needs
ExecStart=/usr/bin/rclone mount %i: /cloud/%i --vfs-cache-mode full -v --allow-other
ExecStop=/bin/fusermount -uz /cloud/%i
[Install]
#Wants=network-online.target
#Alias=rclone-rs
#RequiredBy=
WantedBy=multi-user.target
Con el parámetro –vfs-cache-mode full que va en la llamada a rclone se comporta muchísimo más estable. Cuando escribes un fichero primero lo sube a la caché y después a la nube, pero durante el proceso el archivo estará bloqueado.
Hay que tener paciencia. No sirve para usarlo como almacenamiento normal pero es muy cómodo para enviar archivos en bloque –allow-other permite acceder al almacenamiento al resto de usuarios, incluido www-data
Acceder a una carpeta cifrada con rclone desde tu dispositovo Android, no es un problema. Disponemos de dos aplicaciones en el Google Play. Aquí te dejo la primera desde Google Play y la segunda, un repositorio en GitHub donde puedes descargar el apk:
Solo puedes instarlar una de estas dos aplicaciones. Las dos a la vez, no es posible, la segunda que instales te dará error.
Tan sencillo como importar el archivo de configuración rclone.conf, o crear una carpeta llamada rclone en la raíz de la memoria interna de tu teléfono y dejar dentro de esta, el archivo de configuración rclone.conf.
Cuando abras la aplicación, saldrán todas tus nubes. Podrás subir y bajar archivos, así como ver contenido multimedia en streaming.
También podemos montar el docker de Rclone-Browser, en una versión totalmente actualizada gracias al proyecto de Romancin. El docker podemos descargarlo desde DockerHub para arquitectura amd64 y acceder a Rclone-Browser mediante un navegador web por el puerto 5800 o VNC en el puerto 5900:
docker run -d --name=rclonebrowser \
-v $HOME/docker/rclonebrowser/config:/config \
-v $HOME/docker/rclonebrowser/media:/media \
-e GROUP_ID=0 -e USER_ID=0 \
-e TZ=Europe/Madrid \
-p 5800:5800 \
-p 5900:5900 \
romancin/rclonebrowser:latest
El archivo de configuración de rclone lo dejaremos en la carpeta config y los archivos, carpetas… que copiaremos o sincronizaremos, estarán en la carpeta media.
Rclone es una herramienta alucinante. Nos permite utilizar un gran número de nubes públicas, privadas, hacer sincronizaciones o copias entre nubes, local-nube o nube-local, montar nubes en una carpeta local,… y gracias a rclone Browser o la versión de Android, utilizar una interfaz gráfica sencilla y consumir contenido multimedia en streaming. ¿Que más se puede pedir?
Gracias a todos los usuarios del Grupo de uGeek por recopilar más información, como Rapejim, Germán Martín,…
Publicado por Angel el Wednesday 03 July del 2019 y actualizado el Wednesday 24 July del 2019
También te puede interesar:
Powered by org-bash-blog
Written in OrgMode with Emacs and converted to HTML with Pandoc
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.