कॉपी या rsync कमांड


83

निम्न आदेश अपेक्षित रूप से काम कर रहा है ...

cp -ur /home/abc/* /mnt/windowsabc/

क्या rsync का इस पर कोई फायदा है? हर 24 घंटे में सिंक में बैकअप फ़ोल्डर रखने का एक बेहतर तरीका है?


यह वास्तव में अपेक्षा के अनुरूप काम नहीं कर रहा है?
lunixbochs

12
-u "अपडेट" इंगित करता है: केवल गुम या पुरानी फाइलों पर कॉपी करें। -r "पुनरावर्ती" इंगित करता है: निर्देशिका संरचना के माध्यम से ड्रिलिंग। मुझे इसे देखना था, अन्य नॉब्स की मदद करना। :-)
२५:१५

आदेशों के मदद अनुभागों में विशेष झंडे के बारे में जानकारी के लिए, मैं आमतौर पर इस तरह से कुछ का पालन कर रहा हूं, <cp --help | grep -e -u> या यदि आप ध्वज 'r' पर जानकारी खोदना चाहते हैं, तो <cp --help का उपयोग करें grep -e -r> यह आपको केवल उन मदद का हिस्सा दिखाएगा जो आपके पास "-e" के बाद लिखी गई सामग्री है।
परमवीर

जवाबों:


58

Rsync बेहतर है क्योंकि यह पूरी फ़ाइल के बजाय केवल अपडेट किए गए फ़ाइल के केवल अपडेट किए गए भागों की प्रतिलिपि करेगा। यदि आप चाहें तो यह संपीड़न और एन्क्रिप्शन का भी उपयोग करता है। इस ट्यूटोरियल को देखें


59

फ़ाइलों की अधिक विस्तृत सूची और इसे निष्पादित करने वाले ब्लॉक के कारण rsync आवश्यक रूप से अधिक कुशल नहीं है। एल्गोरिथ्म यह क्या करता है पर शानदार है, लेकिन आपको यह जानने के लिए अपनी समस्या को समझने की आवश्यकता है कि क्या यह वास्तव में सबसे अच्छा विकल्प है।

एक बहुत बड़ी फाइल सिस्टम पर (कई हजारों या लाखों फाइलें कहिए) जहां फाइलें जोड़ी जाती हैं, लेकिन अपडेट नहीं की जाती हैं, "cp -u" संभवतः अधिक कुशल होगी। cp केवल मेटाडेटा पर कॉपी करने का निर्णय लेता है और बस कॉपी करने के व्यवसाय को प्राप्त कर सकता है।

ध्यान दें कि आप कुछ बफ़रिंग चाहते हैं, जैसे कि सीधे cp के बजाय टार का उपयोग करके, फ़ाइलों के आकार, नेटवर्क प्रदर्शन, अन्य डिस्क गतिविधि आदि के आधार पर, मुझे निम्नलिखित विचार बहुत उपयोगी लगते हैं:

tar cf - . | tar xCf directory -

मेटाडेटा वास्तव में बहुत बड़ी (क्लस्टर) फ़ाइल सिस्टम पर एक महत्वपूर्ण ओवरहेड बन सकता है, लेकिन rsync और cp इस समस्या को साझा करेंगे।

rsync बार-बार पसंदीदा उपकरण लगता है (और सामान्य प्रयोजन में एप्लिकेशन मेरी सामान्य डिफ़ॉल्ट पसंद है), लेकिन शायद बहुत से लोग हैं जो बिना सोचे समझे rsync का उपयोग करते हैं।


19

लिखित रूप में कमांड वर्तमान तिथि और समय टिकट के साथ नई निर्देशिका और फाइलें बनाएगा, और खुद को मालिक के रूप में। यदि आप अपने सिस्टम पर एकमात्र उपयोगकर्ता हैं और आप रोजाना ऐसा कर रहे हैं तो यह ज्यादा मायने नहीं रखता। लेकिन अगर उन विशेषताओं को आपके लिए संरक्षित किया जाता है, तो आप अपनी कमांड को संशोधित कर सकते हैं

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

दोनों आदेश उसी के बारे में प्रतीत होते हैं, हालांकि ज़िपिंग और अनज़िपिंग स्पष्ट रूप से उस प्रणाली पर कर लगाते हैं जहां बैंडविड्थ एक अड़चन नहीं है।


6

खासकर यदि आप BTRFS या ZFS जैसे कॉपी-ऑन-राइट फाइलसिस्टम का उपयोग करते हैं, rsyncतो ज्यादा बेहतर है।

मैं BTRFS का उपयोग करता हूं, और मेरे पास यह है ~/.bashrc:

alias cp="rsync -ah --inplace --no-whole-file --info=progress2"

BTRFS जैसे CoW FSs के लिए यहाँ महत्वपूर्ण ध्वज है --inplaceक्योंकि यह केवल फ़ाइलों के परिवर्तित भाग की प्रतिलिपि बनाता है, फ़ाइलों के बीच छोटे बदलाव के लिए नया नहीं बनाता है, आदि । इसे देखें ।


1
के अनुसार --inplaceविकल्प मैनुअल : The option implies --partial। इसलिए मुझे लगता --partialहै कि आवश्यक नहीं है, कम से कम वर्तमान संस्करण में।
Dcortez

4

इस बात का ध्यान रखें कि किसी मशीन पर आंतरिक रूप से फाइल न ट्रांसफर करते समय, न ही नेटवर्क ट्रांसफर करते समय, -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

3

एक स्थानीय प्रतिलिपि के लिए, rsync का एकमात्र लाभ यह है कि यदि फ़ाइल पहले से ही गंतव्य निर्देशिका में मौजूद है, तो वह प्रतिलिपि बनाने से बचेंगी। "पहले से मौजूद है" की परिभाषा (ए) एक ही फ़ाइल नाम (बी) एक ही आकार (सी) समान टाइमस्टैम्प है। (शायद वही मालिक / समूह; मुझे यकीन नहीं है ...)

"Rsync एल्गोरिथ्म" एक धीमी नेटवर्क लिंक पर एक फ़ाइल के वृद्धिशील अपडेट के लिए बहुत अच्छा है, लेकिन यह आपको एक स्थानीय प्रतिलिपि के लिए बहुत कुछ नहीं खरीदेगा, क्योंकि इसे चलाने के लिए मौजूदा (आंशिक) फ़ाइल को पढ़ने के लिए "अंतर" गणना की आवश्यकता है।

इसलिए यदि आप इस तरह की कमांड बार-बार चला रहे हैं, और बदली हुई फाइलों का सेट कुल फाइलों की तुलना में छोटा है, तो आपको पता होना चाहिए कि rsync cp से तेज है। (इसके अलावा rsync के पास एक --deleteविकल्प है जो आपको उपयोगी लग सकता है।)


3

यह वास्तव में सवाल नहीं है कि अधिक कुशल क्या है।

'Rsync', और 'cp' कमांड समतुल्य नहीं हैं और विभिन्न लक्ष्यों को प्राप्त करते हैं।

1- rsync मौजूदा फ़ाइलों के निर्माण के समय को संरक्षित कर सकता है। (-a विकल्प का उपयोग करते हुए)
2- rsync मल्टीपर्पस चलेगा और स्थानीय सॉकेट या नेटवर्क सॉकेट का उपयोग करके स्थानांतरण करेगा। (यानी कई प्रक्रियाओं में खुद को कांटा)
3- मल्टीप्रोसेसिंग, और थ्रेडिंग आपके थ्रूपुट को बढ़ाएगा जब बड़ी संख्या में छोटी फ़ाइलों की प्रतिलिपि बनाई जाएगी, और यहां तक ​​कि कई बड़ी फ़ाइलों के साथ।

इसलिए नीचे की रेखा rsync बड़े डेटा के लिए है, और cp छोटी स्थानीय प्रतिलिपि के लिए है। (एमबी से लेकर छोटी जीबी रेंज तक)। जब आप कई जीबी या टीबी रेंज में होना शुरू करते हैं, तो rsync के साथ जाएं। और निश्चित रूप से नेटवर्क प्रतियां, सभी तरह से rsync।


"rsync मौजूदा फ़ाइलों के निर्माण के समय को संरक्षित कर सकता है। (-a विकल्प का उपयोग करके" - "cp -a" वही काम कर सकता है, और यह "rsync -a" से भी बेहतर कर सकता है। "बेहतर" का अर्थ है जितना संभव हो उतना मूल डेटा और मेटाडेटा का संरक्षण करना; unix.stackexchange.com/questions/443911/… पढ़ें । Rsync और cp, -a के संबंध में लगभग बराबर हैं।
रुबलाकाव

धन्यवाद @Rublacava मैं विशेष रूप से -aतुलना के लिए वेब खोज को क्रॉल कर रहा था ।
फ्रेंकोइस

1

यदि आप cp का उपयोग कर रहे हैं, तो मौजूदा फ़ाइलों को उसी नाम के फ़ोल्डर की प्रतिलिपि बनाते समय नहीं बचाएं। कहते हैं कि आपके पास यह फ़ोल्डर हैं:

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

फिर आप एक को दूसरे पर कॉपी करते हैं:

cp /someOtherFolder/myFolder /myFolder

परिणाम:

/myFolder
  wellHelloThere.txt

यह कम से कम macOS पर होता है और मैं अलग फ़ाइलों को संरक्षित करना चाहता था इसलिए मैंने rsync का उपयोग किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.