ইউনিক্সে সমান্তরাল অনুলিপি সম্পাদনের সর্বোত্তম উপায় কী?


18

আমাকে নিয়মিত কোনও ফাইল ফাইলের সামগ্রীগুলি আমার স্থানীয় কম্পিউটারে অনুলিপি করতে হয়। রিমোট ফোল্ডারে অনেকগুলি ফাইল (আরএল) রয়েছে যা সমস্ত তুলনামূলকভাবে ছোট তবে নেটওয়ার্কের ওভারহেডের কারণে নিয়মিত অনুলিপিটি cp remote_folder/* ~/local_folder/খুব দীর্ঘ সময় নেয় (10 মিনিট)।

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

এই অনুলিপিটির গতি বাড়ানোর সহজ উপায় কী? (আমি ধরে নিলাম এটি অনুলিপিটি সমান্তরালভাবে সম্পাদন করা))

অনুলিপি করার আগে ফাইলগুলি জিপ করা অগত্যা জিনিসগুলিকে গতি দেয় না কারণ সেগুলি সমস্ত বিভিন্ন সার্ভারে বিভিন্ন ডিস্কে সংরক্ষণ করা যেতে পারে।


অনুলিপি করার আগে ফাইলগুলিকে জিপ করা জিনিসগুলিকে ব্যাপকভাবে গতিতে বাড়িয়ে দেবে কারণ "আর কী আপনি" ফাইলটি পেয়েছেন "," হ্যাঁ, আমি করেছি "," পরেরটি এখানে "," ঠিক আছে ", ... এটি সেগুলি হওয়ার দরকার নেই "পরিবর্তন" যা আপনাকে ধীর করে দেয়।
ডেভিড শোয়ার্জ

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

জিপ করা ভাল ধারণা নাও থাকতে পারে (ফাইলের বাকী সংখ্যা নিয়ে কমপ্রেস চালানোতে কিছুটা সময় লাগতে পারে), টারটি কার্যকর হতে পারে।
রব

@ জোয়েলকোহুর এখনও, এমন কিছু ক্ষেত্রে দেখা যায় যখন এটি হয় না: যেমন একাধিক স্পিন্ডল + ছোট ফাইল (বা কেবল এলোমেলোভাবে পড়ে)। এই পরিস্থিতিতে, "সমান্তরাল সিপি" সাহায্য করবে।
সিএএফএক্সএক্সএক্স

উত্তর:


8

আপনি যে অনুলিপি কমান্ডগুলি চালাচ্ছেন সীমাবদ্ধ ততক্ষণ আপনি সম্ভবত স্ক্রুটিনাইজার পোস্টের মতো কোনও স্ক্রিপ্ট ব্যবহার করতে পারেন

SOURCEDIR="$1"
TARGETDIR="$2"
MAX_PARALLEL=4
nroffiles=$(ls "$SOURCEDIR" | wc -w)
setsize=$(( nroffiles/MAX_PARALLEL + 1 ))
ls -1 "$SOURCEDIR"/* | xargs -n "$setsize" | while read workset; do
  cp -p "$workset" "$TARGETDIR" &
done
wait

1
সতর্কতার নোট যদিও: এই স্ক্রিপ্টটি ফাঁকা জায়গা বা গ্লোববিং অক্ষরযুক্ত ফাইলের নামগুলির সাথে বিরতি

@ ওल्डওল্ফ - আপনি কী ব্যাখ্যা করতে পারেন এই স্ক্রিপ্টটি কীভাবে কাজ করে? উদাহরণস্বরূপ, কোন অংশটি সমান্তরাল করে?
dsg

3
@dsg: কমান্ডের &শেষে লুপটি চালিয়ে যেতে এবং পরবর্তী সিপি কমান্ডটি অপেক্ষা না করে শুরু cpকরতে দেয় whilexargsকমান্ড 4 (MAX_PARALLEL) এর দলে দলে ফাইলের নামের পাসের whileলুপ।
রেডগ্রিটিব্রিক

আমার জন্য কাজ করে না। আমি নিশ্চিত না যে গতি বাড়ানো সম্ভব cp। মাল্টিথ্রেডিংয়ের মাধ্যমে আপনি গণমাধ্যমে গণনা দ্রুত করতে পারবেন speed তবে আমি মনে করি না যে হার্ড ড্রাইভের ডেটা ক্যাপিংয়ের জন্য এটি একই রকমের।
অ্যাডোব

9

আপনার যদি জিএনইউ সমান্তরাল http://www.gnu.org/software/parallel/ ইনস্টল করা থাকে তবে আপনি এটি করতে পারেন:

parallel -j10 cp {} destdir/ ::: *

আপনি জিএনইউ সমান্তরাল সহজেই এটি ইনস্টল করতে পারেন:

$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
   fetch -o - http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 3374ec53bacb199b245af2dda86df6c9
12345678 3374ec53 bacb199b 245af2dd a86df6c9
$ md5sum install.sh | grep 029a9ac06e8b5bc6052eac57b2c3c9ca
029a9ac0 6e8b5bc6 052eac57 b2c3c9ca
$ sha512sum install.sh | grep f517006d9897747bed8a4694b1acba1b
40f53af6 9e20dae5 713ba06c f517006d 9897747b ed8a4694 b1acba1b 1464beb4
60055629 3f2356f3 3e9c4e3c 76e3f3af a9db4b32 bd33322b 975696fc e6b23cfb
$ bash install.sh

আরও জানতে জিএনইউ সমান্তরালের জন্য পরিচিত ভিডিওগুলি দেখুন: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1


3

একটি উপায় হ'ল আরএসসিএনসি ব্যবহার করা যা কেবল পরিবর্তনগুলি অনুলিপি করবে - নতুন ফাইল এবং অন্যান্য ফাইলের পরিবর্তিত অংশ।

http://linux.die.net/man/1/rsync

সমান্তরাল অনুলিপি অপারেশনের যে কোনও ধরণের চালনা সম্ভবত আপনার নেটওয়ার্ককে প্লাবিত করবে এবং অনুলিপি অপারেশনটি কেবল থামবে বা উত্স বা গন্তব্য ডিস্কের বাধা থেকে ভুগবে।


2

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

এটি ইনস্টল করার জন্য অন্য বাইনারি, তবে সম্ভবত আজকাল ক্লাউড পরিষেবা গ্রহণের সমস্ত বিষয় বিবেচনা করে আপনি ইতিমধ্যে চালাচ্ছেন।


2

সমান্তরাল rsync সন্ধান করুন:

export SOURCE_DIR=/a/path/to/nowhere
export DEST_DIR=/another/path/to/nowhere

# sync folder structure first
rsync -a -f'+ */' -f'- *' $SOURCE_DIR $DEST_DIR

# cwd
cd $SOURCE_DIR

# use find to help filter files etc. into list and pipe into gnu parallel to run 4 rsync jobs simultaneously
find . -type f | SHELL=/bin/sh parallel --linebuffer --jobs=4 'rsync -av {} $DEST_DIR/{//}/'

কর্পোরেট ল্যানে, একক আরএসএনসি প্রায় 800 এমবিপিএস করে; 6--৮ টি কাজের সাথে আমি 2.5 জিবিপিএস (উচ্চ লোড ব্যয়ে) উপার্জন করতে সক্ষম। ডিস্ক দ্বারা সীমাবদ্ধ।


0

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

পরের বার চেষ্টা করুন:

  cp remote_folder/[a-l]* ~/local_folder/ &
  cp remote_folder/[!a-l]* ~/local_folder/ &
  wait
  wait

(আপনি [আল] * কে অন্য কোনও কিছুতে প্রতিস্থাপন করতে চাইতে পারেন যা প্রায় অর্ধেক ফাইলের সাথে মেলে - সম্ভবত [0-4] * - ফোল্ডারের বিষয়বস্তুর উপর নির্ভর করে)

সময় যদি নাটকীয়ভাবে উন্নত না হয় তবে সমস্ত ফাইলের অনুলিপি করা প্রয়োজনীয় কিনা তা পরীক্ষা করা আরও গুরুত্বপূর্ণ (সমস্ত ফাইলের পরিবর্তিত ফাইলের অনুপাত কী?)

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