lunedì 26 aprile 2021

Rclone

Ed ecco, come promesso, la traduzione di una guida essenziale sull'uso di Rclone, per i backup dei file su, o tra, storage in rete. Buona lettura.

Rclone tutorial con esempi

by diehard

Rclone è un’applicazione multipiattaforma a linea di comando per la sincronizzazione di dati, simile a rsync, ma focalizzata sulla gestione degli spazi di archiviazione in nuvola (cloud)

Rclone permette di gestire sostanzialmente la maggioranza dei servizi di archiviazione dei dati in rete (cloud storage service), indipendentemente dal sistema operativo usato, a velocità sorprendente. Utilizza un algoritmo denominato "delta-transfer algorithm", il quale fa in modo che solo i cambiamenti nei dati siano copiati/sincronizzati, evitando di dover trasferire grandi mole di dati.

Chi inizia ad utilizzarlo potrebbe risultare intimidito dal fatto che Rclone non abbia un’interfaccia grafica ufficiale (GUI) semplice da utilizzare, eccetto una sperimentale, semplice e spartana, ed una basata su interfaccia web.

$ rclone rcd –rc-web-gui

In ogni caso, è sufficiente la familiarità con l’utilizzo delle funzionalità base del terminale per poter utilizzare tale applicazione senza eccessive difficoltà. Di seguito viene effettuata una descrizione dei comandi Rclone più utilizzati, comprensiva di esempi esplicativi.

 Contenuti (i links rimandano al contenuto della versione originale)

1 Rclone esempi di configurazioneCome configurare Rclone

2 Rclone esempi di copia - Copiare dati tra servizi di rete

2.1 Usare rclone per copiare un file

2.2 Usare rclone per copiare file multipli

2.3 Usare rclone per copiare un'intera directory/cartella, inclusa la struttura della directory ed i suoi contenuti

2.4 Usare rclone per copiare solo nuovi files

2.5 Forzare rclone a copiare ricorsivamente

3 rclone esempi di sincronizzazione - Sincronizzare directories

3.1 rclone sincronizzazione automatica

3.2 rclone sincronizzazione bidirezionale

3.3 Mostrare i progressi durante una copia/sincronizzazione di lunga durata

4 rclone esempi di montaggio - Usare rclone per montare servizi di archivio di rete come dischi locali

4.1 rclone montaggio su MacOS o Linux

4.2 rclone montaggio su Windows

4.3 Differenza tra montaggio e copia/sincronizzazione con rclone


Rclone esempi di configurazione – Come configurare Rclone

Una volta installato Rclone, il primo comando da impostare è la configurazione. Questo permette di aggiungere collegamenti remoti, e cancellare e modificare quelli esistenti. Tutti i collegamenti remoti sono archiviati nel file di configurazione. Lanciando il comando del file di configurazione, viene descritta la posizione dove si trova il file.

rclone config file

Configuration file is stored at: /home/xxxxxxxxx/.config/rclone/rclone.conf

rclone config è un comando interattivo, che guida l’utente passo per passo su come aggiungere nella configurazione un servizio di storage. Se si lancia il comando, può capitare che venga chiesta la password di accesso.

rclone config

Enter configuration password:

Se ciò avviene, pur non avendo creato ancora alcuna configurazione, vuol dire che esiste già un file config di default creato dall’installazione o da un primo lancio del programma, ad es. tramite la GUI. Essendo un file crittato, il programma lo ha creato utilizzando una password random, visualizzabile nel file di log. Per evitare inutili perdite di tempo nella determinazione di tale password random, utile solo per accedere ad un file criptato ancora non configurato, è sufficiente eliminare il file rclone.conf e lanciare nuovamente il comando $ rclone config ; il programma provvederà a ricreare il file ed a proporre nel menu la possibilità di settare una password, da fare immediatamente al fine di impedire al programma di intervenire nuovamente con password random. Le informazioni all’interno del file di configurazione verranno quindi crittate utilizzando come passphrase la password scelta ed inserita. Ciò sarà valido sia per la configurazione a linea di comando che per l’interfaccia grafica/web. Di seguito la procedura da seguire. (sostituire alle xxxxxx nella path il corretto percorso)

rm /home/xxxxxx/.config/rclone/rclone.conf

rclone config file

Configuration file doesn't exist, but rclone will use this path: /home/xxxxxx/.config/rclone/rclone.conf

rclone config

NOTICE: Config file "/home/xxxxxx/.config/rclone/rclone.conf" not found - using defaults

No remotes found - make a new one

n) New remote

s) Set configuration password

q) Quit config

n/s/q> s


Your configuration is not encrypted.

If you add a password, you will protect your login information to cloud services.

a) Add Password

q) Quit to main menu

a/q> a

Enter NEW configuration password:

password: (inserire la password)

Confirm NEW configuration password:

password: (inserire nuovamente la password)

Password set

Your configuration is encrypted.

c) Change Password

u) Unencrypt configuration

q) Quit to main menu

c/u/q> q

Una volta impostata la password, per creare un primo collegamento remoto dare il comando n.

No remotes found - make a new one

n) New remote

s) Set configuration password

q) Quit config

n/s/q> n

A questo punto è necessario scegliere il nome del collegamento, possibilmente corto (il nome viene digitato per richiamare il servizio) e senza caratteri speciali, così da rendere univoco il riconoscimento (ad es. DanGDrive o BettyDropbox)Verrà proposta una lista consistente di servizi di rete già riconosciuti, e la possibilità di impostare un collegamento locale; dovrà essere inserito il numero corrispondente all’opzione scelta (o il nome del servizio, indicato tra virgolette) seguito da enter, quindi verranno chiesti in sequenza l’user ID e la password per il collegamento al servizio; per evitare problemi, dato che il servizio può essere autenticato anche in un secondo tempo, si possono lasciare i campi vuoti, dando semplicemente enter. Ciò è utile soprattutto per quei servizi che chiedono l’autenticazione tramite API (ad es. GoogleDrive), che, in caso di autenticazione automatica prevedono una preattivazione delle API, ma che in ogni caso non consentono l’accesso perché richiedono una verifica dell’attendibilità delle app di terze parti. Lasciando l’autenticazione vuota, si bypassa il problema. 

E’ possibile che venga richiesto anche il tipo di servizio da adottare (user o enterprise, inserire il numero opportuno; 1 per utente normale) e la locazione se diversa dal default (in assenza di percorsi specifici dare enter).

A questo punto è possibile, ma non ordinariamente necessario, scegliere di impostare parametri avanzati, quali:

- interruzione per il passaggio al caricamento in più parti (default 50 M)

- numero massimo di volte per provare a eseguire il commit di un file in più parti (default 100)

- valore encoder.MultiEncoder (Enter per default

("Slash,BackSlash,Del,Ctl,RightSpace,InvalidUtf8,Dot"))

A questo punto il programma chiede di assicurarsi che l’URL di reindirizzamento sia impostato su "http://127.0.0.1:53682/" nella configurazione personalizzata, e nel caso se usare l’autoconfiguratore, che di norma è la cosa più semplice (digitare Y)

Il passaggio al browser per l’autenticazione dell’accesso completerà la procedura. Completato questo, dare q fino all’uscita del programma di configurazione, o fino al menù principale, dal quale si potrà ripetere la procedura per un altro servizio.A questo punto, il programma è pronto a gestire i files nel servizio impostato.


Rclone esempi di copia 

Copiare dati tra servizi di archiviazione in rete e locali

In questa sezione, verranno analizzate alcune situazioni tipiche di diverso livello di complessità per evidenziare le possibilità offerte dal programma.

Utilizzare rclone per copiare un file

Funzionalità basilare di Rclone: per copiare un file da una posizione ad un’altra utilizzare la seguente sintassi:

rclone copy source:source_path dest:destination_path

source” e “dest” sono i nomi dei servizi in gioco, seguiti dai due punti (da cui si nota subito che il programma consente di gestire file presenti su due cloud diversi, purché attivati). Nel caso in cui una delle due riguardi file locali, la parte source:” e “dest:” deve essere rimossa, inserendo solo la directory completa della locazione del file. In questo modo è possibile copiare file da locale a remoto e viceversa, e tra remoto e remoto (o tra locale e locale, come fa il comando cp).

Ad esempio, supponendo di aver attivato il servizio GoogleDrive denominato MyGDrive, per copiare un file dalla posizione /home/nl/sample.txt entro la cartella /prova situata nella directory principale di GoogleDrive, il comando sarà

rclone -v copy /home/xxxxx/sample.txt MyGDrive:/prova/

L’opzione -v significa verbose, che descrive i dettagli del processo.

Se la cartella di destinazione non esiste, rclone la creerà appositamente.

Utilizzare rclone per copiare file multipli

Copiare più files con nomi simili nella stessa destinazione (si veda rclone filtering documentation page per maggiori informazioni).
Supponiamo di avere 3 files denominati sample.txt, sample_2.txt nella directory corrente, ed il file sample_3.txt in una sottodirectory denominata sub. Il comando che copia tutti e tre i files sarà:

rclone copy . --include "sample*.txt" MyGDrive:/

Se non si vuole che il programma trasferisca anche le subdirectories, limitandosi ai file sample.txt and sample_2.txt, è sufficiente rimuovere / dal filtro, e rclone effettuerà lo scanning solo nella directory corrente

rclone copy . --include "sample*.txt" MyGDrive:/

E’ possibile copiare tutti i files di testo (estensione .txt) con il seguente comando:

rclone copy . --include "*.txt" MyGDrive:/

Note: Si noti che il punto . Indica che il programma lavora nella directory corrente. Per agire su directory diverse, è necessario indicare tale locazione.

Utilizzare rclone per copiare un’intera directory/cartella, inclusi la struttura ed i contenuti

Rclone, di default, effettua un controllo ricorsivo su tutti i files e le subdirectories nella directory sorgente, compresi i files nascosti, e li copia nella directory di destinazione in modo ricorsivo, preservando tutta la struttura ed i contenuti della directory, ma trascurando le directory vuote.

In certi casi, se si vogliono copiare anche le cartelle vuote, basta inserire nel comando l’opzionecreate-empty-src-dirs

rclone copy --create-empty-src-dirs . MyGDrive:/

Si noti che Amazon S3 Bucket non possiede il concetto di directory, per cui non è possibile avere cartelle vuote in questo.

Ci sono casi in cui si potrebbe voler inserire una directory sotto un’altra, senza copiarne il contenuto. Ad es., si supponga di avere la directory dir1 che contiene i due files 1.txt and 2.txt, e che la si voglia inserire entro una directory “prova” nella destinazione, in modo che il risultato sia:
prova
└── dir1
    ├── file1
    └── file2

In questo caso sarà:

rclone copy dir1 MyGDrive:stuff/dir1

Utilizzare rclone per copiare solo nuovi files

E’ possibile utilizzare rclone per copiare solo nuovi files, anche se "nuovi files" può avere vari significati.

Per trasferire solo i files che sono stati creati o modificati in un certo arco di tempo, ad es. negli ultimi due giorni, si può usare l’opzionemax-age

rclone copy --max-age 2d dir1 MyGDrive:prova/dir1

Il periodo di tempo può essere impostato secondo la seguente tabella:

  • ms - Milliseconds

  • s - Seconds

  • m - Minutes

  • h - Hours

  • d - Days

  • w - Weeks

  • M - Months

  • y – Years

Al posto del periodo di tempo può essere inserito un tempo assoluto, secondo uno dei seguenti formati:

  • RFC3339 - eg "2006-01-02T15:04:05Z07:00"

  • ISO8601 Date and time, local timezone - "2006-01-02T15:04:05"

  • ISO8601 Date and time, local timezone - "2006-01-02 15:04:05"

  • ISO8601 Date - "2006-01-02" (YYYY-MM-DD)

Se invece per “nuovi files” si intendono solo i files che non esistono nella directory di destinazione, allora si vuole che i files di identico nome già presenti ma con data di modifica e contenuti diversi non vengano copiati o aggiornati.

In questo caso dovrà essere utilizzata l’opzione --ignore-existing flag.

rclone copy --ignore-existing dir1 MyGDrive:stuff/dir1

Esempi di sincronizzazione con rcloneSincronizzare directories

Il comando da utilizzare è rclone sync

rclone sync source:source_path dest:destination_path

Questo consente di ottenere sorgente e destinazione identici, modificando solo la destinazione. Confronta una lista di files nella sorgente e nella destinazione, e compara gli hashes. Se corrispondono, il file non viene trasferito, altrimenti lo scrive o sovrascrive nella destinazione.

Importante: Poichè la sincronizzazione può causare una perdita di dati, è bene effettuare prima un test con l’opzione --dry-run per vedere esattamente ciò che verrà copiato e cancellato, prima di eseguire il comando esecutivo.

Per vedere in tempo reale ciò che rclone sta eseguendo durante il processo di trasferimento e le statistiche di questo, è possibile aggiungere l’opzione -P (o –progress); è possibile inoltre aggiungere l’opzione -v (o –verbose) per vedere dettagli aggiuntivi su ogni passaggio del processo.

Sicronizzazione automatica

rclone consente di ottenere una sincronizzazione unidirezionale con servizi di archiviazione in rete, agendo in modo simile alle applicazioni client di Google Drive or Mega, ma in modo più efficiente. Per ottenere una sincronizzazione continua, è necessario creare un cronjob che si attivi con una frequenza prestabilita; per farlo è necessario creare un file cloudsync.sh con il seguente contenuto, sostituendo a SOURCE_PATH and REMOTE_PATH i giusti percorsi.

#!/bin/bash
# Get config path from rclone
config=$(rclone config file)
# Remove everything except the path
RCLONE_CONFIG="/${config#*/}"
export RCLONE_CONFIG

# Exit if rclone running
if [[ "$(pidof -x $(basename $0) -o %PPID)" ]]; then exit; fi

# Sync files to the cloud
/usr/bin/rclone sync [SOURCE_PATH] remote:[REMOTE_PATH] 
    --log-file /opt/rclone_upload.log 
    --verbose

Dopo averlo creato, è necessario assegnare al file i permessi di esecuzione dando al terminale

chmod +x ./cloudsync.sh

Infine, va impostato il cron job editando il file di configurazione, dando

crontab -e

ed aggiungendo il cron job creato, se non è stato fatto in precedenza. Si controlli, a questo proposito, How To Set Up A Cron Job In Linux. In questo caso, la linea da aggiungere sarà una cosa del tipo:

*/5 * * * * /home/nl/cloudsync.sh

Sincronizzazione bidirezionale

Per ora, rclone non possiede una soluzione di sincronizzazione bidirezionale che simuli le funzionalità di applicazioni lato client come quella di Dropbox o Google Drive., ma solo effettuare un backup dei files nel servizio remoto. In alternativa, è possibile utilizzare soluzioni di sincronizzazione completa come Insync or Odrive, che vengono fornite con GUI efficienti, buon supporto, ed opzioni di sincronizzazione avanzate molto adatte anche ai principianti. CloudCross, un client di sincronizzazione open source a linea di comando, di non immediata comprensione per i principianti, può essere una buona soluzione a questo problema.

Visualizzazione del progresso di lunghi processi di sincronizzazione

Vi sono situazioni in cui, a causa della mole di dati da gestire, della velocità di connessione e di accesso al server, e di altri fattori, è necessario controllare se il processo è in esecuzione e quanto viene stimata la durata dell’esecuzione; questo può essere ottenuto con l’opzione -P (o –progress)


 

Rclone esempi di montaggio

Utilizzare Rclone per montare spazi di archiviazione di rete come disco locale

Il comando rclone mount permette di montare spazi di archiviazione di rete come se fossero directory locali. Su Linux/macOS si può montare uno spazio remoto come ad es. MyGDrive con una specifica come /path/to/local/mount . Va ricordato che la destinazione DEVE essere una directory ESISTENTE E VUOTA. La sintassi sarà:

rclone mount MyGDrive:remote_file_path /path/to/local/mount

Per montare automaticamente lo spazio remoto ad ogni avvio, è necessario aggiungere il comando come script di startup (ad es. fstab). In più, l’opzione --daemon consentirà a Rclone di funzionare in background, elemento che in questo caso risulterà particolarmente utile.

In alternativa, è possibile aggiungere un cronjob come quello di seguito riportato, che consenta a rclone mount di partire all’avvio

@reboot ( /path/to/rclone mount --<options> <src> <dst> &)&

Rclone mount su Windows

Su Windows è possibile montare uno spazio di archiviazione di rete su una lettera di periferica drive non utilizzata (X: in this example) o su una cartella non esistente.

rclone mount MyGDrive:remote_file_path X:

rclone mount MyGDrive:remote_file_path C:nonexistent_directory

Differenze tra Rclone mount e Rclone sync/copy

I file systems sono costruiti in modo tale da ottenere un’affidabilità pari al 100%, mentre i sistemi di archiviazione di rete sono ancora molto distanti da questo risultato. I comandi sync/copy di rclone affrontano questo problema effettuando molti tentativi. Rclone mount invece non può effettuare tentativi così come non può fare copie locali dei dati presenti negli spazi in rete. Si controlli sul manuale di file caching per trovare soluzioni per ottenere un mount più affidabile.