In un precedente articolo ho trattato il problema del backup dei nostri preziosi files e ho usato come soluzione un sistema condiviso online e uno shell script che utilizza il comando lftp.
Oggigiorno ci sono sistemi di condivisione dei dati molto semplici che ognuno di noi può ritrovarsi in casa (magari senza neppure saperlo!).
Uno di questi è il classico disco esterno collegato al router ADSL via USB.
Tanti di voi potrebbero non avere un router di proprietà (che sicuramente permette di effettuare un collegamento FTP e, pertanto, rende possibile l’utilizzo di lftp) ma hanno semplicemente un router brandizzato fornito dal gestore della linea telefonica.
Questi apparecchi sono solitamente piuttosto blindati (per non dire castrati) e non permettono tanti virtuosismi. Quasi nessuno, ad essere sincero, permette un accesso via ssh e tanti neppure via FTP.
Però - dal momento che sono progettati per condividere i contenuti con diversi dispositivi - facilmente tutti adottano il protocollo di condivisione in rete Samba.
Prima di tutto occorrerà avere un disco rigido collegato allo scatolotto e aver configurato quest’ultimo affinchè condivida una o più cartelle con il protocollo Samba (che potresti trovare abbreviato in SMB).
Io utilizzo sempre il mio storico Western Digital da 2 TB alimentato esternamente.
Iniziamo testando la connessione per capire se le condivisioni che abbiamo impostato dal ridicolo menu di configurazione dello scatolotto sono visibili in rete.
Non essendo praticamente configurabile, lo scatolotto dovrebbe permettervi di accedere con il vostro nome utente Linux e nessuna password, quindi:
smbclient -L <IP vostro router> --user <utente e password>
Mettiamo il caso che il nostro router abbia come indirizzo statico 192.168.1.1 e che il nostro nome utente Linux sia attila (e nessuna password), il comando diventa il seguente:
smbclient -L //192.168.1.1 --user="attila"%""
Premi Invio e dovresti vedere qualcosa di simile:
Unable to initialize messaging context
Sharename Type Comment
--------- ---- -------
<HD_Condiviso>
IPC$ IPC IPC Service (Modem TIM)
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
MODEM TIM Modem TIM
Workgroup Master
--------- -------
WORKGROUP MODEM TIM
Bene! La condivisione Samba funziona! Il disco rigido collegato via USB al router viene condiviso con il nome che qui abbiamo chiamato <HD_condiviso>
Il nome della condivisione puoi facilmente trovarlo anche sfogliando il disco esterno dal tuo file manager preferito.
Portati sulla cartella radice del tuo router e guarda la barra degli indirizzi del file manager. Troverai una stringa simile a questa:
smb://192.168.1.1/HD_Condiviso/
Ora abbiamo tutto ciò che ci serve per effettuare il collegamento vero e proprio.
- Indirizzo di rete del server Samba (il brutto scatolotto): 192.168.1.1
- La radice della condivisione: HD_condiviso
- Il nome utente: attila
- La password: <nessuna>
- La/e cartella/e che vogliamo effettivamente montare: ad es. documenti
Decidiamo dove vogliamo montare la nostra condivisione (ad esempio: /home/attila/samba) e il gioco è fatto.
E invece no!
Ho sudato le leggendarie sette camicie per diverse serate cercando di montare la condivisione senza successo.
Perchè?
Perchè sebbene il router TIM dovrebbe avere un firmware che supporta Samba 2.0 qualcosa non funziona come dovrebbe…
Nei parametri del comando mount.cifs (che serve per agganciare una cartella condivisa con Samba) c’è un’opzione chiamata vers (versione) che obbliga il montaggio della condivisione utilizzando una particolare versione del protocollo Samba.
Dato che avevo letto che il router è aggiornato alla versione Samba 2.0 insistevo a passare al comando di montaggio il parametro vers=2.0 mentre - al contrario - la condivisione viene montata senza colpo ferire usando vers=1.0
La cosa è doppiamente ridicola se pensi che la versione 1.0 è quella utilizzata di default dal comando di montaggio ma… a volte sembra di aver a che fare con il paranormale…
In ogni caso componiamo il comando che ci permetterà di montare la nostra condivisione sul filesystem.
sudo mount.cifs //192.168.1.1/HD_Condiviso/documenti /home/attila/samba -o user=attila,pass=,vers=1.0
Premi Invio e troverai il contenuto di HD_Condiviso/documenti all’interno di /home/attila/samba
Puoi tirare un sospiro di sollievo
Ora dobbiamo sincronizzare i dati sul nostro disco rigido con quelli che si trovano sulla cartella condivisa e per fare questo useremo rsync.
rsync è un comando molto potente e veloce per copiare files da un supporto (anche remoto) ad un altro.
Purtroppo - grazie all’orrendo scatolotto - siamo costretti a montare localmente la cartella condivisa per poterci scrivere sopra… se lo scatolotto permettesse un accesso via ssh avremmo potuto usare rsync direttamente per copiare i files dal nostro PC al disco remoto senza bisogno di nient’altro!
Per un utilizzo elementare di rsync potremmo pensare di usare questo comando:
rsync -vaz <cartella_origine> <cartella_destinazione>
Spiego le opzioni:
- -v - visualizza a schermo diverse informazioni. Utile se volete vedere che cosa sta facendo il vostro comando.
- -a - utilizza la cosiddetta modalità archivio che è la somma delle opzioni -rlptgoD (digitate man rsync se siete curiosi di sapere che cosa esattamente fa ognuna delle opzioni qui sopra)
- -z - indica al programma di comprimere i dati prima di inviarli a destinazione a tutto vantaggio dell’occupazione di banda.
Se la tua cartella di origine contiene files o cartelle da non trasferire puoi inserire nel comando un’opzione per escluderli dal trasferimento.
Per comodità crea un file di testo contenente una riga per ogni file o cartella che non vuoi trasferire e indicalo come argomento con l’opzione —exclude-from. Supponiamo di chiamare questo file rsync.exclude.list
Il comando diventerà quindi il seguente:
rsync -vaz --exclude-from rsync.exclude.list <cartella_origine> <cartella_destinazione>
rsync è un comando molto potente quindi è veramente possibile fare un po’ di tutto.
Alcune opzioni che potrebbero tornarti utili:
- -u - non aggiorna i file che risultano essere più recenti nella cartella di destinazione
- —delete - cancella i files nella cartella di destinazione che non esistono più nella cartella di origine
- -S - se devi trasferire una grossa quantità di file di piccole dimensioni questa opzione gestirà l’operazione più efficacemente
- -W - questa opzione trasferirà invece i files per intero (rsync trasferisce in modo predefinito solo i delta)
- —dry-run - se non ti senti sicuro del comando da lanciare e non vuoi rischiare di distruggere l’intero filesytem - e non sto scherzando - puoi utilizzare questa opzione per simulare ciò che il tuo comando andrà a fare.