লিনাক্সে বড় ফাইলগুলির জন্য বাইনারি ডিফ / প্যাচ?


13

আমি দুটি পার্টিশন চিত্র পেয়েছি (এ এবং বি) এবং এগুলি একটি প্যাচ তৈরি করতে ব্যবহার করতে চাই যা আমি নেটওয়ার্কটিতে প্লাবন না করে নতুন বি চিত্র পেতে অন্য কম্পিউটারে এ প্রয়োগ করতে পারি। আমার নিম্নলিখিত প্রয়োজনীয়তা রয়েছে:

  • লিনাক্সে কাজ করে
  • বিভিন্নতা তৈরি করতে পারে
  • ফাইলগুলি প্যাচ করার জন্য বিভিন্নগুলি ব্যবহার করতে পারে
  • বাইনারি ফাইলগুলি পরিচালনা করতে পারে
  • বড় ফাইল হ্যান্ডেল করতে পারে (কয়েকশ গিগাবাইট কাজ করা উচিত)
  • কোন ব্যবহারকারীর ইন্টারঅ্যাকশন প্রয়োজন (শুধুমাত্র একটি কনসোল অ্যাপ্লিকেশন)
  • আদর্শভাবে, পাইপগুলিতে / লেখার থেকে পড়তে সক্ষম হওয়া উচিত (যাতে আমি এটি একটি জিপ-সংক্ষেপিত ফাইল থেকে পাইপ করতে পারি এবং একটিতে লিখতে পারি)

এর মতো কি কিছু আছে?


অনুগ্রহ শুরু করার সময় আমি খুব দ্রুত এন্টার কী টিপুন। এখানে আমি পাঠ্যটি যুক্ত করতে চেয়েছি:
বাসজ

একটি সহজে-প্রজননের উদাহরণ সহ একটি উত্তর rdiffভবিষ্যতের রেফারেন্সের জন্য মূল্যবান হবে। উদাহরণ: ধরা যাক file1এবং file2প্রতিটি 1GB এর দুটি অনুরূপ ফাইল। 1) কীভাবে আরডিফ গণনা করবেন? 2) এই rdiff একটি patchফাইলে সংরক্ষণ কিভাবে ? 3) পুনরুদ্ধার করতে এই patchফাইলটি কীভাবে প্রয়োগ করবেন ? file1file2
বাসজ

উত্তর:


13

আপনার সম্ভবত আরএসসিএনসি সম্পর্কিত সরঞ্জামগুলি দেখুন: rdiff এবং rdiff- ব্যাকআপrdiffকমান্ডের সাহায্যে আপনি প্যাচ ফাইল উত্পাদন এবং কিছু অন্যান্য ফাইল এটি প্রয়োগ করতে দেয়।

rdiff-backupকমান্ড সমগ্র ডিরেক্টরি মোকাবেলা করার এই পদ্ধতির ব্যবহার করে, কিন্তু আমি তোমাদের একক ফাইল ডিস্ক ইমেজ সঙ্গে কাজ করছি অনুমান করছি, তাই rdiffব্যবহার করা হবে।


1
"সিগনেচার" এবং "ডেল্টা" এর অর্থ কি? ম্যান পেজ বলে না।
টোর ক্লিংবার্গ

1
আমার নিজের প্রশ্নের উত্তরের জন্য, আরডিফ দিয়ে একটি ব-দ্বীপ তৈরি করা একটি দুটি পদক্ষেপ প্রক্রিয়া। প্রথমে পুরানো ফাইল থেকে একটি স্বাক্ষর ফাইল তৈরি করুন, তারপরে বদ্বীপ তৈরি করতে স্বাক্ষর এবং নতুন ফাইলটি ব্যবহার করুন। এগুলি একসাথে চালানো যেতে পারেrdiff signature oldfile | rdiff delta - newfile deltafile
টোর ক্লিংবার্গ

1
@ টরকলিংবার্গ আপনি একটি উদাহরণ সহ একটি নতুন উত্তর পোস্ট করতে পারেন? আসুন আমরা বলি file1এবং file2প্রতিটি 1GB এর দুটি অনুরূপ ফাইল। 1) কিভাবে পার্থক্য গণনা? 2) প্যাচ ফাইলের মধ্যে এই পার্থক্যটি কীভাবে সংরক্ষণ করবেন? 3) file1পুনরুদ্ধার করতে এই প্যাচ ফাইলটি কীভাবে প্রয়োগ করবেন file2?
বাসজ

7

xdelta আপনি যা চান তা করতে পারে। যথাযথ সতর্কতা যদিও, যদি আপনার চিত্রগুলি খুব অনুরূপ না হয় তবে আপনি একটি খুব বড় প্যাচ দিয়ে শেষ করতে পারেন, কারণ এক্সডেল্টা পার্থক্য সন্ধানের জন্য সংজ্ঞায়িত মেমরি বাফারের অর্ধেক ব্যবহার করে। আরও তথ্য টিউনিং মেমোরি বুজেট উইকি পৃষ্ঠায় উপলভ্য । বাফারের আকার বাড়ানো কিছুটা সাহায্য করতে পারে।

বিএসডিফ আরেকটি বিকল্প, তবে এটি অত্যন্ত ক্ষুধার্ত এবং কোনও ডিস্ক চিত্রের আকারের জন্য সম্পূর্ণ অনুপযুক্ত।

বিএসডিফ বেশ স্মৃতিশক্তিভুক্ত। এটির জন্য max(17*n,9*n+m)+O(1)মেমরির বাইট প্রয়োজন , যেখানে nপুরানো ফাইলের mআকার এবং নতুন ফাইলের আকার। bspatchn+m+O(1) বাইট প্রয়োজন ।


3

ক্যানোনিকাল উত্তর

পোস্টটি আরডিফের বিষয়ে , লিবার্সসিঙ্ক ২.০.১ হ'ল কমান্ড কার্যকারিতা স্পষ্টকরণের জন্য একটি ভাল পঠিত তাই আমি নীচে উল্লেখ করেছি যে এই উত্তরটিতে অন্য কিছু না থাকলে সংরক্ষণ করুন।

একটি ফাইল আপডেট করার জন্য আরডিফের তিনটি ধাপ সম্পর্কে ভালভাবে বোঝার চেষ্টা করা গুরুত্বপূর্ণ : আরডিফ ম্যান পৃষ্ঠায় কথিত হিসাবে স্বাক্ষর , ডেল্টা এবং প্যাচ । আমি rdiffগিটহাবের একটি কমান্ড উদাহরণ স্ক্রিপ্টও পেয়েছি এটি সহায়ক যা আমি উল্লেখ করব এবং উদ্ধৃত করব।

মূলত ...

  1. একটি "শুরু" বা বেস ফাইল [ file1] দিয়ে এবং আপনি এটি থেকে একটি স্বাক্ষর ফাইল তৈরি করেন
    • এটি সাধারণত বেস / মূল ফাইলের থেকে অনেক ছোট
  2. সঙ্গে স্বাক্ষর ফাইল আপনি এটা অন্য ফাইল [বিরুদ্ধে তুলনা file2] আপনার বেস ফাইল অনুরূপ কিন্তু বিভিন্ন ( যেমন সম্প্রতি আপডেট ) এবং একটি তৈরি ব-দ্বীপ ফাইল দুটি ফাইলের মধ্যে মাত্র পার্থক্য ধারণকারী
  3. "কেবলমাত্র পার্থক্য" বা ব-দ্বীপ ফাইলটি ব্যবহার করুন এবং এটির সাথে আপনার তুলনা করুন আপনার বেস ফাইল [ file1] সাথে একটি নতুন ফাইল উত্পন্ন করতে অন্য ফাইল থেকে পরিবর্তনগুলি অন্তর্ভুক্ত [ file2] দুটির সাথে মিলে।

দ্রুত আদেশ (প্রতি rdiff-example.sh)

rdiff signature file1 signature-file            ## signature base file1
rdiff delta signature-file file2 delta-file     ## delta differences file2
rdiff patch file1 delta-file gen-file           ## compare delta to file1 to create matching file2

rdiff-example.sh

# $ rdiff --help
# Usage: rdiff [OPTIONS] signature [BASIS [SIGNATURE]]
#              [OPTIONS] delta SIGNATURE [NEWFILE [DELTA]]
#              [OPTIONS] patch BASIS [DELTA [NEWFILE]]

# Options:
#   -v, --verbose             Trace internal processing
#   -V, --version             Show program version
#   -?, --help                Show this help message
#   -s, --statistics          Show performance statistics
# Delta-encoding options:
#   -b, --block-size=BYTES    Signature block size
#   -S, --sum-size=BYTES      Set signature strength
#       --paranoia            Verify all rolling checksums
# IO options:
#   -I, --input-size=BYTES    Input buffer size
#   -O, --output-size=BYTES   Output buffer size

# create signature for old file
rdiff signature old-file signature-file
# create delta using signature file and new file
rdiff delta signature-file new-file delta-file
# generate new file using old file and delta
rdiff patch old-file delta-file gen-file
# test
diff -s gen-file new-file
# Files gen-file and new-file are identical

ভূমিকা

rdiff নেটওয়ার্ক ডেল্টাস গণনা এবং প্রয়োগ করার জন্য একটি প্রোগ্রাম is একটি আরডিফ ডেল্টা বাইনারি ফাইলগুলির মধ্যে একটি ব-দ্বীপ যা বর্ণনা করে যে কীভাবে কোনও ফলাফল (বা নতুন) ফাইল তৈরি করতে কোনও ভিত্তি (বা পুরানো) ফাইলটি স্বয়ংক্রিয়ভাবে সম্পাদনা করা যেতে পারে।

সর্বাধিক ভিন্ন প্রোগ্রামগুলির থেকে পৃথক, যখন ভিন্নতা গণনা করা হয় তখন লিবারসিঙ্ক উভয়ই ফাইলের অ্যাক্সেসের প্রয়োজন হয় না। একটি ব-দ্বীপ গণনা করার জন্য পুরানো ফাইলের একটি সংক্ষিপ্ত "স্বাক্ষর" এবং নতুন ফাইলের সম্পূর্ণ বিষয়বস্তু প্রয়োজন। স্বাক্ষরটিতে পুরানো ফাইলের ব্লকগুলির জন্য চেকসাম রয়েছে। এই চেকসামগুলি ব্যবহার করে, আরডিফ নতুন ফাইলটিতে মেলানো ব্লকগুলি সন্ধান করে এবং তারপরে ব-দ্বীপের গণনা করে।

rdiff ডেল্টাস সাধারণত কম কমপ্যাক্ট এবং এক্সডেল্টাস বা নিয়মিত পাঠ্য বিভেদের তুলনায় ধীর গতির হয়। যদি ব-দ্বীপ গণনা করার সময় পুরানো এবং নতুন উভয় ফাইল উপস্থিত থাকা সম্ভব হয়, তবে এক্সডেল্টা সাধারণত একটি খুব ছোট ফাইল তৈরি করে। ফাইলগুলির তুলনা করা যদি সরল পাঠ্য হয় তবে জিএনইউ ডিফ সাধারণত ভাল পছন্দ হয় কারণ ডিফগুলি মানুষের দ্বারা দেখা যায় এবং অক্ষত মিল হিসাবে প্রয়োগ করা যেতে পারে।

উভয় ফাইল একই সাথে উপস্থিত করা সুবিধাজনক না হলে rdiff তার নিজের মধ্যে আসে। এর একটি উদাহরণ হ'ল দুটি ফাইল পৃথক মেশিনে রয়েছে এবং আপনি কেবলমাত্র পার্থক্য স্থানান্তর করতে চান। অন্য উদাহরণটি হ'ল যখন কোনও ফাইল সংরক্ষণাগার বা ব্যাকআপ মিডিয়াতে স্থানান্তরিত হয়, কেবল তার স্বাক্ষর রেখে।

প্রতীকী

signature(basis-file) -> sig-file

delta(sig-file, new-file) -> delta-file

patch(basis-file, delta-file) -> recreated-file

নিদর্শন ব্যবহার করুন

আরএসআইএনসি অ্যালগরিদমের একটি সাধারণ অ্যাপ্লিকেশন হ'ল মেশিন এ থেকে একটি ফাইল এ 2 একটি মেশিন বিতে স্থানান্তর করা যার অনুরূপ ফাইল এ 1 রয়েছে। ইহা এভাবে করা যাবে:

  1. বি এ 1 এর আরডিফ স্বাক্ষর তৈরি করে। এই এস 1 কল করুন। বি এ-তে স্বাক্ষর প্রেরণ করে (স্বাক্ষরটি সাধারণত বর্ণিত ফাইলের তুলনায় অনেক ছোট)
  2. একটি এস 1 এবং এ 2 এর মধ্যে আরডিফ ডেল্টাকে গণনা করে। এই ব-দ্বীপটিকে কল করুন ডি এ ব-দ্বীপটি প্রেরণ করে B.
  3. বি এ 2 পুনরায় তৈরি করতে ব-দ্বীপ প্রয়োগ করে। যে ক্ষেত্রে এ 1 এবং এ 2 এর সাথে অভিন্ন বাইট রয়েছে, সেখানে rdiff একটি গুরুত্বপূর্ণ স্থান সাশ্রয় করে।

সূত্র


1
আপনাকে অনেক ধন্যবাদ!
বসজ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.