rsyncPerintahnya: rsync -aE --delete ~/Documents/ /Volumes/Backup/Documents/
-E adalah bagian khusus macOS, dan melewatkannya diam-diam menghilangkan atribut tambahan dan resource fork.
-a adalah mode arsip: rekursif, dan mempertahankan izin, kepemilikan, stempel waktu, dan symlink. Inilah flag yang diketahui semua orang.-E mempertahankan atribut tambahan dan resource fork macOS. Tag Finder, tanda karantina, ikon khusus, dan banyak metadata aplikasi tersimpan di sana. Tanpanya semua itu hilang, dan tidak ada yang memberi tahu Anda.--delete menghapus file dari tujuan begitu file itu hilang dari sumber. Inilah yang menjadikan salinan sebagai mirror, dan inilah flag yang paling perlu dipikirkan.-v untuk output, -n untuk uji coba. Selalu uji coba perintah yang mengandung --delete pertama kali.~/Documents menyalin folder ke dalam tujuan, sehingga Anda mendapat /Volumes/Backup/Documents/Documents. ~/Documents/ menyalin isinya, yang hampir selalu Anda maksudkan. Dalam perintah yang juga berisi --delete, kesalahan ini menghapus apa pun yang ada di tujuan.--exclude untuk hal yang tidak perlu disalin: --exclude '.DS_Store', --exclude 'node_modules', --exclude 'Library/Caches'.macOS menyertakan versi rsync yang memadai untuk ini. Jika Anda menginginkan versi upstream yang lebih baru, Homebrew menyediakannya, dan penanganan ACL-nya di macOS lebih baik.
rsync membuat tujuan tampak seperti sumber. Itu salinan, dan salinan bukan riwayat. Dokumen yang Anda hapus Selasa lalu hilang dari cadangan saat berjalan berikutnya. Begitu pula versi baik dari file yang telah Anda timpa, dan semua yang terkena ransomware sebelum tugas berjalan.
Menghapus --delete tidak memperbaiki ini. Anda akan mendapat tujuan yang menumpuk setiap file yang pernah Anda miliki, tetap dengan tepat satu versi masing-masing, dan tanpa cara untuk mengetahui mana yang terkini.
--link-destTrik standarnya adalah membuat direktori bertanggal baru setiap kali dijalankan dan membuat hard link file yang tidak berubah ke direktori sebelumnya, sehingga file identik tidak memakan ruang:
DEST=/Volumes/Backup
TODAY=$(date +%F)
rsync -aE --delete \
--link-dest="$DEST/latest" \
~/Documents "$DEST/$TODAY"
ln -snf "$DEST/$TODAY" "$DEST/latest"
Kini setiap folder bertanggal tampak seperti cadangan penuh dan hanya file yang berubah yang memakan ruang. Kira-kira inilah gagasan yang mendasari Time Machine.
Dua catatan. Hard link berarti salinan tidak independen: kerusakan pada blok yang mendasarinya memengaruhi setiap snapshot yang berbagi blok itu. Dan diperlukan sistem file yang mendukung hard link, sehingga berfungsi di drive eksternal dan tidak di dalam sebagian besar folder cloud.
rsync tidak mengenkripsi apa pun saat tersimpan. Jika tujuannya folder cloud atau drive yang keluar dari rumah, enkripsi sebelum menulis:
tar -cJf - ~/Documents | openssl enc -aes-256-cbc -pbkdf2 -out /Volumes/Backup/documents.tar.xz.enc
Hasilnya satu arsip tertutup: tanpa penyalinan inkremental, tidak bisa memulihkan satu file tanpa membongkar semuanya, dan hanya satu frasa sandi antara Anda dan segalanya. Kompromi itu berarti, dan di titik inilah kebanyakan orang berhenti membuatnya sendiri.
cron masih ada di macOS tetapi launchd adalah cara yang didukung. Sebuah plist di ~/Library/LaunchAgents/ dengan StartCalendarInterval menjalankan skrip Anda setiap hari. macOS akan meminta Akses Disk Penuh untuk apa pun yang menjalankannya, karena membaca Dokumen dan Desktop dilindungi.
Apa pun yang Anda jadwalkan, pastikan hasilnya ditulis ke tempat yang benar-benar akan Anda lihat, dan periksa bahwa cadangan masih baru:
find /Volumes/Backup -type f -newermt '-7 days' | head
Tugas yang diam adalah bentuk kegagalannya. Tugas itu tidak berhenti dengan galat di layar Anda, melainkan berhenti di malam hari empat bulan lalu.
Perintah di atas mencakup penyalinan. Yang tidak dicakup adalah apa yang benar-benar Anda butuhkan saat ada masalah: versi yang bertahan dari proses mirror, enkripsi yang tetap memungkinkan pemulihan satu file, pembacaan ulang yang memeriksa setiap bagian dengan hash-nya, dan sesuatu yang memberi tahu Anda saat drive tidak terlihat selama seminggu.
Masing-masing butuh satu akhir pekan untuk membuat skripnya, lalu Anda yang harus merawatnya. Copy Shelter adalah gagasan yang sama dengan bagian-bagian itu sudah tersedia, dan gratis untuk satu lokasi.
rsync saya kehilangan tag Finder?Karena -a saja tidak membawa atribut tambahan di macOS. Tambahkan -E. Jika Anda juga memerlukan ACL, gunakan -A, dan pertimbangkan versi Homebrew, yang menanganinya lebih andal daripada versi sistem.
Ya, baik ke share yang terpasang di /Volumes maupun melalui SSH ke NAS itu sendiri. Melalui SSH lebih cepat dan tidak bergantung pada mount yang ada, dan banyak NAS memiliki rsync bawaan.
sudo?Tidak untuk folder home Anda sendiri. Anda perlu memberikan Akses Disk Penuh ke Terminal, atau ke apa pun yang dijalankan launchd, sebelum macOS mengizinkannya membaca Dokumen, Desktop, dan Unduhan.
--delete berbahaya?Ia melakukan persis apa yang Anda minta, dan justru itu bagian berbahayanya. Lakukan uji coba dengan -n pertama kali, dan pastikan path tujuan benar: salah ketik dengan --delete yang mengarah ke direktori yang salah akan menghapus file di sana.
Ya, itulah gunanya rsync. Jalankan lagi dan ia hanya mentransfer yang hilang atau berubah. Tambahkan --partial agar file besar yang setengah ditransfer disimpan dan dilanjutkan.
Berikutnya: cara memeriksa salinan benar-benar dapat dibaca.