A proposito dei dischi di backup

e del fatto che non debbano restare collegati permanentemente...


Dopo la pubblicazione dell’articolo precedente, RansomWare e backup, diversi utenti Mac mi hanno posto un problema. Vi riporto una delle mail che mi è arrivata a questo proposito:

Ciao, ho letto con attenzione il tuo ultimo articolo della mailing list, a proposito dei backup e dei problemi derivanti dal lasciare sempre connessi i dischi su cui facciamo i salvataggi.

So che tu alterni Linux a Mac come sistemi di utilizzo, e visto che io uso solo Mac — Big Sur su processore ARM, nella fattispecie— allora volevo chiederti una cosa: su Mac, come ben sai, esiste un sistema di backuping che fa parte del sistema operativo: Time Machine —ho messo il link per chi non usa Mac, almeno si fanno un’idea di cosa parliamo se dovessi rispondermi direttamente nella malingilist—

Ho cercato nella documentazione, nei forum ed in giro per tutta la rete che conosco, ma non ho trovato nulla in merito: come fare ad usare l’app di backup di Mac, senza però tenere i dischi sempre collegati? Ammetto che non ho trovato soluzione al mio dubbio.

La Domanda:

Visto che TimeMachine funziona molto bene, e cosa più importante permette di fare dei Restore direttamente dai dischi usati per i backup, non vorrei essere costretto a cambiare software, per proteggere le mie copie di sicurezza da un’eventuale infezione da Ransomware.

Che tu sappia esiste un modo, o meglio conosci perché immagino che esista, di utilizzare Time Machine senza tenere collegati, o come indichi tu montati, i dischi permanentemente?

Mi basta anche un link a qualche documento che spieghi come fare.

Grazie mille e, per quanto riguarda gli articoli tecnici della tua mailingilist, continua a produrne, che sicuramente, oltre a me, molti li trovano interessanti e facili da seguire.

Lorenzo G.

Beh caro Lorenzo, la stessa domanda me l’hanno fatta in diversi utilizzatori dell’accoppiata Mac + Time Machine. Non so, sinceramente non ho nemmeno cercato, se esista una soluzione già pronta: venendo da Linux tendo a cercarmi delle soluzioni da me, invece che cercarne di altri già pronte.

Così, man tmutil alla mano e con le mie conoscenze basiche, della programmazione in bash, ho creato uno script per poter ottenere quello che chiedi.

Praticamente lo script fa queste poche, ma essenziali, cose.

  1. Verifica, via diskutil, se i dischi del backup set siano già montati o meno, se non lo sono, li monta;

  2. esegue il backup, via tmutil, usando due parametri specifici per questa necessità:

    • --block

    • --rotation

  3. smonta il/i disco/chi di backup

  4. esce dallo script.

Potete scaricare il sorgente dello script nel mio git a questo link.

Un po’ di chiarimenti. Per potere usare lo script dovete prima personalizzarlo con i vostri dati.

Chi usa Time Machine, sa che può fare il backup su un singolo disco, e credo ahimè sia la soluzione maggiormente utilizzata, oppure su diversi supporti esterni che vengono utilizzati a cascata, e a rotazione.

A cascata intendo nell’ordine d’inserimento dei device da utilizzare specificati durante la configurazione di Time Machine.

A rotazione intendo che Time Machine, una volta configurato, o aggiornata la sua configurazione aggiungendo, magari in un secondo tempo, un disco aggiuntivo, continuerà a far ruotare il set dal primo disco registrato all’ultimo.

Mi spiego: se ho due dischi usati per il backup da Time Machine, per esempio Disco01 e Disco02, Time Machine selezionerà automaticamente il disco successivo nella lista dischi registrati, per il backup successivo. Praticamente il programma ricorda quale disco ha usato per ultimo, e quindi, al nuovo backup, userà quello successivo nel backup set.

Quindi con un set di dischi per backup composto da Disco01 e Disco02 Time Machine farà:

  1. il backup delle 8,00 sul Disco01

  2. successivamente quello delle 9,00 sul Disco02

  3. e quello delle 10,00 di nuovo sul Disco01

  4. e così via a rotazione.

In questo modo Time Machine si garantisce che il carico dei backup sia equamente suddiviso sui vari dischi componente il set di backup. Ovvio che se usate solo un device per il backup, userà sempre e solo quello.

Come ottenere i valori delle variabili Disc0X e Device0X? Più facile a farsi che a dirsi :)

  1. Fate in modo che il/i vostro/i device siamo configurati in Time Machine e montati regolarmente;

  2. per ogni disco otterrete le informazioni da terminale, nel seguente modo:

  3. ls -la /Volumes (Otterrete il nome del disco montato e lo assegnerete alla variabile Disco01);

  4. diskutil info /Volumes/Disco01 | grep UID (otterrete il codice UID della partizione in uso, e lo assegnerete alla variabile corrispondente Device01 nello script).

  5. Ripetere i punti 3 e 4 per il numero di dischi che utilizzate per il vostro set di backup, nel mio caso due dischi

Aggiornati i valori delle variabili in base ai vostri dischi, rendete eseguibile il file tramite il comando chmod u+x EseguiBackup (o come lo avete nominato voi).

Se avete messo il file in una delle cartelle presenti nella variabile PATH, per eseguire il comando basterà lanciare il comando da terminale con EseguiBackup.

Se avete messo il file nella vostra cartella HOME allora per eseguirlo lanciate da terminale il seguente comando: $HOME/EseguiBackup

Lo script inizialmente non presentava alcun messaggio durante l’esecuzione, ma ho pensato di fare cosa utile permettere una versione che dia messaggi per spiegare cosa stia facendo. Se lanciate il comando da solo esso verrà eseguito in silent mode ossia non darà alcun messaggio salvo in caso di errore/i. Se aggiungerete un parametro all’avvio dello script allora sarà eseguito in verbose mode ossia con messaggi che specificano cosa sta facendo lo script passo, passo.

Se lancio EseguiBackup senza parametri ottengo solo:

EseguiBackup 

Total copied: 133.33 MB (139804960 bytes)
Avg speed:    199.03 MB/min (3478224 bytes/sec)

Mentre se lancio il comando con un parametro qualsiasi, può essere un carattere, un numero una parola, quello che vi pare, per esempio EseguiBackup 1, otterrò:

/Volumes/1st Time Capsule/ non montato: provvedo a montarlo...

/Volumes/2nd Time Capsule/ non montato: provvedo a montarlo...

Eseguo backup...
Total copied: 125.14 MB (131223552 bytes)
Avg speed:    166.14 MB/min (2903585 bytes/sec)

Smonto disco /Volumes/1st Time Capsule/ ...
Volume 1st Time Capsule on disk9s2 force-unmounted

Smonto disco /Volumes/2nd Time Capsule/
Volume 2nd Time Capsule on disk6s2 force-unmounted
Backup terminato !!

Come si può evincere i miei due dischi di backup, in questo esempio li ho chiamati:

  • 1st Time Capsule

  • 2nd Time Capsule

Ovviamente potete chiamare i dischi come più preferite: questo è solo un esempio per restare sincronizzati con lo script che ho reso disponibile.

Quindi, riepilogando:

  1. Scaricate lo script da qui;

  2. modificatelo assegnando correttamente i valori delle costanti Disco0X e Device0X;

  3. rendete eseguibile il file con il comando chomod u+x NomeCheAveteDatoAlFile

  4. eseguitelo.

e buoni backup!!

J.C.


NOTE

  1. Nel pannello Preferenze -> Time Machine il flag Backup automatico DEVE essere disabilitato. Questo genere di backup va eseguito manualmente ogni quanto crediate serva. Se attivate il flag di Backup automatico, Time Machine pretenderà che i dischi siano già montati, rientrando così nel rischio di cui all’articolo che avevo scritto qualche giorno fa!!

  2. Il set di variabili Disco01 e corrispondente Device01 deve essere ripetuto per il numero di volte corrispondente ai dischi usati come set di backup. Quindi se usate un solo disco, la definizione di Disco01=”” e Device01=”” sarà solo una. Se avete tre dischi allora avrete Disco01=””, Disco02=”” e Disco03=””, con i relativi Device01=””, Device02=”” e Device03=””.
    contemporaneamente la parte di codice:

    if [ -d "$Disco01" ]; then

    if [ $# -gt 0 ]; then

    echo "Il volume di backup $Disco01 è già montato!!!"

    fi

    else

    if [ $# -gt 0 ]; then

    echo "$Disco01 non montato: provvedo a montarlo..."

    fi

    /usr/sbin/diskutil quiet mount "$Device01"

    fi

    Dovrà essere ripetuto tante volte quanto saranno il numero dei dischi.
    Altrettanto vale per la parte di codice che si occupa dello smontaggio dei dischi:

    if [ $# -gt 0 ]; then

    echo "Smonto disco $Disco01 ..."

    fi

    /usr/sbin/diskutil unmount force "$Device01»

    Si lo so avrei potuto creare lo script con un oggetto tipo matrice, ma ho volutamente lasciato le cose il più semplici possibili così che chiunque possa metterci mani per configuralo in base alle proprie necessità.

  3. Nel caso i dischi siano già montati, tutti o solo alcuni, lo script lo rileverà e si comporterà di conseguenza. Quindi se sono già montati li usa, se non sono montati, li monta lo script da sé.

  4. A fine backup, tutto il set di dischi backup configurati nello script, saranno smontati.

  5. Se dovete interrompere il backup durante la sua esecuzione, non usate il CRTL-C classico che si usa per interrompere uno script: non funzionerebbe; per interrompere un backup, in corso, ci sono le seguenti possibilità:

    1. aprire un altro tab del terminale, ed eseguire il comando tmutil stopbackup Il sistema operativo concluderà correttamente il backup in corso al momento del comando, permettendo così allo script di terminare, correttamente il backup, ossia smontando i dischi del set di backup

    2. Se avete l’icona di Time Machine attiva, nella barra superiore, cliccateci sopra, e poi cliccate su Ignora questo Backup. L’effetto sarà lo stesso del punto 1

    3. Aprite Preferenze di sistema -> Time Machine vedrete nel pannello uno dei dischi con una barra di progressione in esecuzione: alla sua destra che un piccolo pausante tondo con una X; cliccateci sopra e otterrete lo stesso effetto dei punti 1 o 2.

  6. Se volete lanciare il comando direttamente dal Finder, con un doppio click, allora dovete salvare il file con l’estensione .command: quindi il file non avrà più nome EseguiBackup, ma EseguiBackup.command Questo si rende necessario per via di come è stato creata l’applicazinoe Finder, ossia il file manager. Se il file non ha estensione .command, sebbene lo script abbia i permessi di esecuzione, e sia scritto correttamente, non verrà eseguito. Una scelta degli sviluppatori di casa Apple, non mia :)

Credo sia tutto, buon lavoro!!

Potete sempre scrivermi usando l’indirizzo della mailing list, ossia questo.

JC