निम्न आदेश अपेक्षित रूप से काम कर रहा है ...
cp -ur /home/abc/* /mnt/windowsabc/
क्या rsync का इस पर कोई फायदा है? हर 24 घंटे में सिंक में बैकअप फ़ोल्डर रखने का एक बेहतर तरीका है?
निम्न आदेश अपेक्षित रूप से काम कर रहा है ...
cp -ur /home/abc/* /mnt/windowsabc/
क्या rsync का इस पर कोई फायदा है? हर 24 घंटे में सिंक में बैकअप फ़ोल्डर रखने का एक बेहतर तरीका है?
जवाबों:
Rsync बेहतर है क्योंकि यह पूरी फ़ाइल के बजाय केवल अपडेट किए गए फ़ाइल के केवल अपडेट किए गए भागों की प्रतिलिपि करेगा। यदि आप चाहें तो यह संपीड़न और एन्क्रिप्शन का भी उपयोग करता है। इस ट्यूटोरियल को देखें ।
फ़ाइलों की अधिक विस्तृत सूची और इसे निष्पादित करने वाले ब्लॉक के कारण rsync आवश्यक रूप से अधिक कुशल नहीं है। एल्गोरिथ्म यह क्या करता है पर शानदार है, लेकिन आपको यह जानने के लिए अपनी समस्या को समझने की आवश्यकता है कि क्या यह वास्तव में सबसे अच्छा विकल्प है।
एक बहुत बड़ी फाइल सिस्टम पर (कई हजारों या लाखों फाइलें कहिए) जहां फाइलें जोड़ी जाती हैं, लेकिन अपडेट नहीं की जाती हैं, "cp -u" संभवतः अधिक कुशल होगी। cp केवल मेटाडेटा पर कॉपी करने का निर्णय लेता है और बस कॉपी करने के व्यवसाय को प्राप्त कर सकता है।
ध्यान दें कि आप कुछ बफ़रिंग चाहते हैं, जैसे कि सीधे cp के बजाय टार का उपयोग करके, फ़ाइलों के आकार, नेटवर्क प्रदर्शन, अन्य डिस्क गतिविधि आदि के आधार पर, मुझे निम्नलिखित विचार बहुत उपयोगी लगते हैं:
tar cf - . | tar xCf directory -
मेटाडेटा वास्तव में बहुत बड़ी (क्लस्टर) फ़ाइल सिस्टम पर एक महत्वपूर्ण ओवरहेड बन सकता है, लेकिन rsync और cp इस समस्या को साझा करेंगे।
rsync बार-बार पसंदीदा उपकरण लगता है (और सामान्य प्रयोजन में एप्लिकेशन मेरी सामान्य डिफ़ॉल्ट पसंद है), लेकिन शायद बहुत से लोग हैं जो बिना सोचे समझे rsync का उपयोग करते हैं।
लिखित रूप में कमांड वर्तमान तिथि और समय टिकट के साथ नई निर्देशिका और फाइलें बनाएगा, और खुद को मालिक के रूप में। यदि आप अपने सिस्टम पर एकमात्र उपयोगकर्ता हैं और आप रोजाना ऐसा कर रहे हैं तो यह ज्यादा मायने नहीं रखता। लेकिन अगर उन विशेषताओं को आपके लिए संरक्षित किया जाता है, तो आप अपनी कमांड को संशोधित कर सकते हैं
cp -pur /home/abc/* /mnt/windowsabc/
-P फ़ाइल के स्वामित्व, टाइमस्टैम्प और मोड को संरक्षित करेगा। यह काफी महत्वपूर्ण हो सकता है जो इस बात पर निर्भर करता है कि आप क्या कर रहे हैं।
Rsync के साथ वैकल्पिक आदेश होगा
rsync -avh /home/abc/* /mnt/windowsabc
Rsync के साथ, -a "आर्काइव" को इंगित करता है जो ऊपर उल्लिखित उन सभी विशेषताओं को संरक्षित करता है। -v "वर्बोज़" को इंगित करता है जो बस सूचीबद्ध करता है कि यह प्रत्येक फ़ाइल के साथ क्या कर रहा है क्योंकि यह चलता है। -z को स्थानीय प्रतियों के लिए यहां छोड़ दिया गया है, लेकिन संपीड़न के लिए है, जो नेटवर्क पर बैकअप लेने में मदद करेगा। अंत में, -h एमबी, जीबी आदि जैसे मानव-पठनीय स्वरूपों में आकारों की रिपोर्ट करने के लिए rsync को बताता है।
जिज्ञासा से बाहर, मैंने सिस्टम को प्राइम करने के लिए एक कॉपी चलाई और पहले रन के खिलाफ पूर्वाग्रह से बचने के लिए, फिर मैंने एक आंतरिक एसएसडी ड्राइव से एक यूएसबी-कनेक्टेड एचडीडी से 1 जीबी फ़ाइलों के परीक्षण रन पर निम्नलिखित समय निकाल दिया। इन्हें केवल खाली लक्ष्य निर्देशिकाओं में कॉपी किया जाता है।
cp -pur : 19.5 seconds
rsync -ah : 19.6 seconds
rsync -azh : 61.5 seconds
दोनों आदेश उसी के बारे में प्रतीत होते हैं, हालांकि ज़िपिंग और अनज़िपिंग स्पष्ट रूप से उस प्रणाली पर कर लगाते हैं जहां बैंडविड्थ एक अड़चन नहीं है।
खासकर यदि आप BTRFS या ZFS जैसे कॉपी-ऑन-राइट फाइलसिस्टम का उपयोग करते हैं, rsync
तो ज्यादा बेहतर है।
मैं BTRFS का उपयोग करता हूं, और मेरे पास यह है ~/.bashrc
:
alias cp="rsync -ah --inplace --no-whole-file --info=progress2"
BTRFS जैसे CoW FSs के लिए यहाँ महत्वपूर्ण ध्वज है --inplace
क्योंकि यह केवल फ़ाइलों के परिवर्तित भाग की प्रतिलिपि बनाता है, फ़ाइलों के बीच छोटे बदलाव के लिए नया नहीं बनाता है, आदि । इसे देखें ।
इस बात का ध्यान रखें कि किसी मशीन पर आंतरिक रूप से फाइल न ट्रांसफर करते समय, न ही नेटवर्क ट्रांसफर करते समय, -z फ्लैग का इस्तेमाल करने से ट्रांसफर के लिए लगने वाले समय में भारी अंतर हो सकता है।
एक ही मशीन के भीतर स्थानांतरण
Case 1: With -z flag:
TAR took: 9.48345208168
Encryption took: 2.79352903366
CP took = 5.07273387909
Rsync took = 30.5113282204
Case 2: Without the -z flag:
TAR took: 10.7535531521
Encryption took: 3.0386879921
CP took = 4.85565590858
Rsync took = 4.94515299797
एक स्थानीय प्रतिलिपि के लिए, rsync का एकमात्र लाभ यह है कि यदि फ़ाइल पहले से ही गंतव्य निर्देशिका में मौजूद है, तो वह प्रतिलिपि बनाने से बचेंगी। "पहले से मौजूद है" की परिभाषा (ए) एक ही फ़ाइल नाम (बी) एक ही आकार (सी) समान टाइमस्टैम्प है। (शायद वही मालिक / समूह; मुझे यकीन नहीं है ...)
"Rsync एल्गोरिथ्म" एक धीमी नेटवर्क लिंक पर एक फ़ाइल के वृद्धिशील अपडेट के लिए बहुत अच्छा है, लेकिन यह आपको एक स्थानीय प्रतिलिपि के लिए बहुत कुछ नहीं खरीदेगा, क्योंकि इसे चलाने के लिए मौजूदा (आंशिक) फ़ाइल को पढ़ने के लिए "अंतर" गणना की आवश्यकता है।
इसलिए यदि आप इस तरह की कमांड बार-बार चला रहे हैं, और बदली हुई फाइलों का सेट कुल फाइलों की तुलना में छोटा है, तो आपको पता होना चाहिए कि rsync cp से तेज है। (इसके अलावा rsync के पास एक --delete
विकल्प है जो आपको उपयोगी लग सकता है।)
यह वास्तव में सवाल नहीं है कि अधिक कुशल क्या है।
'Rsync', और 'cp' कमांड समतुल्य नहीं हैं और विभिन्न लक्ष्यों को प्राप्त करते हैं।
1- rsync मौजूदा फ़ाइलों के निर्माण के समय को संरक्षित कर सकता है। (-a विकल्प का उपयोग करते हुए)
2- rsync मल्टीपर्पस चलेगा और स्थानीय सॉकेट या नेटवर्क सॉकेट का उपयोग करके स्थानांतरण करेगा। (यानी कई प्रक्रियाओं में खुद को कांटा)
3- मल्टीप्रोसेसिंग, और थ्रेडिंग आपके थ्रूपुट को बढ़ाएगा जब बड़ी संख्या में छोटी फ़ाइलों की प्रतिलिपि बनाई जाएगी, और यहां तक कि कई बड़ी फ़ाइलों के साथ।
इसलिए नीचे की रेखा rsync बड़े डेटा के लिए है, और cp छोटी स्थानीय प्रतिलिपि के लिए है। (एमबी से लेकर छोटी जीबी रेंज तक)। जब आप कई जीबी या टीबी रेंज में होना शुरू करते हैं, तो rsync के साथ जाएं। और निश्चित रूप से नेटवर्क प्रतियां, सभी तरह से rsync।
-a
तुलना के लिए वेब खोज को क्रॉल कर रहा था ।
यदि आप cp का उपयोग कर रहे हैं, तो मौजूदा फ़ाइलों को उसी नाम के फ़ोल्डर की प्रतिलिपि बनाते समय नहीं बचाएं। कहते हैं कि आपके पास यह फ़ोल्डर हैं:
/myFolder
someTextFile.txt
/someOtherFolder
/myFolder
wellHelloThere.txt
फिर आप एक को दूसरे पर कॉपी करते हैं:
cp /someOtherFolder/myFolder /myFolder
परिणाम:
/myFolder
wellHelloThere.txt
यह कम से कम macOS पर होता है और मैं अलग फ़ाइलों को संरक्षित करना चाहता था इसलिए मैंने rsync का उपयोग किया।