চেকসাম অন্তর্ভুক্ত একটি টার ফাইল তৈরি করা


16

আমার সমস্যাটি এখানে: বড় ফাইলগুলি (সাধারণত 30 থেকে 40 গিগাবাইট) প্রচুর পরিমাণে (60 টিবি অবধি) ফাইলগুলি সংরক্ষণ করতে আমার সংরক্ষণ করা দরকার। সংরক্ষণাগারের আগে এই ফাইলগুলির চেকসাম (এমডি 5, শ 1, যাই হোক না কেন) তৈরি করতে চাই; তবে প্রতিটি ফাইল দুবার না পড়া (একবার চেকসামিংয়ের জন্য, একবার দু'বার ট্যারি করার জন্য) খুব উচ্চ আর্কাইভিং পারফরম্যান্স অর্জনের প্রয়োজনীয়তা কম-বেশি প্রয়োজন (এলটিও -4 চাইলে 120 এমবি / সেকেন্ডে টিকিয়ে রাখতে চায়, এবং ব্যাকআপ উইন্ডো সীমাবদ্ধ)।

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

tar cf - files | tee tarfile.tar | md5sum -

আমি বাদে পুরো আর্কাইভের চেকসাম চাই না (এই নমুনা শেল কোডটি এটি কেবল এটি করে) তবে সংরক্ষণাগারে প্রতিটি পৃথক ফাইলের জন্য একটি চেকসাম চাই না।

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


3
অবশ্যই tarআপনি এটি লেখার সিদ্ধান্ত নিলে একটি দরকারী সংযোজনের মতো শোনাচ্ছে ;)

1
না আপনার প্রশ্ন, কিন্তু 7zআপনি হ্যাশ নির্বাচন করতে পারবেন এবং একটি উপায়ে তা প্রিন্ট করা হবে sha1sumএবং sha256sumবুঝতে পারেন: 7zip.bugaco.com/7zip/7zip_15_09/MANUAL/cmdline/commands/... (এবং sami-lehtinen.net/blog/... ) এটি ব্যবহার করে দেখুন: 7z h -scrcsha256 mydir/* | sed --regexp-extended 's, +[0-9]+ +, ,g' > mydir.sha256sum ; sha256sum -c mydir.sha256sum(p7zip সংস্করণ 15.09 বিটা দিয়ে পরীক্ষা করা হয়েছে)
নেমো

উত্তর:


15

এগিয়ে যাওয়ার আগে এবং পুনরায় লেখার আগে, আপনি দুবার ডেটা পড়ার দ্রুত এবং সহজ পদ্ধতির প্রোফাইল করতে চাইতে পারেন, কারণ এটি একটি পাসে করার চেয়ে ধীর নাও হতে পারে।

দুটি পাসের পদ্ধতিটি এখানে চাপানো হয়েছে:

http://www.g-loaded.eu/2007/12/01/veritar-verify-checksums-of-files-within-a-tar-archive/

ওয়ান-লাইনার সহ:

  tar -cvpf mybackup.tar myfiles/| xargs -I '{}' sh -c "test -f '{}' && 
  md5sum '{}'" | tee mybackup.md5

যদিও এটি সত্য যে md5sum প্রতিটি ফাইলই তারার সাথে সমান্তরালভাবে পড়ছে, পাইপের মাধ্যমে তথ্য প্রবাহিত করার পরিবর্তে, লিনাক্স ডিস্ক ক্যাশে করা এই দ্বিতীয়টি মেমরি বাফার থেকে একটি সাধারণ পাঠ করা উচিত, যা সত্যিকারের চেয়ে ধীর হওয়া উচিত নয় একটি স্টিডিন পড়া। আপনার কেবলমাত্র নিশ্চিত করতে হবে যে আপনার ডিস্ক ক্যাশে আপনার প্রতিটি ফাইলের পর্যাপ্ত পরিমাণ রয়েছে যা ২ য় পাঠক সর্বদা ক্যাশে থেকে পড়ছেন এবং ডিস্ক থেকে পুনরুদ্ধার করতে যথেষ্ট পিছনে পাচ্ছেন না


3
এটি আসলে বেশ সূক্ষ্মভাবে কাজ করে, এটি সিপিইউ থেকে এমডি 5 (একটি কোরতে ~ 280MB / s) ক্রંચ করার ক্ষমতা দ্বারা সীমাবদ্ধ দেখায়।
wazoox

4

পাইথন স্ক্রিপ্টের একটি উদাহরণ এখানে। এটি সংরক্ষণাগারে যুক্ত হওয়ার সাথে সাথে ফাইলটির চেকসাম গণনা করে। স্ক্রিপ্টের শেষে, চেকসাম ফাইলটি সংরক্ষণাগারে যুক্ত করা হয়।

import hashlib,os
import tarfile
def md5(filename):
    ''' function to get md5 of file '''
    d = hashlib.md5()
    try:
        d.update(open(filename).read())
    except Exception,e:
        print e
    else:
        return d.hexdigest()

root="/home"
outtar=os.path.join(root,"path1","output.tar")
path = os.path.join(root,"path1")
chksum_file=os.path.join(root,"path","chksum.txt")
tar = tarfile.open(outtar, "w")
o_chksum=open(chksum_file,"w")
for r,d,f in os.walk(path):
    for files in f:
        filename=os.path.join(r,files)
        digest="%s:%s"%(md5(filename) , filename)
        o_chksum.write(digest+"\n")
        tar.add(os.path.join(r,files))

tar.add(chksum_file)
tar.close()
o_chksum.close()

যখন আপনি অনড় করবেন, চেকসাম যাচাই করতে chksum_file ব্যবহার করুন


1
হ্যাঁ এটি এমনই কিছু যা আমি ভেবেছিলাম, তবে সাধারণত এই ধরণের লাইব্রেরিগুলি ম্যানিপুলেট করার আগে ফাইলটি র‍্যামে লোড করে এবং আমার ফাইলগুলি কমপক্ষে 20 জিবি হয় ....
ওয়াজুক্স

1

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


1
দুর্ভাগ্যক্রমে টার আউটপুট বাধ্যতামূলক, কারণ এটিই ওয়ার্কফ্লো উপর নির্ভর করে।
wazoox

0

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

আপনি সংরক্ষণাগারে থাকা এম্বেড থাকা থেকে পৃথক হ্যাশগুলির স্থানীয় অনুলিপি সংরক্ষণ করতে চাইতে পারেন: উদাহরণস্বরূপ যদি সংরক্ষণাগারটি অফলাইনে সংরক্ষণ করা থাকে (টেপগুলি বা কোনও ডেটা সেন্টারে যা পড়তে ব্যয়বহুল) এবং আপনি একটি যাচাই করতে চান একটি ফাইল / ডিরেক্টরি স্থানীয় কপি।

7 জীপের বিভিন্ন বিকল্প রয়েছে যেমন 7z hকাস্টম হ্যাশের সাথে এবং 7z l -sltসমস্ত হ্যাশগুলির তালিকা তৈরি করতে এবং কী নয় আপনি যদি এমডি 5 বা শ 1 হ্যাশগুলির একটি তালিকা চান তবে কী করবেন? আপনি ব্যবহার করতে পারেন -bbএবং-bs নিয়ন্ত্রণ ভারবোসিটি প্রয়োজন এবং জর্জ Notaras পদ্ধতি গৃহীত উত্তর উল্লেখিত পুনরায় ব্যবহার:

7z a -bsp1 -bb3 dir.7z dir 2>&1 \
| grep "^+" | sed 's,^+ ,,g' | xargs -d "\n" -I § -P 1 sh -c "test -f '§' && sha1sum '§'" \
| tee dir.sha1
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.