আমার আরএসসিএন কেন ব্লক-সাইজ> 128 কে অনুমতি দেয় না?


15

এর মতো একটি বৃহত * এর সাথে আরএসএনসি চালানো --block-size:

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

আমি নিম্নলিখিত ত্রুটি পেয়েছি:

Invalid block length 1048576 [sender]

উভয় প্রান্তে 64 বিট সেন্টোজ 6.4 চলছে। গুগলিং থেকে আমি দেখেছি --block-sizeঅনেক উচ্চতর মান সহ, কেন এটি আমার পক্ষে কাজ করছে না?

* আমি একটি বৃহত ব্লকের আকার ব্যবহার করছি কারণ আমি একটি বাগের চারপাশে কাজ করার চেষ্টা করছি যেখানে আরএসসিএনপি কেবলমাত্র জিপিইউকে একটি চিরকালীন 300 গিগাবাইটে 44% স্পিন করে sp

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(512 এম) এবং 131072(128 কে)।


পরিবর্তন সংস্করণে তৈরি করা হয়েছিল v3.0.0 এবং সমর্থনের জন্য OLD_ছিল v3.0.3 যোগ । (লিঙ্কগুলি পরিবর্তনের পিছনে কিছু যুক্তি ব্যাখ্যা করে))

  • [প্যাচ] প্রেরণকারী-পাশের হ্যাশটেবল অনুসন্ধানে ডগা না করে সত্যিই বড় ফাইলগুলি হ্যান্ডেল করার চেষ্টা করার জন্য একটি প্যাচ।

  • [প্যাচ] প্রোটোকল <29 এর জন্য পুরানো ব্লক-আকারের সীমাটি পরিচালনা করে পুরানো আরএসসিএনসি সংস্করণ সহ বড় বড় ফাইলগুলি প্রেরণ স্থির করে।


1
এখনও --dry-run এর অধীনে ব্লক আকারের হ্যান্ডলিংয়ে 3.0.x এ একটি বাগ রয়েছে। --Dry- রান ব্যতীত একটি কমান্ড কাজ করতে পারে তবে এর সাথে এখনও "অবৈধ ব্লক দৈর্ঘ্য এনএনএন [প্রেরক]" বার্তা আসে।
পল গিয়ার

আকর্ষণীয় যে আমি মাত্র 3 বছর পরে @ পলগিয়ার দ্বারা উল্লিখিত উপদ্রবটির মুখোমুখি হয়েছি এবং এটি এখনও উবুন্টু 18-এ একটি সমস্যা? v3.1.2
টনিজি

3

সর্বাধিক ব্লকের আকারটি rsync প্রোটোকল সংস্করণের উপর নির্ভর করে।

প্রোটোকল সংস্করণ 30 এরও কম সংখ্যক সহ, সর্বোচ্চ ছিল 1 << 29, অর্থাৎ 536870912 বাইট (512 এম)। তবে প্রোটোকল সংস্করণ 30 বা 1 << 17ততোধিক সংস্করণ সহ সর্বাধিক যা 128 কে বাইট। সুতরাং আপনি যদি বড় আকারের ব্লক আকার চান তবে আপনাকে একটি পুরানো সংস্করণ ব্যবহার করতে হবে।

সূত্র: 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());
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.