मैं rsync को कैसे धीमा कर सकता हूं?


35

मैं एक असफल USB अंगूठे ड्राइव की सामग्री को कॉपी करने की कोशिश कर रहा हूं। अगर मैं डेटा बहुत तेजी से पढ़ता हूं, तो ड्राइव की कंट्रोलर चिप ओवरहीट हो जाती है और ड्राइव सिस्टम से गायब हो जाता है। जब ऐसा होता है, तो मुझे ड्राइव को अनप्लग करने की आवश्यकता होती है, इसके लिए एक या एक मिनट प्रतीक्षा करें, इसे ठंडा करने के लिए, इसे वापस प्लग करें और कॉपी को फिर से शुरू करें।

मुझे ड्राइव की सामग्री का पुराना बैकअप मिल गया है, इसलिए बाकी डेटा प्राप्त करने का स्पष्ट तरीका rsyncबैकअप को अद्यतित करने के लिए उपयोग करना है, लेकिन यह पूरी तरह से "बहुत तेजी से पढ़ा जाता है, ड्राइव गायब हो जाता है" , और मुझे "समस्या" शुरू करने की आवश्यकता है। क्या rsyncप्रति मिनट केवल X मेगाबाइट डेटा पढ़ने के लिए बताने का कोई तरीका है ? वैकल्पिक रूप से, क्या यह संभव है कि जब यह ड्राइव गायब हो जाए, तब इसे निलंबित कर दें और जब यह वापस प्लग हो जाए तो फिर से शुरू करें?


24
क्या आपने ड्राइव को ठंडा करने के बारे में सोचा है?
AEONAX

3
ड्राइव पूरी कैसे हुई? यदि ड्राइव 50% से अधिक पूर्ण है, तो यह बेहतर है कि पहले असफल ड्राइव को पहले दर्पण करें और फिर केवल दर्पण पर अधिक जटिल सामान से निपटने के लिए शुरू करें।
कास्पर्ड

1
@AEONAX: जबकि एक अच्छा (sic!) आउट-ऑफ-द-बॉक्स विचार है, मैं यह अनुशंसा नहीं करूंगा: आप डिवाइस पर अतिरिक्त थर्मल तनाव डाल रहे हैं, और यह पूरी तरह से विफल हो सकता है।
विस्कॉन्सिन

जवाबों:


46

DopeGhoti के अनुभव के विपरीत, --bwlimitध्वज मेरे rsync (v3.1.2) के साथ, डेटा स्थानांतरण को सीमित करता है।

परीक्षा:

$ dd if=/dev/urandom bs=1M count=10 of=data
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0871822 s, 120 MB/s

$ du -h data
10M     data

$ time rsync -q data fast
0.065 seconds

$ time rsync -q --bwlimit=1M data slow
10.004 seconds

(ध्यान दें: मेरा timeआउटपुट सबसे अधिक timeइनवोकेशन ( zshसुविधा) के लिए अलग दिखता है , उन समयों को मेरे द्वारा संपादित नहीं किया गया था)

वरना, शायद एक डबल की तर्ज पर कुछ -execमें find। मेरा मानना ​​है कि rsync -Rमूल फ़ोल्डर बनाना और कॉपी करना चाहिए, लेकिन अगर ऐसा नहीं है, तो cp --parentsकरना चाहिए।

$ find /failing/usb -exec rsync -R {} /somewhere/safe/ \; -exec sleep 1 \;

नोट : ddrescue भी देखें , यह सही हो सकता है कि आप क्या देख रहे हैं :)


1
हाँ। DG शब्द "बैंडविड्थ" शब्द से भ्रमित हो सकते हैं - लेकिन यह केवल नेटवर्क ही नहीं, बल्कि किसी भी डेटा ले जाने वाले चैनल पर भी लागू होता है। मैन पेज विशेष रूप से कहता है: --bwlimit=KBPS limit I/O bandwidth; KBytes per secondनेटवर्क का कोई उल्लेख नहीं। कोड को ब्राउज़ करते हुए, यह गंतव्य की परवाह किए बिना रीड गति को सीमित करता है। साथ ही, एक किस्सा: मैं स्थानीय-से-स्थानीय लिखने की गति को सीमित करने के लिए वर्षों से इस विकल्प का उपयोग कर रहा हूं । linux.die.net/man/1/rsync
Piskvor

1
ठीक है, दूसरे लुक पर, यह वास्तव में लिखे गए बाइट्स की संख्या को गिना जाता है और एक परिकलित समय के लिए सोता है। io.c, पंक्तियाँ 832-3: if (bwlimit_writemax) sleep_for_bwlimit(n);किसी भी मामले में, यह संभवतया काम करेगा, कम फटने में पढ़ना और बीच में सोना। मैं एक कम मूल्य के साथ शुरू करने और ध्यान से बढ़ने की सिफारिश करूंगा, या बस धीमी गति से रात भर चलने दें।
पिस्कवर

25

MacGyver समाधान का एक सा लेकिन मुझे अतीत में इसके साथ अच्छी सफलता मिली है:
छड़ी और कंप्यूटर के बीच एक पुराना USB 1 हब डालें। नरक में कोई रास्ता नहीं यह तेजी से कॉपी करने जा रहा है :-)

अन्य संभावना: यदि आपको एक और स्टिक उपलब्ध है, तो इसे उसी रूट-हब से जुड़े दूसरे यूएसबी पोर्ट पर डालें (ताकि यह आपकी समस्या स्टिक के साथ बैंडविड्थ साझा करे)।
अब अतिरिक्त स्टिक के लिए एक बड़ा लेखन ऑपरेशन शुरू करें ताकि दोनों स्टिक बैंडविड्थ के लिए प्रतिस्पर्धा कर रहे हों। आगे के नियंत्रण के लिए आप समस्या छड़ी पर प्राथमिकता को कम करने के लिए आयनिस का उपयोग कर सकते हैं आगे भी।


1
मुझे यकीन है कि एक सॉफ्टवेयर समाधान के माध्यम से बंदरगाहों को USB 1.1 के रूप में काम करने का एक तरीका होना चाहिए, संभवतः USB कर्नेल मॉड्यूल के विकल्प देकर।
एंड्रे बोरी

@ AndréBorie: वहाँ है - bbs.archlinux.org/viewtopic.php?pid=1342593#p1342593 , लेकिन चूंकि SW में प्रभावी थ्रॉटल हैं, यह एक क्रूर-बल समाधान का एक सा है।
Piskvor

@ यह एक डिवाइस के साथ एक कम हस्तांतरण दर बातचीत करता है, ठीक उसी तरह जैसे कि USB 1 हब का उपयोग करना होगा। मैं इसके बारे में कुछ भी "क्रूर बल" नहीं देखता।
एंड्रे बोरी

ठीक है, शब्द का बुरा विकल्प, मैं मानता हूं। लेकिन IMHO पुन: कॉन्फ़िगर करने वाले उपकरणों के लिए विशेष विशेषाधिकारों (रूट या कम से कम% प्रशंसा) की आवश्यकता होगी, जबकि प्रति-प्रक्रिया रीड स्पीड को नियंत्रित करना सरल होगा। (इसके अलावा, ऐसे उपकरण हैं जो USB 2.0 के बाहर काम करने में विफल रहते हैं - कल्पना के उल्लंघन में)
पिस्कवर

13

आप rsync --bwlimit=RATEफाइल ट्रांसफर की गति को कम करने के लिए उपयोग कर सकते हैं , जो नीचे दी गई टिप्पणियों के आधार पर है, वास्तव में विशेष रूप से डेटा की रीड स्पीड को थ्रॉटलिंग करके काम करने लगता है, जो कि आप जो देख रहे हैं वह ठीक है।



3
आयनिस सिर्फ प्राथमिकता देता है, अगर दो चीजें पढ़ रहे हैं, तो डिफ़ॉल्ट रूप से उन्हें 50/50 मिलते हैं। आयनिस उसे समायोजित कर सकता है, लेकिन अगर केवल एक चीज को पढ़ना है, तो उसे 100% मिलेगा।
coteyr

@ coteyr आप सही हैं और यही कारण है कि आपको उसी USB रूट-हब पर एक 2 बैंडविड्थ खाने की प्रक्रिया के साथ संयोजन करने की आवश्यकता है। मेरा जवाब देखिए।
टन

2
सौभाग्य से, आपका उत्तर गलत है: --bwlimitI / O सीमा सेट करता है, जरूरी नहीं कि एक नेटवर्क सीमा हो। विभिन्न परिदृश्यों में कई बार परीक्षण किया गया: इस विकल्प rsync पर ही सीमित कर बनाता है पढ़ने , गंतव्य की परवाह किए बिना। (एक समान परिदृश्य में यह पता चला, जहां तेजी से एक धीमी गति से स्थानीय डिवाइस को लिखता है उन्हें असफल बना दिया)
पिस्कवर

1
@piskvor - इसके लिए धन्यवाद! मुझे इस जगह से प्यार है; मैं नई चीजें
सीखता रहता हूं

8

rsync --bwlimit=100100KiB / s के अलावा, अधिक समाधान ।

  1. पूर्ण डिस्क कॉपी के लिए विकल्प के ddrescueसाथ प्रयोग करें --max-read-rate। यह आपको एक पूर्ण डिस्क कॉपी को फिर से शुरू करने की अनुमति देगा जहां यह एक त्रुटि के बाद बंद हो गया।

    ddrescue --max-read-rate=100K /failing/usb output.img output.logfile
    

ddrescueडेटा रिकवरी के लिए प्रासंगिक कई अन्य विकल्प भी हैं, यहां मैनुअल देखें

  1. विकल्प के pvसाथ ("पाइप दर्शक") का उपयोग करें --rate-limitया throttleसीमा पाइपों को रेट करने के लिए उपकरण। pvप्रगति भी दिखा सकते हैं। आप किसी भी उपकरण का उपयोग कर सकते हैं जो पाइप का उपयोग करता है या पाइप का उपयोग कर सकता है:

    tar -cf - /failing/usb | throttle -K 100 | tar -C /your/outputfolder/ -xvf -
    

    या

    tar -cf - /failing/usb | pv --rate-limit 100k | tar -C /your/outputfolder/  -xvf -
    

    अधिक सेटिंग्स और उदाहरणों के लिए pv मैनपेज पर एक नज़र डालें । इसके लिए throttle, आप -wविकल्प की कोशिश भी कर सकते हैं , जो निर्धारित करता है कि गति की गणना कैसे की जाती है, थ्रॉटल मैनपेज देखें


अब यह एक उपयोगी उपकरण है, यह नहीं जानते, धन्यवाद! pvमैनपेज में विभिन्न उपयोगों के और भी अधिक उदाहरण हैं।
प्रिस्कवर

मैं pvअपने टेप जॉकिंग दिनों में वापस की खोज के बाद से अधिक से अधिक समय के लिए पहुँच गया हूँ। जब टैर ने टेप ड्राइव पर लिखा। :)
डैन गर्थवाइट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.