rsyncKommandot: rsync -aE --delete ~/Documents/ /Volumes/Backup/Documents/
-E är den macOS-specifika halvan, och utan den förloras utökade attribut och resursklykor i tysthet.
-a är arkivläge: rekursivt, och bevarar behörigheter, ägarskap, tidsstämplar och symboliska länkar. Det är flaggan alla känner till.-E bevarar utökade attribut och resursklykor i macOS. Finder-taggar, karantänflaggor, egna symboler och en hel del appmetadata finns där. Utan den försvinner de, och inget säger till.--delete tar bort filer från målet när de har försvunnit från källan. Det är det som gör kopian till en spegling, och det är flaggan att tänka mest på.-v för utdata, -n för en testkörning. Gör alltid en testkörning av ett kommando med --delete första gången.~/Documents kopierar mappen in i målet, vilket ger dig /Volumes/Backup/Documents/Documents. ~/Documents/ kopierar dess innehåll, vilket nästan alltid är det du menade. I ett kommando som också säger --delete raderar ett fel allt annat som fanns i målet.--exclude för sådant som inte är värt att kopiera: --exclude '.DS_Store', --exclude 'node_modules', --exclude 'Library/Caches'.macOS levereras med en version av rsync som räcker för det här. Vill du ha den nyare versionen från upphovet finns den i Homebrew, och dess hantering av ACL:er på macOS är bättre.
rsync får målet att se ut som källan. Det är en kopia, och en kopia är inte historik. Ett dokument du raderade i tisdags försvinner från säkerhetskopian nästa gång den körs. Det gör även den bra versionen av en fil du sedan har skrivit över, och allt som ransomware hann komma åt innan jobbet kördes.
Att ta bort --delete löser inte det här. Då får du ett mål som samlar på sig varje fil du någonsin har haft, fortfarande med exakt en version av varje, och inget sätt att se vad som är aktuellt.
--link-destStandardtricket är att skapa en ny daterad katalog vid varje körning och hårdlänka oförändrade filer till den förra, så att identiska filer inte kostar något:
DEST=/Volumes/Backup
TODAY=$(date +%F)
rsync -aE --delete \
--link-dest="$DEST/latest" \
~/Documents "$DEST/$TODAY"
ln -snf "$DEST/$TODAY" "$DEST/latest"
Nu ser varje daterad mapp ut som en fullständig säkerhetskopia, och bara de ändrade filerna tar plats. Det är ungefär den idé Time Machine bygger på.
Två förbehåll. Hårda länkar betyder att kopiorna inte är oberoende: korruption i det underliggande blocket påverkar varje ögonblicksbild som delar det. Och det kräver ett filsystem med stöd för hårda länkar, så det fungerar på en extern enhet men inte i de flesta molnmappar.
rsync krypterar ingenting i vila. Om målet är en molnmapp eller en enhet som lämnar huset, kryptera innan du skriver:
tar -cJf - ~/Documents | openssl enc -aes-256-cbc -pbkdf2 -out /Volumes/Backup/documents.tar.xz.enc
Det är ett enda ogenomskinligt arkiv: ingen stegvis kopiering, ingen återställning av en enskild fil utan att packa upp allt, och en enda lösenfras mellan dig och allting. Den avvägningen spelar roll, och det är där de flesta slutar bygga själva.
cron finns fortfarande på macOS, men launchd är den väg som stöds. En plist i ~/Library/LaunchAgents/ med StartCalendarInterval kör ditt skript varje dag. macOS ber om Full skivåtkomst för det som kör det, eftersom läsning av Dokument och Skrivbord är skyddad.
Vad du än schemalägger, låt det skriva sitt resultat någonstans där du faktiskt ser det, och kontrollera att säkerhetskopian är färsk:
find /Volumes/Backup -type f -newermt '-7 days' | head
Ett tyst jobb är felet. Det slutar inte med ett fel på skärmen, det slutade en natt för fyra månader sedan.
Kommandona ovan täcker kopieringen. Det de inte täcker är det du faktiskt vill ha den dag något går fel: versioner som överlever en speglingskörning, kryptering som ändå låter dig återställa en fil, en tillbakaläsning som kontrollerar varje del mot sin hash, och något som säger till när enheten inte har setts på en vecka.
Var och en av dem är en helg av skriptande, och sedan är det ditt att underhålla. Copy Shelter är samma idé med de delarna inbyggda, och det är gratis för en plats.
rsync-kopia Finder-taggar?Eftersom -a ensamt inte tar med utökade attribut på macOS. Lägg till -E. Behöver du också ACL:er, använd -A och överväg versionen från Homebrew, som hanterar dem mer pålitligt än systemets.
Ja, antingen till en monterad delning under /Volumes eller över SSH direkt till din NAS. Över SSH är snabbare och kräver inte att delningen är monterad, och många NAS-enheter har rsync inbyggt.
sudo?Inte för din egen hemmapp. Du behöver dock ge Terminal, eller det som launchd kör, Full skivåtkomst innan macOS låter det läsa Dokument, Skrivbord och Hämtade filer.
--delete farligt?Det gör exakt det du bad om, och det är det farliga. Gör en testkörning med -n första gången, och se till att målsökvägen är rätt: ett skrivfel med --delete riktat mot fel katalog tar bort filer där.
Ja, det är det rsync är till för. Kör det igen så överförs bara det som saknas eller har ändrats. Lägg till --partial så att en halvt överförd stor fil sparas och återupptas.
Nästa: så kontrollerar du att kopian faktiskt går att läsa.