আমি কীভাবে সহজেই লিনাক্সে নিশ্চিত করতে পারি যে দুটি পৃথক ডিরেক্টরিতে ঠিক একই বিষয়বস্তু রয়েছে?


8

CentOS 5.x

MQ প্রশ্নের অনুরূপ করলো এই এক কিন্তু আমি নিশ্চিত ছিলাম না ...

আমার দুটি সার্ভার রয়েছে (একে অপরের থেকে সম্পূর্ণ বিচ্ছিন্ন), প্রত্যেকেরই ডিরেক্টরি এবং উপ-ডিরেক্টরি রয়েছে যাতে একই একই বিষয়বস্তু থাকা উচিত।

উদাহরণস্বরূপ ডিরেক্টরি বিন্যাসটি এমন কিছু হতে পারে:

সার্ভার এ -

/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt

সার্ভার বি -

/opt/foo/foob/1092380298309128301283/123.txt
/opt/foo/foob/5094380298309128301283/456.txt
/opt/foo/foob/5092380298309128301283/789.txt
/opt/foo/foob/1592380298309128301283/abc.txt

আদর্শভাবে আমি একটি পুনরাবৃত্ত চেক করার একটি উপায় চাই এবং কিছু মিল রয়েছে তা নিশ্চিত করেই সবকিছু মিলছে।

আমি কোনও তৃতীয় পক্ষের সরঞ্জাম ব্যবহার এড়াতে চাই।

কোন ধারনা?


আপনি কি কেবল দুটি ডিরেক্টরি তুলনা করতে চান, বা আসলে একটিকে অন্যটির নকল তৈরি করতে চান?
স্কট প্যাক 20

@ স্কটপ্যাক দুর্দান্ত প্রশ্ন। আমি তুলনা করতে চাই তবে কোনও পরিবর্তন আনতে চাই না। অন্য কিছু হ'ল ডিরেক্টরিগুলির প্রতিরূপ পরিচালনা করছে। আমি এটি নিশ্চিত করতে চাই যে এটি কাজ করছে।
মাইক বি

1
আপনি ইতিমধ্যে এই প্রশ্ন ট্যাগ rsync? সুতরাং ... আহ, ব্যবহার rsync( -nবিকল্প সহ)?
দুর্বল

@ ফেকার আমি ভেবেছিলাম আরএসসিএনসি বিকল্প হতে পারে তবে এই ব্যবহারের ক্ষেত্রে আরও ভাল, সহজ বা আরও নির্দিষ্ট কিছু আছে কিনা তা নিশ্চিত ছিলাম না। আমার জানা দরকার যে ফাইলের নাম, তারিখ, আকার এবং আপেক্ষিক অবস্থানের মিল রয়েছে।
মাইক বি

নোট করুন যে সময় এবং আকার মিললে আরএসএনসি ফাইলের সামগ্রীগুলি চেক করে না,
স্টু

উত্তর:


9

একটি ভাল উপায় গাছের প্রতিটি ফাইলের উপর md5sums ব্যবহার করা হয়:

সার্ভার 1 এ এটি চালান:

find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum > report_from_server1.tx

এটি সার্ভার 2 এ চালান

find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum > report_from_server2.tx

তারপরে দুটি ফাইল (ডিফ ব্যবহার করে) বা আপনার পছন্দ মত যা কিছু আছে তার সাথে তুলনা করুন।

আপনি যা খুঁজছেন তার লাইনের পাশাপাশি এটি কি?

অবশ্যই, আপনি চাইলে দূরবর্তীভাবে কমান্ডটি কার্যকর করতে আপনি এসএসএইচ ব্যবহার করতে পারেন।


ধন্যবাদ ক্যামডেন হ্যাঁ, আমি মনে করি এটিই আমি খুঁজছিলাম। আমি এটি পরীক্ষা করে দেখব এটি কার্যকর হয় কিনা।
মাইক বি

2
অথবা md5sum md5sums
dmourat

দুর্দান্ত - ঠিক আছে, যদি কোন ফাইলটি পরিবর্তিত হয় তা যদি আপনার যত্ন না করে থাকেন তবে আপনি ফলস্বরূপ ফাইলগুলি কেবলমাত্র md5sum করতে পারেন এবং এই দুটি অঙ্কের তুলনা করতে পারেন।
ক্যামডেন এস

এছাড়াও, আপনি সম্ভবত এটি ইতিমধ্যে জানেন, কিন্তু এসএসএইচের মাধ্যমে দূরবর্তীভাবে এই আদেশটি কার্যকর করতে, আপনি কেবল তা করতে চাইবেনssh user@servera 'find /opt/foo/foob/ -type f -print0 | xargs -0 md5sum'
ক্যামডেন এস।

1
মাইকিব, পুনরাবৃত্ত দীর্ঘ তালিকা সম্পাদন করে এবং এমডি 5sum এ পাস করার মাধ্যমে, আপনি ডিরেক্টরি তালিকার একটি এমডি 5সাম পাচ্ছেন, যা ফাইলগুলির বিষয়বস্তু বাদ দেবে। যদি উভয় প্রান্তে ফাইল সিস্টেমে ইনোড আকারগুলি পৃথক হয় তবে এটি খুব ভাল ফাইল আকারেও একটি পার্থক্য তৈরি করতে পারে। মূলত @ ক্যামডেনস-এর পরামর্শ মতো সামগ্রীতে এমডি 5sum করা। ভাল.
কাছাকাছি

7

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

rsync -avcn /opt/foo/ serverb:/opt/foo

ফলাফলের তালিকাটি সেই ফাইলগুলি হবে যা আপনি যদি সিঙ্ক প্রক্রিয়াটি বাস্তবে চালিত করেন তবে তা সংশোধন করা হত। মনে রাখবেন যে ফাইলগুলি কেবল টাইমস্ট্যাম্প পরিবর্তিত হলেও তালিকায় প্রদর্শিত হবে তবে বিষয়বস্তুটি একই থাকবে। যেহেতু আমরা -nপতাকাটি যুক্ত করেছি, তখন কোনও ক্রিয়াকলাপ বাস্তবে সম্পাদিত হবে না, কেবলমাত্র রিপোর্ট করা হয়েছে।


ধন্যবাদ। যদি দুটি বাক্স একে অপরের থেকে সম্পূর্ণ বিচ্ছিন্ন হয়? আমি কীভাবে তুলনা করতে আউটপুট ব্যবহার করতে পারি?
মাইক বি

rsync দূরবর্তী হওয়ার জন্য উত্স এবং গন্তব্য উভয়কেই সমর্থন করে না, তাই তাকে এটি তার সার্ভারগুলির মধ্যে একটি থেকে চালানো দরকার
ফেকার

@ ফেকার: স্বীকার করতে হবে, এর আগে কখনও চেষ্টা করে দেখিনি, জেনে রাখা ভাল। আপনি যেমনটি বলেছেন, তবে এটি হিসাব করা যথেষ্ট সহজ।
স্কট প্যাক

+1 টি। এর চতুর ব্যবহার rsync। সম্পূর্ণরূপে সঠিক হওয়ার জন্য, আপনাকে rsyncউভয় দিক দিয়ে চালানো দরকার । এটি হ'ল, আপনাকে এটি যুক্ত করতে হবে:rsync -avcn serverb:/opt/foo/ /opt/foo
স্টিভেন সোমবার

5

আপনি একটি দ্রুত স্ক্রিপ্ট একসাথে হ্যাক করতে পারবেন যা ডিরেক্টরিতে পৃথক ফাইলগুলির জন্য পৃথক MD5 হ্যাশ গণনা করতে পারে, তবে এর থেকে আরও ভাল উপায় md5deepহ'ল একটি সরঞ্জাম ব্যবহার করা হবে যা ডিরেক্টরিতে সমস্ত ফাইলের হ্যাশগুলি পুনরাবৃত্তভাবে গণনা করে এবং তারপরে আউটপুট দেয় একটি ফাইল তাদের। এরপরে এটি অন্য ডিরেক্টরিতে ব্যবহার করা যেতে পারে, প্রথম হ্যাশ ফাইলটিকে ইনপুট হিসাবে নেওয়া এবং দুটি ডিরেক্টরিতে পৃথক পৃথক ফাইলগুলির একটি তালিকা সরবরাহ করা।

সুতরাং, আপনার উদাহরণ গ্রহণ করে, আপনি এই প্রক্রিয়াটি অনুসরণ করবেন:

  1. সার্ভার এ-তে প্রয়োজনীয় ডিরেক্টরি হ্যাশ গণনা করুন:

    md5deep -r /opt/foo/ > file_hashes.txt

  2. file_hashes.txtতুলনার জন্য সার্ভার বি তে ফাইল ফাইলটি অনুলিপি করুন ।

  3. সার্ভার বি-তে প্রয়োজনীয় ডিরেক্টরি হ্যাশ গণনা করুন, তবে সার্ভার এ থেকে ফাইল হ্যাশগুলি ইনপুট ফাইল হিসাবে নেওয়া -xকেবলমাত্র পৃথক পৃথক ফাইলগুলি দেখানোর জন্য পতাকা ব্যবহার করে :

    md5deep -x file_hashes.txt -r /opt/foo/

সরঞ্জামগুলির এমডি 5 ডিভিডি সেট বেশিরভাগ ডিস্ট্রোজের প্যাকেজ ম্যানেজমেন্ট সিস্টেমের অংশ গঠন করে এবং দুর্দান্ত জিনিসটি এটি কেবল এমডি 5 নয়, বিভিন্ন হ্যাশিং অ্যালগরিদমকে সমর্থন করে। সুতরাং যদি আপনি সংঘর্ষগুলি সম্পর্কে ভৌতিক হয়ে থাকেন তবে আপনার কাছে প্রচুর বিকল্প উপলব্ধ রয়েছে। নিম্নলিখিত সরঞ্জামগুলি এমডি 5 প্রদীপের অংশ গঠন করে, যার প্রতিটি বিকল্প হ্যাশিং অ্যালগরিদম সরবরাহ করে:

   md5deep - Compute and compare MD5 message digests
   sha1deep - Compute and compare SHA-1 message digests
   sha256deep - Compute and compare SHA-256 message digests
   tigerdeep - Compute and compare Tiger message digests
   whirlpooldeep - Compute and compare Whirlpool message digests

0

আমি @ স্কট-প্যাকের মতো একটি কৌশল ব্যবহার করেছি এটি আপনাকে দ্বি-দিকের পৃথকীকরণ বলবে। "মুছে ফেলার" সাথে শুরু হওয়া সমস্ত কিছুই একটি ফাইল যা দূরবর্তী সার্ভারে রয়েছে তবে স্থানীয় সার্ভারে নয়। কোনও ফাইলের বিষয়বস্তু ছাড়া তালিকাভুক্ত প্রতিটি ডিরেক্টরি এমন একটি যা কোনও পরিবর্তন করে না। তালিকাভুক্ত প্রতিটি ফাইলই এমন একটি ফাইল যা হয় দূরবর্তী সার্ভারে নেই বা এটি স্থানীয় সংস্করণটি "নতুন"।

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