rsync से Mac का बैकअपकमांड: rsync -aE --delete ~/Documents/ /Volumes/Backup/Documents/
-E macOS वाला हिस्सा है, और इसे छोड़ने से एक्सटेंडेड एट्रिब्यूट और रिसोर्स फ़ोर्क चुपचाप खो जाते हैं।
-a आर्काइव मोड है: अंदर के फ़ोल्डर में जाना, और अनुमतियाँ, मालिकाना हक, टाइमस्टैम्प और सिमलिंक बचाना। यह फ़्लैग सब जानते हैं।-E macOS के एक्सटेंडेड एट्रिब्यूट और रिसोर्स फ़ोर्क बचाता है। Finder टैग, क्वारंटीन फ़्लैग, कस्टम आइकन और ऐप का काफ़ी मेटाडेटा वहीं रहता है। इसके बिना वे चले जाते हैं, और कुछ भी आपको नहीं बताता।--delete सोर्स से हटते ही फ़ाइलें जगह से भी हटा देता है। यही कॉपी को मिरर बनाता है, और इसी फ़्लैग के बारे में सबसे ज़्यादा सोचना चाहिए।-v, ड्राई-रन के लिए -n। जिस कमांड में --delete हो उसे पहली बार हमेशा ड्राई-रन करें।~/Documents फ़ोल्डर को जगह के अंदर कॉपी करता है, जिससे /Volumes/Backup/Documents/Documents बनता है। ~/Documents/ उसकी सामग्री कॉपी करता है, और लगभग हमेशा आपका मतलब यही होता है। जिस कमांड में --delete भी हो, उसमें गलती होने पर जगह पर मौजूद बाकी सब डिलीट हो जाता है।--exclude: --exclude '.DS_Store', --exclude 'node_modules', --exclude 'Library/Caches'।macOS के साथ rsync का एक वर्ज़न आता है जो इसके लिए काफ़ी है। अगर आपको नया अपस्ट्रीम वर्ज़न चाहिए, तो वह Homebrew में है, और macOS पर उसका ACL संभालना बेहतर है।
rsync जगह को सोर्स जैसा बना देता है। यह कॉपी है, और कॉपी हिस्ट्री नहीं होती। पिछले मंगलवार डिलीट किया दस्तावेज़ अगली बार चलने पर बैकअप से भी चला जाता है। उसी तरह उस फ़ाइल का अच्छा वर्ज़न भी जिसे आपने बाद में ओवरराइट किया, और वह सब भी जिस तक जॉब चलने से पहले रैनसमवेयर पहुँच गया।
--delete हटाने से यह ठीक नहीं होता। इससे ऐसी जगह मिलती है जिसमें आपकी अब तक की हर फ़ाइल जमा होती जाती है, फिर भी हर एक का ठीक एक वर्ज़न, और यह जानने का कोई तरीका नहीं कि मौजूदा क्या है।
--link-dest से वर्ज़नआम तरकीब है कि हर बार नई तारीख वाली डायरेक्टरी बनाएँ और बिना बदली फ़ाइलों को पिछली से हार्ड-लिंक करें, ताकि एक जैसी फ़ाइलों की कोई जगह न लगे:
DEST=/Volumes/Backup
TODAY=$(date +%F)
rsync -aE --delete \
--link-dest="$DEST/latest" \
~/Documents "$DEST/$TODAY"
ln -snf "$DEST/$TODAY" "$DEST/latest"
अब हर तारीख वाला फ़ोल्डर पूरे बैकअप जैसा दिखता है और सिर्फ़ बदली फ़ाइलें जगह लेती हैं। Time Machine लगभग इसी सोच पर बना है।
दो बातें। हार्ड लिंक का मतलब है कि कॉपी स्वतंत्र नहीं हैं: नीचे के ब्लॉक में खराबी उसे साझा करने वाले हर स्नैपशॉट पर असर डालती है। और इसके लिए हार्ड लिंक सपोर्ट वाला फ़ाइल सिस्टम चाहिए, इसलिए यह बाहरी ड्राइव पर काम करता है, ज़्यादातर क्लाउड फ़ोल्डर के अंदर नहीं।
rsync स्टोर की गई किसी चीज़ को एन्क्रिप्ट नहीं करता। अगर जगह क्लाउड फ़ोल्डर है या इमारत से बाहर जाने वाली ड्राइव, तो लिखने से पहले एन्क्रिप्ट करें:
tar -cJf - ~/Documents | openssl enc -aes-256-cbc -pbkdf2 -out /Volumes/Backup/documents.tar.xz.enc
यह एक बंद आर्काइव है: कोई इंक्रीमेंटल कॉपी नहीं, सब कुछ खोले बिना एक फ़ाइल रीस्टोर नहीं हो सकती, और आपके और सब कुछ के बीच सिर्फ़ एक पासफ़्रेज़। यह समझौता मायने रखता है, और इसी जगह ज़्यादातर लोग खुद बनाना छोड़ देते हैं।
macOS पर cron अब भी है पर समर्थित रास्ता launchd है। ~/Library/LaunchAgents/ में StartCalendarInterval वाली plist आपकी स्क्रिप्ट रोज़ चलाती है। macOS उसे चलाने वाली चीज़ के लिए Full Disk Access माँगेगा, क्योंकि Documents और Desktop पढ़ना सुरक्षित है।
आप जो भी शेड्यूल करें, उसका नतीजा ऐसी जगह लिखवाएँ जहाँ आप सच में देखें, और जाँचें कि बैकअप हाल का है:
find /Volumes/Backup -type f -newermt '-7 days' | head
चुपचाप रुकी जॉब ही असली खतरा है। यह आपकी स्क्रीन पर एरर के साथ नहीं रुकती, यह चार महीने पहले किसी रात रुक जाती है।
ऊपर की कमांड कॉपी करना कवर करती हैं। वे वह कवर नहीं करतीं जो गड़बड़ी वाले दिन आपको सच में चाहिए: मिरर चलने के बाद भी बचे वर्ज़न, ऐसा एन्क्रिप्शन जो फिर भी एक फ़ाइल रीस्टोर करने दे, वापस पढ़कर हर हिस्से को उसके हैश से जाँचना, और कुछ ऐसा जो बताए कि ड्राइव एक हफ़्ते से नहीं दिखी।
इनमें से हर एक के लिए एक वीकेंड की स्क्रिप्टिंग चाहिए, और फिर उसे संभालना आपका काम है। Copy Shelter वही सोच है जिसमें ये हिस्से पहले से बने हैं, और एक जगह के लिए यह मुफ़्त है।
rsync कॉपी Finder टैग क्यों खो देती है?क्योंकि macOS पर अकेला -a एक्सटेंडेड एट्रिब्यूट नहीं ले जाता। -E जोड़ें। अगर ACL भी चाहिए, तो -A इस्तेमाल करें, और Homebrew वाले बिल्ड पर विचार करें, जो सिस्टम वाले से ज़्यादा भरोसेमंद तरीके से इन्हें संभालता है।
हाँ, या तो /Volumes के तहत माउंट किए शेयर पर या SSH से सीधे NAS पर। SSH तेज़ है और माउंट मौजूद होने पर निर्भर नहीं, और कई NAS में rsync पहले से होता है।
sudo चाहिए?अपने होम फ़ोल्डर के लिए नहीं। पर macOS के Documents, Desktop और Downloads पढ़ने देने से पहले आपको Terminal को, या launchd जो भी चलाए उसे, Full Disk Access देना होगा।
--delete खतरनाक है?यह ठीक वही कर रहा है जो आपने कहा, और यही खतरनाक हिस्सा है। पहली बार -n से ड्राई-रन करें, और पक्का करें कि जगह का पाथ सही है: गलत डायरेक्टरी की ओर इशारा करते --delete वाली टाइपो वहाँ की फ़ाइलें हटा देती है।
हाँ, rsync इसी के लिए है। इसे फिर से चलाएँ और यह सिर्फ़ वही भेजता है जो छूटा या बदला है। --partial जोड़ें ताकि आधी भेजी बड़ी फ़ाइल रखी जाए और वहीं से आगे चले।
आगे: कैसे जाँचें कि कॉपी सच में पढ़ने लायक है।