rsyncHet commando: rsync -aE --delete ~/Documents/ /Volumes/Backup/Documents/
-E is de macOS-specifieke helft, en zonder deze optie verlies je stilletjes uitgebreide kenmerken en resource forks.
-a is archiefmodus: recursief, en rechten, eigenaarschap, tijdstempels en symbolische links behouden. Het is de optie die iedereen kent.-E behoudt uitgebreide kenmerken en resource forks van macOS. Finder-tags, quarantainemarkeringen, eigen symbolen en veel metadata van apps staan daar. Zonder deze optie zijn ze weg, en niets vertelt het je.--delete verwijdert bestanden van de bestemming zodra ze bij de bron weg zijn. Dat maakt de kopie een spiegel, en het is de optie waar je het best over nadenkt.-v voor uitvoer, -n voor een proefrun. Doe met een commando waar --delete in staat de eerste keer altijd een proefrun.~/Documents kopieert de map in de bestemming, en dan krijg je /Volumes/Backup/Documents/Documents. ~/Documents/ kopieert de inhoud, en dat is bijna altijd wat je bedoelde. In een commando dat ook --delete bevat, verwijdert een fout hier alles wat er verder in de bestemming stond.--exclude voor dingen die het kopiëren niet waard zijn: --exclude '.DS_Store', --exclude 'node_modules', --exclude 'Library/Caches'.macOS levert een versie van rsync mee die hiervoor volstaat. Wil je de nieuwere upstreamversie, dan heeft Homebrew die, en die gaat op macOS beter om met ACL's.
rsync laat de bestemming eruitzien als de bron. Dat is een kopie, en een kopie is geen geschiedenis. Een document dat je vorige dinsdag verwijderde, is bij de volgende run uit de backup weg. Net als de goede versie van een bestand dat je sindsdien hebt overschreven, en alles waar ransomware bij kwam voordat de taak draaide.
--delete weglaten lost dit niet op. Dan krijg je een bestemming die elk bestand verzamelt dat je ooit had, nog steeds met precies één versie van elk, en geen manier om te zien wat actueel is.
--link-destDe standaardtruc is bij elke run een nieuwe map met datum maken en ongewijzigde bestanden met harde links aan de vorige te koppelen, zodat identieke bestanden niets kosten:
DEST=/Volumes/Backup
TODAY=$(date +%F)
rsync -aE --delete \
--link-dest="$DEST/latest" \
~/Documents "$DEST/$TODAY"
ln -snf "$DEST/$TODAY" "$DEST/latest"
Nu ziet elke map met datum eruit als een volledige backup en nemen alleen de gewijzigde bestanden ruimte in. Dit is ongeveer het idee waarop Time Machine is gebouwd.
Twee kanttekeningen. Harde links betekenen dat de kopieën niet onafhankelijk zijn: beschadiging in het onderliggende blok raakt elke snapshot die het deelt. En het vereist een bestandssysteem met ondersteuning voor harde links, dus het werkt op een externe schijf en niet in de meeste cloudmappen.
rsync versleutelt niets in opslag. Is de bestemming een cloudmap of een schijf die het huis verlaat, versleutel dan voordat je schrijft:
tar -cJf - ~/Documents | openssl enc -aes-256-cbc -pbkdf2 -out /Volumes/Backup/documents.tar.xz.enc
Dat is één ondoorzichtig archief: geen incrementeel kopiëren, geen los bestand herstellen zonder alles uit te pakken, en één wachtwoordzin tussen jou en alles. Die afweging telt, en op dat punt stoppen de meeste mensen met zelf knutselen.
cron bestaat nog op macOS, maar launchd is de ondersteunde route. Een plist in ~/Library/LaunchAgents/ met een StartCalendarInterval draait je script dagelijks. macOS vraagt om Volledige schijftoegang voor wat het ook draait, want het lezen van Documenten en Bureaublad is beschermd.
Wat je ook plant, laat het resultaat ergens wegschrijven waar je het echt ziet, en controleer of de backup recent is:
find /Volumes/Backup -type f -newermt '-7 days' | head
Een stille taak is de manier waarop het misgaat. Hij stopt niet met een foutmelding op je scherm, hij stopt vier maanden geleden ergens 's nachts.
De commando's hierboven dekken het kopiëren. Wat ze niet dekken, is wat je echt wilt op de dag dat er iets misgaat: versies die een spiegelrun overleven, versleuteling waarmee je nog steeds één bestand kunt terugzetten, teruglezen dat elk stuk met zijn hash controleert, en iets dat je vertelt wanneer de schijf een week niet is gezien.
Elk daarvan is een weekend scripten, en daarna moet jij het onderhouden. Copy Shelter is hetzelfde idee met die onderdelen ingebouwd, en het is gratis voor één locatie.
rsync-kopie Finder-tags?Omdat -a alleen op macOS geen uitgebreide kenmerken meeneemt. Voeg -E toe. Heb je ook ACL's nodig, gebruik dan -A, en overweeg de Homebrew-versie, die ze betrouwbaarder verwerkt dan die van het systeem.
Ja, naar een gekoppelde share onder /Volumes of via SSH naar de NAS zelf. Via SSH is sneller en hangt niet af van een aanwezige koppeling, en veel NAS-apparaten hebben rsync ingebouwd.
sudo nodig?Niet voor je eigen thuismap. Je moet Terminal, of wat launchd ook draait, wel Volledige schijftoegang geven voordat macOS het Documenten, Bureaublad en Downloads laat lezen.
--delete gevaarlijk?Het doet precies wat je vraagt, en dat is het gevaarlijke. Doe de eerste keer een proefrun met -n, en controleer of het bestemmingspad klopt: een typfout met --delete gericht op de verkeerde map verwijdert daar bestanden.
Ja, daar is rsync voor. Draai het opnieuw en het brengt alleen over wat ontbreekt of is veranderd. Voeg --partial toe zodat een half overgezet groot bestand wordt bewaard en hervat.
Volgende: controleren of de kopie echt leesbaar is.