rsyncIl comando: rsync -aE --delete ~/Documents/ /Volumes/Backup/Documents/
-E è la metà specifica di macOS, e ometterlo perde in silenzio attributi estesi e resource fork.
-a è la modalità archivio: ricorsiva, e conserva permessi, proprietario, date e link simbolici. È l'opzione che conoscono tutti.-E conserva gli attributi estesi e le resource fork di macOS. Lì stanno i tag del Finder, i flag di quarantena, le icone personalizzate e buona parte dei metadati delle applicazioni. Senza, spariscono, e niente te lo dice.--delete rimuove i file dalla destinazione quando non ci sono più alla fonte. È ciò che rende la copia un mirror, ed è l'opzione su cui riflettere di più.-v per l'output, -n per una prova a vuoto. La prima volta, fai sempre una prova a vuoto di un comando che contiene --delete.~/Documents copia la cartella dentro la destinazione, dandoti /Volumes/Backup/Documents/Documents. ~/Documents/ ne copia il contenuto, che è quasi sempre ciò che intendevi. In un comando che contiene anche --delete, sbagliare elimina tutto il resto che c'era nella destinazione.--exclude per le cose che non vale la pena copiare: --exclude '.DS_Store', --exclude 'node_modules', --exclude 'Library/Caches'.macOS include una versione di rsync adeguata a questo scopo. Se vuoi quella upstream più recente, Homebrew ce l'ha, e su macOS gestisce meglio le ACL.
rsync fa sembrare la destinazione uguale alla fonte. È una copia, e una copia non è una cronologia. Un documento che hai eliminato martedì scorso sparisce dal backup alla prossima esecuzione. Così come la versione buona di un file che hai poi sovrascritto, e tutto ciò che i ransomware hanno raggiunto prima che l'operazione partisse.
Togliere --delete non risolve. Ti dà una destinazione che accumula ogni file che hai mai avuto, sempre con una sola versione di ciascuno, e nessun modo di capire cosa è attuale.
--link-destIl trucco classico è creare una nuova cartella con la data a ogni esecuzione e collegare con hard link i file invariati a quella precedente, così i file identici non costano niente:
DEST=/Volumes/Backup
TODAY=$(date +%F)
rsync -aE --delete \
--link-dest="$DEST/latest" \
~/Documents "$DEST/$TODAY"
ln -snf "$DEST/$TODAY" "$DEST/latest"
Ora ogni cartella con la data sembra un backup completo e solo i file modificati occupano spazio. È più o meno l'idea su cui è costruito Time Machine.
Due avvertenze. Gli hard link fanno sì che le copie non siano indipendenti: la corruzione del blocco sottostante colpisce ogni istantanea che lo condivide. E serve un file system che supporti gli hard link, quindi funziona su un'unità esterna e non dentro la maggior parte delle cartelle cloud.
rsync non cifra niente sul disco. Se la destinazione è una cartella cloud o un'unità che esce dall'edificio, cifra prima di scrivere:
tar -cJf - ~/Documents | openssl enc -aes-256-cbc -pbkdf2 -out /Volumes/Backup/documents.tar.xz.enc
È un unico archivio opaco: niente copie incrementali, niente ripristino di un singolo file senza estrarre tutto, e una sola passphrase tra te e ogni cosa. Questo compromesso conta, ed è il punto in cui molti smettono di fare da sé.
cron esiste ancora su macOS ma la strada supportata è launchd. Un plist in ~/Library/LaunchAgents/ con uno StartCalendarInterval esegue il tuo script ogni giorno. macOS chiederà l'Accesso completo al disco per ciò che lo esegue, perché la lettura di Documenti e Scrivania è protetta.
Qualunque cosa pianifichi, fai in modo che scriva il risultato dove lo vedrai davvero, e controlla che il backup sia recente:
find /Volumes/Backup -type f -newermt '-7 days' | head
Un'operazione silenziosa è il modo in cui si fallisce. Non si ferma con un errore sullo schermo, si ferma di notte quattro mesi fa.
I comandi qui sopra coprono la copia. Ciò che non coprono è ciò che vuoi davvero il giorno in cui qualcosa va storto: versioni che sopravvivono a un'esecuzione del mirror, una cifratura che ti lascia comunque ripristinare un file, una rilettura che controlla ogni pezzo con il suo hash, e qualcosa che ti avvisa quando l'unità non si vede da una settimana.
Ognuna di queste cose è un weekend di script, e poi tocca a te mantenerla. Copy Shelter è la stessa idea con quelle parti già incluse, ed è gratuito per una posizione.
rsync perde i tag del Finder?Perché -a da solo non porta con sé gli attributi estesi su macOS. Aggiungi -E. Se ti servono anche le ACL, usa -A, e valuta la versione di Homebrew, che le gestisce in modo più affidabile di quella di sistema.
Sì, o su una condivisione montata sotto /Volumes o via SSH direttamente sul NAS. Via SSH è più veloce e non dipende dalla presenza del mount, e molti NAS hanno rsync integrato.
sudo?Non per la tua cartella home. Devi però dare l'Accesso completo al disco al Terminale, o a ciò che launchd esegue, prima che macOS gli permetta di leggere Documenti, Scrivania e Download.
--delete è pericoloso?Fa esattamente ciò che hai chiesto, ed è proprio questa la parte pericolosa. La prima volta fai una prova con -n, e assicurati che il percorso di destinazione sia giusto: un errore di battitura con --delete puntato sulla cartella sbagliata elimina i file lì.
Sì, rsync serve proprio a questo. Rieseguilo e trasferisce solo ciò che manca o è cambiato. Aggiungi --partial così un file grande trasferito a metà viene conservato e ripreso.
Prossimo: come verificare che la copia sia davvero leggibile.