मेरे rsync को ब्लॉक-आकार> 128K की अनुमति क्यों नहीं है?


15

इस तरह से एक बड़े * के साथ rsync चलाना --block-size:

rsync -avvz --rsh 'ssh -c arcfour' --block-size 1048576 --inplace --progress example.com:/big.file /big.file

मुझे निम्नलिखित त्रुटि मिलती है:

Invalid block length 1048576 [sender]

दोनों छोर 64bit CentOS 6.4 चल रहे हैं। Googling से मैंने --block-sizeबहुत अधिक मूल्यों के साथ उपयोग किया है, यह मेरे लिए काम क्यों नहीं कर रहा है?

* मैं एक बड़े ब्लॉक आकार का उपयोग कर रहा हूँ क्योंकि मैं एक बग के चारों ओर काम करने की कोशिश कर रहा हूँ जहाँ rsync बस सीपीयू को हमेशा के लिए ४४% तक ३०० जीबी की फ़ाइल में बदल देता है

rsync 

जवाबों:


13

से स्रोत :

int32 max_blength = protocol_version < 30 ? OLD_MAX_BLOCK_SIZE : MAX_BLOCK_SIZE;

sum->blength = read_int(f);
if (sum->blength < 0 || sum->blength > max_blength) {
    rprintf(FERROR, "Invalid block length %ld [%s]\n",
        (long)sum->blength, who_am_i());
    exit_cleanup(RERR_PROTOCOL);
}

कहां :

#define OLD_MAX_BLOCK_SIZE ((int32)1 << 29)
#define MAX_BLOCK_SIZE ((int32)1 << 17)

जो क्रमशः 536870912(512M) और 131072(128k) है।


परिवर्तन v3.0.0 संस्करण में किया OLD_गया था और v3.0.3 में इसके लिए समर्थन जोड़ा गया था । (लिंक्स परिवर्तनों के पीछे के कुछ औचित्य बताते हैं।)

  • [पथ] एक पैच वास्तव में बड़ी फ़ाइलों को भेजने की कोशिश करने के लिए प्रेषक-साइड हैशटेब खोज में टकराए बिना नियंत्रित किया जाता है।

  • [पथ] प्रोटोकॉल के लिए पुराने ब्लॉक-आकार की सीमा को संभालने के द्वारा पुराने rsync संस्करणों के साथ बड़ी फ़ाइलों को भेजने का फिक्स्ड <29।


1
अभी भी लगता है कि 3.0.x में एक बग को अंडर-रन के तहत ब्लॉक आकार से निपटने में लगता है। बिना -dry-run के एक कमांड काम कर सकता है, लेकिन इसके साथ अभी भी "अमान्य ब्लॉक लंबाई NNN [प्रेषक]" संदेश आता है।
पॉल गियर

यह जानकर कि मुझे सिर्फ 3 साल बाद @PaulGear द्वारा बताई गई बारीकियों का सामना करना पड़ा और यह अभी भी Ubuntu 18 में एक मुद्दा है? v3.1.2
टोनीजी

3

अधिकतम ब्लॉक आकार rsync प्रोटोकॉल संस्करण पर निर्भर करता है।

30 से कम प्रोटोकॉल संस्करण के साथ, अधिकतम 1 << 29536870912 बाइट्स (512M) था। लेकिन प्रोटोकॉल संस्करण 30 या उससे ऊपर के साथ, अधिकतम है1 << 17 , जो 128k बाइट्स है। यदि आपको बड़े ब्लॉक आकार चाहिए तो आपको पुराने संस्करण का उपयोग करना होगा।

स्रोत: rsync.h

#define MAX_BLOCK_SIZE ((int32)1 << 17)

/* For compatibility with older rsyncs */
#define OLD_MAX_BLOCK_SIZE ((int32)1 << 29)

और: io.c

// ...
int32 max_blength = protocol_version < 30 ? OLD_MAX_BLOCK_SIZE : MAX_BLOCK_SIZE;
// ...
if (sum->blength < 0 || sum->blength > max_blength) {
  rprintf(FERROR, "Invalid block length %ld [%s]\n",
                  (long)sum->blength, who_am_i());
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.