domenica 25 aprile 2021

rsync

Si, lo so, fare backup locali da quando ci sono la nuvola disponibile ed i software di sincronizzazione on line non va molto più di moda, ma io sono all'antica, e mi piace avere un buon backup locale su un HD esterno.

Si, ci sono anche i NAS in Raid, è vero, ma se non aggiorni continuamente l'hardware (non il software, proprio l'hardware) ti ritrovi con dei sistemi pazzescamente lenti, e quando si parla di controllo di Terabyte di dati la cosa non è piacevole, specie quando si fanno spesso cambiamenti sostanziali e significativi. Certo, con l'automatismo te ne puoi anche dimenticare, ma se dopo una vita di attesa il software è ancora lì che lavora, beh, qualquadra non cosa.

Quindi, un paio di HDD esterni belli capienti, ed ecco che i backup 1 e 2 (perché vorrete avere 2 backup locali, no? No? Ahi, ahi ahi...) , anche se fatti a manina, ti fanno dormire un po' più tranquillo. E proprio per questo, ho tradotto una delle tante guide che ci sono in rete su rsync, che resta comunque un ottimo software a linea di comando (lasciate perdere la GUI, la linea è molto più divertente ed istruttiva) per ottenere backup rapidi ed efficienti. Per chi invece preferisce l'interfaccia grafica, anziché quelle per rsync, consiglio l'ottimo Krusader e le sue molte funzionalità, tra cui anche la sincronizzazione ricorsiva di cartelle.

Ah, rsync ha anche funzionalità per il backup remoto su spazi di rete, ma sono abbastanza limitate (e per quello è stato creato rclone, di cui parlerò in un altro post). Di seguito la guida, molto basilare, che, come già fatto per altre cose, metto in rete per potermela ritrovare quando mi serve, su qualunque device stia lavorando.

Buona lettura

rsync

Come utilizzarlo per sincronizzare cartelle locali e remote

By Justin Ellingwood Last Validated on November 18, 2020 Originally Published on September 10, 2013

Introduzione

rsync, che significa “remote sync” o “sincro remoto”, è un insieme di strumenti (tool) a linea di comando per la sincronizzazione di file sia locale che remota; utilizza un algoritmo che minimizza la quantità di dati copiati muovendo soltanto le porzioni di file che sono state modificate. Grazie alla sua ubiquità su Linux e sistemi “Unix-like” e la sua popolarità come strumento basato su script di sistema, è incluso tra le impostazioni predefinite nella maggior parte di distribuzioni Linux. Sintassi di base La sintassi di base di rsync è davvero semplice, ed agisce in modo simile a ssh, scp, e cp. rsync.

A titolo di esempio, vengono create due cartelle ed alcuni files con i seguenti comandi:

cd ~

mkdir dir1

mkdir dir2

touch dir1/file{1..100}

Ora esiste una cartella denominata dir1 contenente 100 files vuoti.
Per visualizzarne il contenuto si digita:

ls dir1

Output
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

Esiste anche una cartella vuota denominata dir2.
Per sincronizzare il contenuto della cartella dir1 nella cartella dir2 entro lo stesso sistema, si digita:

rsync -r dir1/ dir2

dove l’opzione “-r“ significa “ricorsivamente”, che è necessaria per sincronizzare il contenuto delle cartelle, compreso quelle nidificate.
In alternativa è possibile utilizzare il parametro “-a” , che è un parametro combinato; significa “archivio” e sincronizza ricorsivamente, preservando links simbolici, file speciali e di periferiche, tempi di modifica, gruppi, proprietari e permessi.
E’ più comunemente utilizzato rispetto a -r , ed è ordinariamente ciò che probabilmente serve a chi vuole utilizzare rsync.

rsync -a dir1/ dir2

Nota importante
Si noti che è stata posta una barra terminale obliqua (“slash”) alla fine del primo argomento del comando appena citato (cfr dir1/ )
Il significato di tale slash è “il contenuto dell’argomento”, in questo caso della cartella dir1 ; così facendo, il contenuto di dir1 viene sincronizzato entro dir2 .
In caso la slash non fosse stata posta ( dir1 ) , allora la stessa cartella dir1 sarebbe stata sincronizzata entro dir2 , creando una gerarchia del tipo:
~/dir2/dir1/[files]

E’ importante ricontrollare sempre gli argomenti prima di eseguire un comando rsync. Esiste un metodo che permette di prevenire gli errori, ed è quello di inserire l’opzione “-n” oppure “–dry-run”.

L’opzione “-v”  (verbose, cioè descrittiva) è necessaria per ottenere un output descrittivo delle operazioni compiute:

rsync -anv dir1/ dir2

Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .

Se si compara questo output con quello che si ottiene senza la slash al termine del primo argomento si ha:

rsync -anv dir1 dir2

Output
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .

Si può qui vedere che è stata trasferita la cartella stessa, e non solo i files contenuti, creando una sottogerarchia.

Come utilizzare rsync per sincronizzare con un sistema remoto
Sincronizzare con un sistema remoto è semplice se si ha accesso SSH alla macchina remota e rsync installato su entrambe. Ci sono due possibilità: si può effettuare l’accesso direttamente mediante il comando rsync con opportuni parametri, oppure effettuare preliminarmente l’accesso via SSH e poi inviare i comandi rsync.
In entrambi i casi, una volta effettuato l’accesso SSH tra le due macchine, è possibile sincronizzare la cartella dir1 dal computer locale a quello remoto effettuando un’operazione di “spinta” (“push”), poiché spinge una directory dal sistema locale a quello remoto, usando la seguente sintassi (notare che in questo caso la mancanza della slash finale al primo argomento è voluta, perché vogliamo trasferire direttamente la directory):

Senza accesso preliminare
rsync -avzhe ssh local_directory username@remote_host:destination_directory
   
ad es:
rsync -avzhe ssh ~/dir1/ root@192.168.0.100:/root/dir1

Con accesso preliminare
rsync -avzh ~/dir1 username@remote_host:destination_directory

ad es:
rsync -avzh ~/dir1/ root@192.168.0.100:/root/dir1

L’operazione opposta, cioè sincronizzare una directory remota con il sistema locale, è chiamata di “tiro” (“pull”). Se la directory dir1 si trova nel sistema remoto anziché in quello locale, la sintassi sarà:

Senza accesso preliminare
rsync -avzhe ssh username@remote_host:destination_directory/ local_directory
   
ad es:
rsync -avzhe ssh root@192.168.0.100:/root/dir1/ ~/dir1

Con accesso preliminare
rsync -avzh username@remote_host:destination_directory/  local_directory

ad es:
rsync -avzh  root@192.168.0.100:/root/dir1/ ~/dir1

Come cp ed altri tools similari, la sorgente è sempre il primo argomento, e la destinazione è sempre il secondo.

Opzioni utili di rsync
rsync ha a disposizione molte opzioni per modificare il suo comportamento di base, e le opzioni viste in precedenza ne sono un esempio tra le più utilizzate.
Se si vogliono trasferire files non compressi, come files di testo, è possibile ridurre il carico di rete nel trasferimento aggiungendo la compressione mediante l’opzione “-z”:

rsync -az source destination

L’opzione “-P” è particolarmente utile, poiché unisce l’opzione “-progress”, che mostra una barra progressiva durante il trasferimento, e l’opzione “--partial”, che consente di riprendere trasferimenti interrotti:

rsync -azP source destination

Output
sending incremental file list
./
file1
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file100
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)
file11
           0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)
. . .

Se si da nuovamente il comando, si otterrà un output breve, perché non sono stati fatti cambiamenti. Questo dimostra la capacità di rsync di utilizzare la data ed ora di modifica per determinare, fra due files, se sono stati effettuati dei cambiamenti:

rsync -azP source destination

Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00


E’ possibile aggiornare la data ed ora di modifica di alcuni files, e verificare che rsync, in modo intelligente, copia solo i files modificati:

touch dir1/file{1..10}

rsync -azP source destination

Output
sending incremental file list
file1
            0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
            0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file2
            0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=87/101)
file3
            0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=76/101)
. . .

L’opzione -u o --update permette a rsync di tralasciare files che sono presenti già aggiornati nella directory di destinazione

rsync -azuP source destination

Al fine di tenere due directory davvero in sincronia, è necessario cancellare files dalla directory di destinazione, se questi sono stati rimossi dalla directory sorgente. Come impostazione di base, rsync non cancella nulla nella directory di destinazione.
E’ possibile modificare questo aspetto con l’opzione “--delete”. Prima di utilizzarla, è bene utilizzare l’opzione --dry-run per verificare quali cambiamenti verranno apportati e prevenire la perdita di dati:

rsync -a --delete source destination

Se si vuole escludere alcuni files o cartelle presenti all’interno della directory che si sta sincronizzando, lo si può fare specificandoli in una lista, separata da virgole, descritta con l’opzione “--exclude=”:

rsync -a --exclude=pattern_to_exclude source destination

Se è possibile specificare un percorso da escludere, è anche possibile ignorare tale esclusione per files che appartengono ad un percorso differente utilizzando l’opzione “--include=”.

rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

Per ultima, l’opzione “--backup” può essere utilizzata per archiviare il backup di files importanti, in congiunzione con l’opzione “--backup-dir”, che specifica la directory dove il files di backup devono essere archiviati.

rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

Conclusioni
rsync può semplificare trasferimenti di file attraverso connessioni di rete ed aggiungere solidità a sincronizzazioni tra directory locali. La sua flessibilità la rende un’ottima soluzione per molte operazioni di differente livello di complessità.
Un’adeguata padronanza di rsync consente di progettare complesse operazioni di backup ed ottenere un controllo di elevata precisione su ciò che viene trasferito e come.


Riassunto delle opzioni principali

(N.B. come si nota, le opzioni gestite da una sola lettera vanno precedute da un unico segno meno, mentre le opzioni verbali (una o più parole separate da un segno meno) vanno precedute da un DOPPIO segno meno.)

-r : ricorsivo, necessaria per sincronizzare il contenuto delle cartelle, compreso quelle nidificate
-a : archivio, parametro combinato; sincronizza ricorsivamente, preservando links simbolici, file speciali e di periferiche, tempi di modifica, gruppi, proprietari e permessi.
-n : oppure –dry-run, agisci senza fare; mostra le operazioni senza eseguirle realmente
-v : verbose, cioè descrittivo
-z : compressione, comprime i file prima di effettuare la transazione
-u : oppure –update, aggiornamento;tralascia i files che sono presenti già aggiornati nella directory di destinazione
--progress : progressione; consente il controllo del progresso del trasferimento, mostrando i files trasferiti ed il tempo restante al completamento dell’operazione.
--partial : parziale; permette di riprendere sincronizzazioni interrotte
-P : progressione+parziale; unisce l’opzione “-progress” con l’opzione “--partial”
--delete : cancellazione; cancella files dalla directory di destinazione (di default rsync non lo fa) (conviene eseguire prima --dry-run)
--exclude=lista directory separata da virgole; esclusione; esclude alcuni files o cartelle presenti all’interno della directory che si sta sincronizzando
--include=lista directory separata da virgole; inclusione; include alcuni files o cartelle escluse o presenti all’esterno della directory che si sta sincronizzando
--backup : backup di files importanti, in congiunzione con l’opzione –backup-dir , che specifica la directory dove i files di backup devono essere archiviati.

–max-size=’200k’ : dimensione massima dei file da trasferire; consente di stabilire un limite dimensionale ad ogni file trasferito, non trasferendo file che superino tale soglia (nell’esempio 200 kb)
--remove-source-files : rimuove automaticamente al termine del trasferimento i file SORGENTE (!!!) trasferiti
--bwlimit=100 : limite di banda da utilizzare; utilizzabile durante le operazioni di trasferimento files (nell’esempio 100 bytes/sec)
-h : human-readable, intelligibile dall'uomo; mostra gli output numerici in formato leggibile

Comando standard con verifica senza scrittura

rsync -anvzuP -–delete source/ destination

Comando finale dopo verifica

rsync -avzuP –-delete source/ destination

venerdì 3 febbraio 2012

nVidia personal Xperience

Mi è capitato recentemente di scrivere questo post nella lista di supporto di ALID, l'associazione per le libertà informatiche e digitali di Genova di cui mi onoro far parte a livello di socio consigliere del Direttivo.
Poichè può essere utile anche a chi capita da queste parti (lunga vita e prosperità a te, o internauta ) lo posto anche qui.
Nulla di trascendentale, solo un po' di outing sulla mia personalissima -positiva- esperienza con Fedora e le schede grafiche nVidia.
Fedora, all'atto dell'installazione del S.O., dopo il detecting della scheda, installa di default dal repositorio base (cioè dal CD/DVD di installazione) il xorg-x11-drv-nouveau attualmente stabile e giunto alla versione 0.0.16-24.20110324git8378443 per la release 15 e 0.0.16-27.20110720gitb806e3f per la 16; sempre nel repo base si trova il nvclock (0.8-0.11) utility per l'overclocking della scheda.

Per ciò che riguarda il driver proprietario, da quando sono stati riuniti i repository Dribble, Freshrpms e Livna in RPMFusion free e non-free (2007) con i relativi repo updates, la comunità Fedora, nel non-free + updates, mette a disposizione per l'installazione:
  • il driver proprietario xorg-x11-drv-nvidia-173xx (173.14.31) (presente solo fino alla fc15) e valido per la serie Geforce 5 e similari, o più vecchie, con la relativa libreria xorg-x11-drv-nvidia-173xx-libs
  • il driver proprietario xorg-x11-drv-nvidia (280.13.1 per la fc15 e 290.10.1 per la fc16) entrambi validi per la serie Geforce 6 o più recenti, con la relativa libreria xorg-x11-drv-nvidia (analoga in versione)
  • il pacchetto nvidia-xconfig (1.0-9 fc15; 1.0-11 fc16) (x configuration file editor)
  • il pacchetto nvidia-settings (1.0-11 fc15; 1.0-13 fc16), tool per la configurazione del driver proprietario
  • la libreria libXNVCtrl (169.12.5 fc15-16) che fornisce le API NV-CONTROL per la comunicazione con il driver proprietario
  • il modulo nvidia adatto al kernel in uso: ad es. per il kernel 3.2.2-1.fc16.x86_64 (attualmente l'ultimo in rilascio) è presente, e deve essere installato, il modulo kmod-nvidia-3.2.2-1.fc16.x86_64
Fedora mantiene in vita, cioè aggiorna, una release per ca 18 mesi, e fa uscire una nuova release ogni sei mesi. Poichè nell'arco di vita di una release si hanno mediamente ca 6-7 aggiornamenti di kernel, e poichè ad ogni rilascio di nuovo kernel la scheda ha bisogno che sia installato il relativo modulo kernel corrispondente, è necessario sia installato il pacchetto che mantiene aggiornato il modulo, e cioè il kmod-nvidia o il più consigliato akmod-nvidia, del tipo correlato al driver installato (173xx o 280 o 290).

Per mia esperienza personale, sia i drivers proprietari che i nouveau si sono mostrati sempre molto stabili (li ho verificati su molte piattaforme e con vari modelli di nVidia, fra cui la mitica Geforce 7600 256, la 8600 GT 512, la GTX 260 2gb, la Quadro, e tante altre) ma mostrano fra loro una palese reciproca antipatia.

Un guru di Fedora che seguo molto su Fedoraforum, tale Leigh123Linux (avete presente il classico tipo che ti fa inc****re perchè praticamente non sbaglia mai? beh, è lui...) , anche conosciuto come DNMouse ed autore di Autoplus per l'installazione di molte features interessanti, redige sistematicamente una guida per la corretta disinstallazione dei nouveau e relativa installazione dei driver proprietari, che a mio parere va seguita pedestremente e senza interpretazioni personali, pena il blinking del cursore in init 3 al boot (che per noi niubbi è l'init del crash del server X     ^__^     )

Qui le istruzioni per le release più recenti
Pochi passaggi semplici (una volta erano più complessi) per un'installazione indolore.


I driver proprietari sono nettamente, e direi ovviamente, più performanti, quindi, a prescindere da discorsi di principio (open source o meno) sono da consigliare per chi vuole avere prestazioni adeguate ad un utilizzo che richieda maggiore stress (e magari riconoscimento completo delle features della scheda).

Sotto il profilo delle problematiche incontrate, quelle degne di nota a mio parere sono:
  • a volte il modulo kernel nvidia viene messo nel repositorio con un po' di ritardo rispetto all'aggiornamento del kernel vero e proprio; in questo caso, se non si ha un kernel precedente già munito di kmod, o si disinstalla il proprietario e si reinstalla il nouveau, o si attende fiduciosi ^__^  ;
  • instabilità dovuta ad errata installazione del driver proprietario (inadeguato rispetto alla scheda presente);
  • instabilità dovuta alla errata od inadeguata disinstallazione del nouveau. NB sconsiglio di perdere tempo a settare l' Xorg.conf a manina: meglio disinstallare tutti i driver grafici da linea di comando ed installarne uno per volta, disinstallandolo e riavviando se qualcosa non va;
  • problematiche hardware (più frequenti di quanto si pensi), ed in particolare:
    • schede non perfettamente fissate nella loro sede nei PC desktop, che ad un certo punto si muovono quanto basta da fare cattivo contatto con i pin dello slot;
    • LA POLVERE, davvero micidiale, soprattutto con schede attive (cioè con ventole); una buona pulizia sistematica, meglio se con soffiatura a pressione ed aspirazione, dell'interno del PC ed in particolare del device in questione (e questo vale anche per i notebook) spesso risolve situazioni apparentemente inestricabili;
    • l'alimentatore invecchiato, magari pieno di polvere, che non eroga più l'energia sufficiente (la scheda grafica è il componente che consuma più energia in assoluto nel pc);
    • l'alimentatore che diventa inadeguato in potenza in caso di upgrade della scheda.
Beh, è un buon inizio. Se avete consigli su come irrobustire il post non fatevi problemi.
Buona nVidia  :-)