অগ্রগতি রিপোর্টের সাথে বিশাল ডিরেক্টরিগুলির তুলনা করুন


13

আমি কেবলমাত্র একটি RAID থেকে অন্য 2,000,000 ফাইল (3TB) কে আরএসআইসি-এড করেছি।

আমি নিশ্চিত করতে চাই যে আমার ডেটা অক্ষত আছে।

rsync -c সত্যিই একটি দীর্ঘ সময় লাগে।

diff এটা কি করছে তা আমাকে দেখায় না

(ক) দ্রুত, এবং (খ) তুলনা করার সময় আমাকে অগ্রগতি দেখিয়ে দেবে এমন কোনও বিকল্প আছে কি?

(আমি ম্যাক এ আছি, এবং brew search diffআমাকে দিচ্ছি apgdiff colordiff diffstat diffutils fmdiff libxdiff open-vcdiff podiff rfcdiff vbindiff bsdiff diffpdf diffuse dwdiff kdiff3 ndiff perceptualdiff rdiff-backup tkdiff wdiff ... এর মধ্যে কেউ কাজ করবে?)


ডুপ্লিকেট superuser.com/questions/708001/...
spuder

আমি rsyncপ্রায় বিভ্রান্ত হয়ে পড়েছি কেন প্রায় diff150MB / s এ ডেটা অনুলিপি করা হয়েছে, এখনও 60MB / s এর সাথে তুলনা করা হচ্ছে ...?
ড্যান

1
ডিফল্টরূপে ব্যবহার rsyncকরা অনুলিপিটি দ্রুতগতিতে বি / সি দ্রুততর rsyncফাইলগুলির তুলনায় চেকসাম ব্যবহার করে না, এটি আকার এবং তারিখের তথ্য দেখে। আপনি যখন rsync -cসমস্ত ফাইল ব্যবহার করেন তখন তাদের চেকসামের গণনা করা দরকার যা একটি ভারী কাজ, সুতরাং এটি কেন ডিফল্ট নয়।
slm

হ্যাঁ, তবে ভিন্নতা অনুলিপি করে না ... এটি কেবল দুটি ফাইলই পড়ে; আরএসআইএনসি করার সময়, অনুলিপি করতে অবশ্যই প্রতিটি বাইট পড়তে হবে, তারপরে লিখতে হবে। এটি স্ক্র্যাচ থেকে একটি RSSync ছিল, সুতরাং এটি প্রতিটি ফাইল অনুলিপি করছিল।
ড্যান

উত্তর:


6

সংশোধন ও বিকল্পের স্বচ্ছতার জন্য সম্পাদনা করুন - আমি '- ব্রিফ' ভুলে গেছি

diff -rs --brief "$dir1" "$dir2" 

-r, --recursive              recursively compare any subdirectories found
-s, --report-identical-files report when two files are the same
-q, --brief                  report only when files differ
--speed-large-files      assume large files and many scattered small changes

আপনি যা তুলনা করছেন তার উপর নির্ভর করে স্বাদে অন্যান্য বিকল্প যুক্ত করুন:

-i, --ignore-case            ignore case differences in file contents
-b, --ignore-space-change    ignore changes in the amount of white space
-B, --ignore-blank-lines     ignore changes whose lines are all blank
--strip-trailing-cr      strip trailing carriage return on input
--ignore-file-name-case  ignore case when comparing file names

ডিফার-আরএসগুলি আসল এবং প্রতিলিপিটির প্রতিটি বাইট পড়বে এবং একই ফাইলগুলির প্রতিবেদন করবে।

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

| tee diff-out.1 | গ্রেপ-ভি-ই 'ফাইলগুলি। * এবং। * অভিন্ন'

আপনি chksums বা হ্যাশ ব্যবহার করতে পারেন, তবে তারপরে আপনাকে সেগুলি ফাইল গাছের সাথে সিঙ্ক করতে হবে, সুতরাং আপনি যে কোনও উপায়ে প্রতিটি ফাইলের প্রতিটি বাইট পড়তে ফিরে আসবেন।

সম্পাদনা - প্রতিক্রিয়া হিসাবে একটি মন্তব্য হতে খুব দীর্ঘ

10 গিগাবাইটের বেশি ফাইল যাচাই করছে না

আপনি এই ভিন্ন বিকল্পটি চেষ্টা করতে চাইতে পারেন: - স্পিড-লার্জ-ফাইলগুলি

সম্ভবত আপনি যে ডিফটি ব্যবহার করছেন তা খুব বড় ফাইল (উদাহরণস্বরূপ সিস্টেমের মেমোরির চেয়ে বড়) এর সাথে ভালভাবে মোকাবেলা করছে না এবং এইভাবে ফাইলগুলির মধ্যে পার্থক্য সম্পর্কে রিপোর্ট করছে যা আসলে একই।

আমি ভেবেছিলাম যে একটি -h বিকল্প বা একটি 'বিডিফ' রয়েছে যা বড় ফাইলগুলিতে আরও ভাল করেছে তবে আমি ফেডোরায় কোনও খুঁজে পাচ্ছি না। আমি বিশ্বাস করি যে - স্পিড-বড়-ফাইল বিকল্পগুলি '-h' "অর্ধ-হৃদয় তুলনা" বিকল্পের উত্তরসূরি।

'-ভিন' (ভার্বোজ, আইটেমাইজ, ন_আরুন) দিয়ে আপনি যে আরএসসিএনসি কমান্ডটি ব্যবহার করেছেন সেটির পুনরাবৃত্তি করার জন্য একটি পৃথক পদ্ধতি হবে। এটি rsync সন্ধান করে এমন কোনও পার্থক্যের প্রতিবেদন করবে - এবং কোনওরকম হওয়া উচিত নয়।

কিছু ফাইল সরানোর জন্য, আপনি কোনও স্ক্রিপ্টের দিকে এমন কিছু খুঁজছেন:

if [ cmp -s "$dir1/$path" "$dir2/$path" ] ; then 
target="$dir2/verified/$path"
mkdir -p $(basename "$target")
mv  "$dir2/$path" "$target"
fi

তবে আমি এটি করার পরামর্শ দিচ্ছি না। অন্তর্নিহিত প্রশ্নটি "আমি কীভাবে নিশ্চিত হতে পারি যে আরএসসিএনসি সঠিকভাবে একটি ফাইলের স্তরক্রম অনুলিপি করেছে?" এবং যদি আপনি নিজের কাছে প্রমাণ করতে পারেন যে ডিএসফ বা অন্য কোনও সরঞ্জামের সাহায্যে আরএসসিএনসি ভালভাবে কাজ করছে তবে আপনি তার চারপাশে কাজ করার পরিবর্তে আরএসইএনসি-র উপর নির্ভর করতে পারেন।

আরএসসিএন-ভিভিন আপনি অন্য যে কোনও অপশনই দেয় তার ভিত্তিতে তুলনা করবে। আমি ভেবেছিলাম এটি চেকসামে ডিফল্ট হয়েছে তবে আপনি ঠিক বলেছেন, এর জন্য -c বা --checksum প্রয়োজন।

ভিন্ন ইউটিলিটিটি সত্যই পাঠ্যের লাইনগুলির ফাইলগুলির জন্য লক্ষ্যযুক্ত, তবে এটি বাইনারি ফাইলগুলির জন্য 'অভিন্ন' হিসাবে রিপোর্ট করা উচিত।

--B ব্রিফের কোনও ফাইল সামগ্রীর আউটপুট দমন করা উচিত - এর আগে এটি উপেক্ষা করার জন্য আমার ক্ষমা - এটি একটি কুরুচিপূর্ণ স্ক্রিপ্টে অর্ধ-কবর দেওয়া হয়েছিল।


mvপুরো পথটি সংরক্ষণ করে ড্রাইভের মূলের একটি "যাচাই করা" ফোল্ডারে পাওয়া প্রতিটি ফাইলের কাছে এটি পাওয়ার কোনও উপায় আছে কি ? উদাহরণস্বরূপ, যদি /disk1/a/b/c/file1অভিন্ন হয় /disk2/a/b/c/file1, তবে এটিকে সরান /disk1/verified/a/b/c/file1। তারপরে আমি কেবল খারাপভাবে অনুলিপি করা ফাইলগুলি দিয়ে শেষ করতে পারতাম। (এখনও পর্যন্ত 10 গিগাবাইটের বেশি সংখ্যক ফাইল যাচাই করছে না, যা ভীতিজনক))
ড্যান

আপনি এই বিকল্পটি চেষ্টা করতে পারেন: - স্পিড-বড়-ফাইলগুলি
ডি

এটা ঠিক কি করে?
ড্যান

যদি আমি দৌড়ে যাই rsync -vin- এটি কি বাইট বাই বাই বা চেকসাম তুলনা করে? আমি ভেবেছি আরএসসিএনসি কেবলমাত্র আকার / তারিখের তুলনা করে আপনি যোগ না করে -c। এবং যা আমি পড়েছি তা speed large filesথেকে কেবল নন-বাইনারি ফাইলগুলির সাথেই কোনও পার্থক্য দেখা যাচ্ছে ... অথবা আমি ভুল করছি?
ড্যান

diffআমাকে "Files __ and ___ differ"... আকারে ফলাফল দেয় sed -e "s/Files /cp -afv /" -e "s/ and / /" -e "s/ differ$//"এবং খারাপ ফাইলগুলি পুনরায় অনুলিপি করার জন্য একটি স্ক্রিপ্ট তৈরি করার চেষ্টা করে চলেছি । তবে ডিফের আউটপুট অযোগ্য, তাই এটি কাজ করে না। আমাকে কি উদ্ধৃতপথ দেওয়ার জন্য এটি পেতে পারি?
ড্যান

4

diffফাইল গণনার উপর ভিত্তি করে অগ্রগতি প্রতিবেদনটি এখানে রয়েছে :

diff -rqs dir1 dir2 | pv -l -s filecount > logfile

আপনার পিভি (পাইপ ভিউয়ার) প্রয়োজন হবে: http://www.ivarch.com/program/pv.shtml

ব্যাখ্যা:

  • diff -r পুনরাবৃত্তির সাথে ডিরেক্টরি এবং উপ-ডিরেক্টরিগুলি তুলনা করুন।
  • diff -qফাইলের কেবল ফাইলের নাম মুদ্রণ করতে পার্থক্য রয়েছে। প্রকৃত পার্থক্য মুদ্রণ করবেন না।
  • diff -sপৃথক নয় এমন ফাইলগুলির ফাইলের নামও মুদ্রণ করুন। এটি অগ্রগতির তথ্যের জন্য গুরুত্বপূর্ণ।
  • pv -l লাইন গণনার উপর ভিত্তি করে অগ্রগতি রিপোর্ট করুন।
  • pv -s count গণনার উপর ভিত্তি করে শেষ করার সময় নির্ধারণ করুন।
  • পুনর্নির্দেশ logfileসুন্দর আউটপুট জন্য। অন্যথায় আউটপুট থেকে diffস্থিতির লাইনের সাথে মিশ্রিত হবে pv

ফাইল গণনা পেতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

find dir1 -type f | wc -l

পৃথক পৃথক ফাইলগুলির জন্য লগফিল ফিল্টার করুন:

grep -v "^Files .* identical$" logfile

এই প্রকরণটি এমন ফাইলগুলি মুদ্রণ করবে যা রিয়েল টাইমে আলাদা হয় এবং সমস্ত কিছুতে লগ ইন করার সময় logfile:

diff -rqs dir1 dir2 | pv -l -s filecount | 
    tee logfile | grep -v "^Files .* identical$"

বিকল্পভাবে আপনি কেবল আলাদা ফাইলগুলিতে লগ করতে পারেন:

diff -rqs dir1 dir2 | pv -l -s filecount | 
    grep -v "^Files .* identical$" > logfile

দ্রষ্টব্য: উপরের কমান্ডগুলি ফাইল গণনার উপর ভিত্তি করে অগ্রগতির প্রতিবেদন করবে। অনেকগুলি ছোট ছোট ফাইল থাকলে এটি সর্বোত্তম কাজ করে। আপনার যদি কয়েকটি বিশাল ফাইল থাকে তবে আপনি এটির সাথে খুব মজা পাবেন না।

দুঃখের সাথে তুলনা করা বাইটের উপর ভিত্তি করে অগ্রগতির প্রতিবেদন করার সহজ উপায় সম্পর্কে আমি জানি না।


আপনি যদি মেটাডেটার তুলনা করে আপনার শান্তি খুঁজে পান (এবং ফাইলগুলির আসল সামগ্রী নয়) তবে আপনি আরএসসিএনসি ব্যবহার করতে পারেন। এটি যথেষ্ট দ্রুত হবে।

বিস্তারিত জানার জন্য:


0

আমি ডেটা অখণ্ডতা যাচাই করতে কিছু ধরণের হ্যাশ অ্যাপ্লিকেশন ব্যবহার করে দেখব। আমি জানি যে অনেকগুলি সদৃশ ফাইল সন্ধানের ইউটিলিটিগুলি সদৃশ / নন-অনুলিপি সনাক্ত করতে হ্যাশ ব্যবহার করে। আমার কাছে মনে হচ্ছে এটি তদন্ত যা সার্থক হতে পারে।


0

আপনি তার জন্য rdiff- ব্যাকআপ ব্যবহার করতে পারেন । এটি উভয় সার্ভারে ইনস্টল করুন এবং এটি চেকসামের স্মার্ট তুলনা করবে এবং যা এখনও নেই তা সিঙ্ক করবে।

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