Dale Almacenamiento ilimitado a tu Raspberry, Servidor o PC,… con Rclone

Tiempo estimado de lectura: 30 minutos. 3303 palabras. aplicacion

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.

Instalación

Instalación repositorios

Rclone está en los repositorios oficiales, así que su instalación es muy simple:

sudo apt install rclone

Instalación a la última (Recomendable)

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>

rclone snap

Mucho mas desactualizado. También podemos instalar rclone desde snap

sudo snap install rclone

RcloneBrowser

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

Fork de RcloneBrowser

Como el proyecto rclone-browser está desactualizado hace más de 2 años, podemos encontrar también un Fork en GitHub de noabody.

Acceder a una Nube

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.

Autorizar la cuenta sin tener interfaz gráfica

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:

Instalamos uzbl

sudo apt install uzbl

Acceder al navegador remotamene

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!!!

Método sencillo desde tu PC o Portátil

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

Iniciando Rclone y comandos básicos

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

Listar todas la nubes disponibles

Para listar todas las nubes que hemos añadido a rclone, utilizaremos el siguiente comando:

rclone listremotes

Ver el tamaño de las carpetas

rclone size drive:Carpeta

Hacer un ls

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, para ver toda la estructura de directorios y archivos

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:

Conocer el tamaño de los directorios con ncdu

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 archivos en remoto

Leer remotamente un archivo de la nube:

rclone cat unidad_creada:archivo.txt

Crear un nuevo directorio

Para crear un directorio nuevo, igual que lo hacemos habitualmente en la terminal, utilizaremos mkdir.

Ejemplo:

rclone mkdir drive:fotos/viaje

Mover archivos o Directorios

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.

Vaciar la papelera si es posible

rclone cleanup drive:

Resto de Comandos

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.

Copiar de un nube a otra

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

Ver el proceso de copiado o sincronización

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

Archivo de configuración

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

Especificando donde está el archivo de configuración

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

Copiar o Sincronizar

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.

Copiar

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/

Sincronizar

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/

Cifrar una Carpeta

Para crear una carpeta cifrada, utilizaremos el mismo proceso que para vincular rclone a una nube pública:

rclone config

Nombre que utilizaremos en rclone, para sincronizar o copiar esa carpeta cifrada

Seleccionamos:

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:

Te preguntará si quieres que los archivos permanezcan ocultos para Google Drive, utilicen el nombre original del archivo (aun estando cifrados) o utilice un nombre complejo compuesto de números y letras.

Añadir una o dos contraseñas para cifrar los archivos:

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

Acceso a rclone mediante contraseña

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!!!

Sincronizaciones automatizadas si rclone tiene contraseña

Utilizar rclone, poniendo la contraseña en la misma línea

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í:

Desbloqueo de la contraseña en scripts programados

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

Montar/Desmontar unidad como si fuera un disco duro

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.

Instalar Fuser

sudo apt-get install fuse

Descomenta –allow-others

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

Montar

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

Automontar al iniciar el sistema operativo

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

Montar varias nubes con Rclone y SystemD

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.

Script para montar y desmontar todas las nubes

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!!!

Servicio

# 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

Rclone en Android

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 instar una de estas dos aplicaciones. Las dos a la vez, no es posible, la segunda que instales te dará error.

Uso de Rclone en Android

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.

Rclone-Browser por Docker

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.

Conclusión

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 straming. ¿Que más se puede pedir?

Fuentes

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 miércoles 03 julio del 2019 y actualizado el miércoles 24 julio del 2019

También te puede interesar:

Powered by org-bash-blog

Writing in orgmode whith emacs



Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.