সমান্তরাল ফাইল অনুলিপি


9

আমার কাছে লিনাক্স সিস্টেমে কপি করা ফাইলগুলির একটি তালিকা রয়েছে - প্রতিটি ফাইলের আকার 10 থেকে 100 গিগাবাইট পর্যন্ত হয়।

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

এটি করার জন্য আমি খুব সহজেই একটি বহুবিবাহিত প্রোগ্রাম লিখতে পারি, তবে এটি করার জন্য নিম্ন স্তরের লিনাক্স পদ্ধতি আছে কিনা তা জানতে আগ্রহী।


1
সমান্তরাল ফাইল অনুলিপি উল্লেখযোগ্য গতিবেগ আনবে না। (কমপক্ষে তত্ত্বের ক্ষেত্রে এটি হওয়া উচিত নয়)
তার্নে কলমেন


1
@ টার্নায়ক্লমেন যদি না আপনার কাছে একটি ক্লাস্টারযুক্ত, ওভারলে, RAID, বা "নির্ভীক" স্টাইল ফাইল সিস্টেম থাকে, বা উপরের কোনওটি তুলনামূলকভাবে উচ্চ বিলম্বিত বা ব্যস্ত নেটওয়ার্কের উপরে না থাকে; বা এমন ওয়ার্কলোড যেখানে প্রতি-ফাইলের ল্যাটেন্সি সেই ফাইলটির অনুলিপি সময়ের একটি গুরুত্বপূর্ণ অংশ (1e5 + খুব ছোট ফাইল, সামগ্রী-সম্বোধনকৃত ব্যাকেন্ডস ইত্যাদি)। একযোগে প্রক্রিয়াজাতকরণ এ জাতীয় পরিস্থিতিতে একটি অত্যন্ত দরকারী হবে।
মূল্য

উত্তর:


11

যদি আপনার সিস্টেমে এটি ছিন্ন না করা হয় (উদাহরণস্বরূপ ফাইলগুলি ক্যাশে রয়েছে) তবে GNU সমান্তরাল http://www.gnu.org/software/parallel/ আপনার পক্ষে কাজ করতে পারে:

find . -print0 | parallel -0 -j10 cp {} destdir

এটি 10 ​​একযোগে চলবে cp

প্রো: এটি পড়া সহজ।

কন: জিএনইউ সমান্তরাল বেশিরভাগ সিস্টেমে স্ট্যান্ডার্ড নয় - সুতরাং আপনাকে সম্ভবত এটি ইনস্টল করতে হবে।

আরও তথ্যের জন্য ইন্ট্রো ভিডিও দেখুন: http://www.youtube.com/watch?v=OpaiGYxkSuQ

সমান্তরাল ডিস্ক I / O এর আলোচনার জন্য https://oletange.wordpress.com/2015/07/04/parallel-disk-io-is-it-faster/ এও দেখুন ।


3

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


বর্তমানে এমন একটি সিপিতে যে সমস্যাটি মনে হয় না, আমি নিশ্চিত যে একাধিক সমান্তরাল "সিপি'র জন্য আপনি যে আমি / ও চ্যানেল সম্পূর্ণরূপে স্যাচুরেটেড হয়ে উঠবেন না তার জন্য একটি সুখী মাধ্যম আছে ...
জন

1
একটি স্যাচুরেটেড বাস একটি সুখী বাস। অলস ব্যান্ডউইথ ব্যান্ডউইথ নষ্ট হয়।
'21 এ মূল্যায়ন করুন

3

উল্লিখিত হিসাবে, এটি একটি ভয়ানক ধারণা। তবে আমি বিশ্বাস করি প্রত্যেককে নিজের ভয়াবহ পরিকল্পনা বাস্তবায়ন করতে হবে, খুব ...

for FILE in *;do cp $FILE <destination> &;done

আপনার ফাইলগুলির নিয়মিত অভিব্যক্তি বা আপনার $(cat <listfile>)যদি এটি কোনও পাঠ্য নথিতে পাওয়া যায় তবে তারাটি প্রতিস্থাপন করা যেতে পারে । অ্যাম্পারস্যান্ড ব্যাকগ্রাউন্ডে একটি কমান্ড বন্ধ করে, তাই লুপটি আরও কপি বন্ধ রাখবে continue

উল্লিখিত হিসাবে, এটি আপনার আইওকে সম্পূর্ণরূপে নির্মূল করবে। সুতরাং ... আমি সত্যিই এটি করার সুপারিশ করব না।

- ক্রিস্টোফার কারেল


3

আপনার মেশিনের প্রতিক্রিয়াশীলতাটি কেবল আবদ্ধ করবে না এমন একমাত্র উত্তর হ'ল 'অনুলিপি' নয়, তবে এটি খুব দ্রুত। আপনি যদি নতুন বা পুরানো স্থানে ফাইলগুলি সম্পাদনা করছেন না, তবে একটি হার্ড লিঙ্কটি কার্যকরভাবে একটি অনুলিপিটির মতো, এবং (কেবলমাত্র) যদি আপনি একই ফাইল সিস্টেমে থাকেন তবে সেগুলি খুব দ্রুত তৈরি করা হয়।

পরীক্ষা করে দেখুন cp -lএবং এটি যদি আপনার জন্য কাজ করবে দেখুন।


2

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

https://github.com/hpc/dcp


1

যে লোকেরা মনে করে যে এটি কোনও দুর্দান্ত ধারণা নয়, আমি বলব এটি নির্ভর করে। আপনার কাছে একটি বড় রাইড সিস্টেম বা একটি সমান্তরাল ফাইল সিস্টেম থাকতে পারে যা এক সিপি প্রক্রিয়া পরিচালনা করতে পারে তার চেয়ে সত্যই আরও ভাল পারফরম্যান্স সরবরাহ করবে। তাহলে হ্যাঁ, আপনাকে একটি "সমান্তরাল সরঞ্জাম" ব্যবহার করা উচিত।

আসুন এই উদাহরণটি নেওয়া যাক:

timeout 10 strace -e write -c cp /dev/zero /dev/null
strace: Process 24187 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.655188           4    166222           write
------ ----------- ----------- --------- --------- ----------------
100.00    0.655188                166222           total

তারপর এই

timeout 0.01 strace -e write  cp /dev/zero /dev/null
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
write(4, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 65536) = 65536
strace: Process 24567 detached

সুতরাং এই ক্ষেত্রে "সিপি" দ্বারা নির্মিত প্রতিটি সিস্কেল রচনাটি 64KiB এবং আমার সিস্টেমে 10 এর দশকের জন্য আমি এই ব্যান্ডউইথটি সরবরাহ করতে সক্ষম: 65536 * 166222/10 = 1089352499 = ~ 1,08GB / s

এখন, এই কাজের চাপটি 2 টি প্রক্রিয়া দিয়ে চালু করুন (আমার 4 টি কোর রয়েছে তবে আমার ডেস্কটপটি অন্যান্য স্টাফের জন্য ব্যবহৃত হয়, এবং এখানে এটি কেবল উদাহরণ):

timeout 10 strace -e write -c cp /dev/zero /dev/null & timeout 10 strace -e write -c cp /dev/zero /dev/null &  wait
[1] 26106
[2] 26107
strace: Process 26113 detached
strace: Process 26112 detached
% time     seconds  usecs/call     calls    errors syscall
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
------ ----------- ----------- --------- --------- ----------------
100.00    0.624108           4    162616           write
100.00    0.638468           4    162451           write
------ ----------- ----------- --------- --------- ----------------
100.00    0.624108                162616           total
100.00    0.638468                162451           total
------ ----------- ----------- --------- --------- ----------------
[1]-  Exit 124                timeout 10 strace -e write -c cp /dev/zero /dev/null

সুতরাং আমরা দেখতে পাই যে আমরা এটি চালু করার জন্য 2 কোর ব্যবহার করে দ্বিগুণ পারফরম্যান্স করতে সক্ষম হয়েছি।

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


-1

আপনার এটি চেষ্টা করা উচিত:

    $ সিক 3 | সমান্তরাল সিপি-ভি / ইত্যাদি / পাসডাব্লুড পাসউইড {}

এটি আপনার পাসওয়ার্ড ফাইলটি / etc / ডিরেক্টরি থেকে আপনার $ হোমমে 3 বার অনুলিপি করবে

অথবা যদি আপনার ফাইলটি এটি আপনার হোম ডিরেক্টরিতে থাকে

    $ সিক 3 | সমান্তরাল সিপি-ভি পাসউড {, {}}

এটি পাসওয়ার্ড ফাইলটি আপনার $ হোমমে 3 বার অনুলিপি করবে

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