ট্যার + জিজিপ / বিজিপ সংক্ষেপণ / ডেকম্প্রেশন জন্য মাল্টি কোর ব্যবহার করা


225

আমি সাধারণত ব্যবহার করে সংকুচিত tar zcvfএবং সংক্রামক tar zxvf(অভ্যাসের কারণে gzip ব্যবহার করে)।

আমি সম্প্রতি হাইপারথ্রেডিংয়ের সাথে একটি কোয়াড কোর সিপিইউ অর্জন করেছি, সুতরাং আমার কাছে 8 টি লজিকাল কোর রয়েছে এবং আমি লক্ষ্য করেছি যে অনেকগুলি কোর সংক্ষেপণ / ডিকম্প্রেশন চলাকালীন অব্যবহৃত।

অব্যক্ত কোরগুলি আরও দ্রুততর করার জন্য আমি কি কোনও উপায় ব্যবহার করতে পারি?


উপরে জিয়ানগ চিয়ামিয়াভ প্রস্তাবিত সমাধানটি সুন্দরভাবে কাজ করে। আমি আমার ল্যাপটপটি .tar.bz2 দিয়ে সবেমাত্র ব্যাক আপ করেছিলাম এবং কেবলমাত্র একটি সিপু থ্রেড ব্যবহার করে 132 মিনিট সময় লেগেছে। তারপরে আমি উত্স থেকে টার সংকলন এবং ইনস্টল করেছি : gnu.org/software/tar আমি কনফিগার পদক্ষেপে উল্লিখিত বিকল্পগুলি অন্তর্ভুক্ত করেছি: ./configure --with-gzip = pigz --with-bzip2 = lbzip2 --with-lzip = plzip আমি আবার ব্যাকআপটি চালিয়েছি এবং এটি মাত্র 32 মিনিট সময় নেয়। এটি 4X উন্নতির চেয়ে ভাল! আমি সিস্টেম মনিটরটি দেখেছি এবং এটি সমস্ত 4 সিপাস (8 থ্রেড) পুরো সময়টিতে 100% এ ফ্ল্যাটলাইন করে রেখেছিল। এটিই সেরা সমাধান।
ওয়ারেন সেভেরিন

উত্তর:


309

আপনি জিজিপের পরিবর্তে পিগজ ব্যবহার করতে পারেন যা একাধিক কোরগুলিতে জিপিপ সংকোচন করে। -Z বিকল্পটি ব্যবহার করার পরিবর্তে, আপনি এটি পিগজ মাধ্যমে পাইপ করবেন:

tar cf - paths-to-archive | pigz > archive.tar.gz

ডিফল্টরূপে, পিগজ উপলব্ধ কোরগুলির সংখ্যা বা আটটি ব্যবহার করে যদি এটি জিজ্ঞাসা করতে না পারে। আপনি -pn দিয়ে আরও জানতে চাইতে পারেন, যেমন -p 32. পিগজ-এ জিজেপ-এর মতো একই বিকল্প রয়েছে, তাই আপনি -9 দিয়ে আরও ভাল সংক্ষেপণের জন্য অনুরোধ করতে পারেন। যেমন

tar cf - paths-to-archive | pigz -9 -p 32 > archive.tar.gz

3
আপনি কীভাবে একই ফ্যাশনে ডিকম্প্রেস করতে পিগজ ব্যবহার করেন? বা এটি কেবল সংক্ষেপণের জন্য কাজ করে?
ব্যবহারকারী 788171

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

7
হাইফেনটি এখানে স্টডআউট ( এই পৃষ্ঠাটি দেখুন )।
গ্যারেট

3
হ্যাঁ. উভয় দিকের ক্ষেত্রে 100% সামঞ্জস্যপূর্ণ।
মার্ক অ্যাডলার

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

324

আপনি কী সংকোচনের প্রোগ্রামটি ব্যবহার করতে হবে তা বলতে ট্যার ফ্ল্যাগটি "--use-compress-program =" ব্যবহার করতে পারেন।

উদাহরণস্বরূপ ব্যবহার:

tar -c --use-compress-program=pigz -f tar.file dir_to_zip 

21
এটি জ্ঞানের একটি দুর্দান্ত সামান্য কৌতুক এবং আরও উন্নয়নের দাবি রাখে। এমনকি এই বিকল্পটির অস্তিত্ব সম্পর্কে আমার কোনও ধারণা ছিল না এবং কয়েক বছর ধরে আমি ম্যান পৃষ্ঠাটি কয়েকবার পড়েছি।
র‌্যান্ডাল হান্ট

2
@ ভ্যালারিওচিয়াভোনি: এখানে নেই, আমি সমস্ত চারটি কোরে পূর্ণ বোঝা পেয়েছি (উবুন্টু 15.04 'বিভিড')।
বোল্ডার

8
আমি পছন্দ করি tar - dir_to_zip | pv | pigz > tar.fileপিভি আমাকে অনুমান করতে সহায়তা করে আপনি এটি এড়িয়ে যেতে পারেন। তবে তবুও এটি লিখতে এবং মনে রাখা সহজ।
অফেনসো

@ নাথান.ওয়াটসন-হাই আপনি হ্যাঁ কেবলমাত্র প্রোগ্রামের নাম এবং যুক্তিগুলি উদ্ধৃতিতে সংযুক্ত করুন। man tarবলেছেন, তাই না এই
২৩7777

1
2020 এ, zstdএটি করার দ্রুততম সরঞ্জাম। সংকোচনের সময় এবং সংক্ষেপিত করার সময় লক্ষ্যণীয় স্পিডআপ। tar -cf --use-compress-program=zstdmtমাল্টি-থ্রেডিংয়ের মাধ্যমে এটি করতে ব্যবহার করুন ।
jadelord

112

সাধারণ পদ্ধতি

tarপ্রোগ্রামের জন্য বিকল্প রয়েছে :

-I, --use-compress-program PROG
      filter through PROG (must accept -d)

আপনি আরচিভার বা সংক্ষেপক ইউটিলিটির মাল্টিথ্রেড সংস্করণ ব্যবহার করতে পারেন।

সর্বাধিক জনপ্রিয় মাল্টিথ্রেড সংরক্ষণাগারগুলি হ'ল পিগজ ( জিজিপের পরিবর্তে) এবং পিবিজিপ 2 (বিজিপ 2 এর পরিবর্তে)। এই ক্ষেত্রে:

$ tar -I pbzip2 -cf OUTPUT_FILE.tar.bz2 paths_to_archive
$ tar --use-compress-program=pigz -cf OUTPUT_FILE.tar.gz paths_to_archive

আর্কিভার অবশ্যই গ্রহণ করতে হবে -ড। যদি আপনার প্রতিস্থাপন ইউটিলিটিটিতে এই প্যারামিটারটি নেই এবং / অথবা আপনার অতিরিক্ত প্যারামিটার নির্দিষ্ট করা দরকার, তবে পাইপগুলি ব্যবহার করুন (প্রয়োজনে প্যারামিটার যুক্ত করুন):

$ tar cf - paths_to_archive | pbzip2 > OUTPUT_FILE.tar.gz
$ tar cf - paths_to_archive | pigz > OUTPUT_FILE.tar.gz

সিঙ্গলথ্রেড এবং মাল্টিথ্রেডের ইনপুট এবং আউটপুট সামঞ্জস্যপূর্ণ। আপনি মাল্টিথ্রিড সংস্করণ ব্যবহার করে সংকোচন করতে পারেন এবং সিঙ্গলথ্রেড সংস্করণ এবং বিপরীত ব্যবহার করে ডিকম্প্রেস করতে পারেন।

p7zip

সংক্ষেপণের জন্য পি 7 জীপের জন্য আপনার নীচের মতো একটি ছোট শেল স্ক্রিপ্ট দরকার:

#!/bin/sh
case $1 in
  -d) 7za -txz -si -so e;;
   *) 7za -txz -si -so a .;;
esac 2>/dev/null

এটি 7zhelper.sh হিসাবে সংরক্ষণ করুন। এখানে ব্যবহারের উদাহরণ:

$ tar -I 7zhelper.sh -cf OUTPUT_FILE.tar.7z paths_to_archive
$ tar -I 7zhelper.sh -xf OUTPUT_FILE.tar.7z

ভাবে xZ লস

মাল্টিথ্রেডেড এক্সজেড সমর্থন সম্পর্কিত। আপনি যদি XZ ইউটিলসের 5.2.0 বা তার বেশি সংস্করণটি চালাচ্ছেন তবে আপনি পরিবেশগত পরিবর্তনশীল এক্সজেড_ডিএফএএলটিএস (উদাহরণস্বরূপ ) এর মাধ্যমে সংক্ষেপণের জন্য -Tবা --threadsউপযুক্ত মান হিসাবে একাধিক কোর ব্যবহার করতে পারেন XZ_DEFAULTS="-T 0"

এটি 5.1.0 আলফা সংস্করণের জন্য মানুষের একটি টুকরা:

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

তবে এটি থ্রেডিং সক্ষমের সাথে সংকুচিত হয়নি এমন ফাইলগুলির সংক্ষেপনের জন্য কাজ করবে না। 5.2.2 সংস্করণের জন্য মানুষের কাছ থেকে:

থ্রেডড ডিকম্প্রেশন এখনও কার্যকর করা হয়নি। এটি কেবলমাত্র সেই ফাইলগুলিতে কাজ করবে যা ব্লক শিরোনামে আকারের তথ্য সহ একাধিক ব্লক ধারণ করে। মাল্টি-থ্রেড মোডে সংকুচিত সমস্ত ফাইলগুলি এই শর্তটি পূরণ করে, তবে একক থ্রেডযুক্ত মোডে সংকুচিত ফাইলগুলি - ব্লক-আকার = আকার ব্যবহৃত না হলেও।

প্রতিস্থাপনের সাথে সংশোধন করা হচ্ছে

আপনি যদি উত্সগুলি থেকে টার তৈরি করেন, তবে আপনি পরামিতিগুলির সাথে পুনরায় কম্পাইল করতে পারেন

--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip

এই বিকল্পগুলির সাথে ডার পুনরায় সংবিধানের পরে আপনি তার সহায়তার আউটপুট পরীক্ষা করতে পারেন:

$ tar --help | grep "lbzip2\|plzip\|pigz"
  -j, --bzip2                filter the archive through lbzip2
      --lzip                 filter the archive through plzip
  -z, --gzip, --gunzip, --ungzip   filter the archive through pigz

1
এটি সত্যই সেরা উত্তর। আমি অবশ্যই আমার টার পুনর্নির্মাণ করব!

1
আমি সবেমাত্র pbzip2 এবং mpibzip2 পেয়েছি । ক্লিস্টারগুলির জন্য উদাহরণস্বরূপ বা আপনার কাছে একটি ল্যাপটপ এবং একটি মাল্টিকোর ডেস্কটপ কম্পিউটার রয়েছে তবে mpibzip2 খুব প্রতিশ্রুতিবদ্ধ দেখাচ্ছে।

এটি একটি দুর্দান্ত এবং বিস্তৃত উত্তর। এটি উল্লেখ করা ভাল হতে পারে যে মাল্টিথ্রেডেড সংকোচনের (উদাহরণস্বরূপ pigz) কেবল তখনই সক্ষম করা হয় যখন এটি ফাইল থেকে পড়ে। প্রক্রিয়াজাতকরণ STDIN আসলে ধীর হতে পারে।
oᴉɹǝɥɔ

3
xzবিকল্পের জন্য প্লাস 1 । এটি সহজতম, তবে কার্যকর পদ্ধতির।
সেলুরবেদু

2
export XZ_DEFAULTS="-T 0"xz সংক্ষেপণের জন্য tarবিকল্পের সাথে কল করার আগে -Jএকটি কবজির মতো কাজ করে।
স্কাই

13

আপনি টারের স্যুইচের -Iজন্য শর্টকাটটি ব্যবহার করতে পারেন --use-compress-programএবং pbzip2একাধিক কোরে bzip2 সংক্ষেপণের জন্য আবেদন করতে পারেন :

tar -I pbzip2 -cf OUTPUT_FILE.tar.bz2 DIRECTORY_TO_COMPRESS/

@ ম্যাক্সিমস্লস্লোভের উত্তরের জন্য একটি দুর্দান্ত টিএল; ডিআর ।
einpoklum

এই আয় tar: home/cc/ziptest: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors`
আরাশ

1

আপনি যদি ফাইলের নাম এবং সংকোচন বিকল্পগুলির সাথে আরও নমনীয়তা পেতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec \
tar -P --transform='s@/my/path/@@g' -cf - {} + | \
pigz -9 -p 4 > myarchive.tar.gz

ধাপ 1: find

find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec

এই কমান্ডটি এই ক্ষেত্রে /my/path/*.sqlএবং আপনার সংরক্ষণাগার রাখতে চাইলে ফাইলগুলি সন্ধান করবে /my/path/*.log-o -name "pattern"আপনি চান হিসাবে যোগ করুন ।

-execএর ফলাফল ব্যবহার করে পরবর্তী কমান্ড কার্যকর করবে find:tar

ধাপ ২: tar

tar -P --transform='s@/my/path/@@g' -cf - {} +

--transformএকটি সরল স্ট্রিং প্রতিস্থাপনের পরামিতি। এটি সংরক্ষণাগার থেকে ফাইলগুলির পথটি ছিটিয়ে দেবে যাতে এক্সট্রাক্ট করার সময় টার্বল এর মূলটি বর্তমান ডিরেক্টরিতে পরিণত হয়। দ্রষ্টব্য যে আপনি -Cডিরেক্টরিটি পরিবর্তন করতে বিকল্পটি ব্যবহার করতে পারবেন না কারণ আপনি এর সুবিধাগুলি হারাবেন find: ডিরেক্টরিটির সমস্ত ফাইল অন্তর্ভুক্ত করা হবে।

-Ptarপরম পাথগুলি ব্যবহার করতে বলে , সুতরাং এটি "সদস্যের নাম থেকে নেতৃস্থানীয়` / 'সরানো "সতর্কবার্তাটি ট্রিগার করে না। নেতৃস্থানীয় '/' --transformযেকোনো উপায়ে মুছে ফেলা হবে ।

-cf -tarটার্বল নামটি ব্যবহার করতে বলে যা আমরা পরে উল্লেখ করব

{} +এর findআগে পাওয়া যায় এমন প্রতিটি ফাইল ব্যবহার করে

ধাপ 3: pigz

pigz -9 -p 4

আপনি চান যতগুলি পরামিতি ব্যবহার করুন। এই ক্ষেত্রে -9সংকোচনের স্তর এবং -p 4হ'ল সংক্ষেপণের জন্য উত্সর্গীকৃত কোরগুলির সংখ্যা। আপনি যদি এটি ভারী বোঝাই ওয়েবসার্ভারে চালনা করেন তবে আপনি সম্ভবত সমস্ত উপলব্ধ কোর ব্যবহার করতে চান না।

পদক্ষেপ 4: সংরক্ষণাগার নাম

> myarchive.tar.gz

অবশেষে।


0

অপেক্ষাকৃত নতুন (ডি) সংক্ষেপণ সরঞ্জাম যা আপনি বিবেচনা করতে চাইতে পারেন তা হ'ল জাস্ট্যান্ডার্ড । এটি অতিরিক্ত কোরগুলি ব্যবহারের একটি দুর্দান্ত কাজ করে, এবং যখন এটি সংক্ষেপণ অনুপাত বনাম (ডি) সংক্ষেপণের সময় আসে তখন এটি কিছু দুর্দান্ত বাণিজ্য করে trade এটি আপনার সংকোচনের অনুপাতের প্রয়োজনের উপর নির্ভর করে অত্যন্ত টুইট-সক্ষম।

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