সমান্তরালিত


30

আমি কিছুটা পরীক্ষা এবং ত্রুটির পরে সবেমাত্র সরে এসে আবিষ্কার করেছি যে আমার বাড়ি এবং আমার রিমোট সার্ভারের মধ্যে কোথাও কোথাও থ্রোটলিং চলছে ... তবে থ্রোটলিং খুব বুদ্ধিমান নয়। এটি কেবল স্বতন্ত্র সংযোগগুলি থ্রোটল করে। সুতরাং আমি যদি একটি 1 জিবি ফাইল অনুলিপি করি তবে তা 150 কেবিপিএসে আনন্দের সাথে এগিয়ে যাবে। তবে আমি যদি 10 টি অনুলিপি শুরু করি তবে সেগুলির প্রতিটিতে 150 কেবিপিএস যাবে (অর্থাত্ আমি একাধিক সংযোগের চেয়ে অনেক বেশি সামগ্রিক ব্যান্ডউইথ পাই)।

আমি কাজ থেকে ঘরে ঘরে কিছু বড় ডেটাসেট সংহত করতে মোটামুটিভাবে rsync ব্যবহার করি (ভাগ্যক্রমে অনেকগুলি ফাইলের আকারে)। একাধিক সংযোগ ব্যবহার করে ডাউনলোড করার জন্য আরএসসিএনকে বলার উপায় আছে কি? তাত্ত্বিকভাবে এটি সম্ভব হওয়া উচিত যেহেতু আমি যতদূর বলতে পারি, RSSync প্রথমে প্রয়োজনীয় পরিবর্তনগুলি নির্ধারণ করার জন্য একটি পাস করে এবং তারপরে প্রকৃত সংক্রমণ সম্পাদন করে। বোনাস পয়েন্টস যদি আরএসসিএনকে বলার মতো কোনও মজাদার উপায় থাকে তবে পৃথক ফাইলগুলিকে এন টুকরো টুকরো করে টুকরো টুকরো করে টুকরো টুকরো করে আবার একসাথে বিভক্ত করুন। আমি বিশ্বাস করি যে কিউটএফটিপি আসলে এটি যথেষ্ট পরিমাণে স্মার্ট off

উত্তর:


13

ব্যাকআপ / পুনরুদ্ধার ক্ষমতা ব্যাকআপ ছাড়াই একটি নাস থেকে বিভিন্ন এনএএস-তে বেশ কয়েকটি টিবি স্থানান্তরিত করতে আমার ঠিক একইরকম সমস্যা হয়েছিল যা আমাকে কেবল অন্য সেটটিতে 1 সেট খাওয়ানোর অনুমতি দেয়।

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

এটি প্রসেসরের সংখ্যার উপর ভিত্তি করে কতগুলি রিসাইএনসি চালাতে হবে তা নির্ধারণ করে তবে আপনি এটি টুইট করতে চাইতে পারেন।

অন্য সম্ভাব্য বিকল্প যা মনে আসে তা হ'ল: - -লিস্ট-মোডে আরএসসিএন চালান।

এটি আপনাকে যে সমস্ত ফাইল আপডেট করার দরকার আছে তার সবকটি দেবে তারপরে আপনার তালিকার প্রতিটি ফাইলের জন্য 1 টি আরএসএনসি চালান আপনি যদি যে জিএসসিএনসি ব্যবহার করে যাচ্ছিলেন সেটি পরিচালনা করতে যদি xargs ব্যবহার করেন তবে এটি খুব মার্জিত হতে পারে। আসলে এখানে আমার ছোট স্ক্রিপ্টের চেয়ে আরও মার্জিত সমাধান ...

#! /bin/bash
SRC_DIR=$1
DEST_DIR=$2
LIST=$3
CPU_CNT=`cat /proc/cpuinfo|grep processor |wc -l`
#  pseudo random heuristic
let JOB_CNT=CPU_CNT*4
[ -z "$LIST" ] && LIST="-tPavW --exclude .snapshot --exclude hourly.?"
echo "rsyncing From=$SRC_DIR To=$DEST_DIR DIR_LIST=$LIST"
mkdir -p /{OLD,NEW}_NAS/home
[ -z "$RSYNC_OPTS" ] && RSYNC_OPTS="-tPavW --delete-during --exclude .snapshot --exclude hourly.?"
cd $SRC_DIR
echo $LIST|xargs -n1 echo|xargs -n1 -P $JOB_CNT -I% rsync ${RSYNC_OPTS} ${SRC_DIR}/%/ ${DEST_DIR}/%/

2
এটি কাজ করে - এটি কীভাবে কাজ করে তাতে আপনি অনেকগুলি উন্নতি করতে পারেন তবে আপনার অ্যাপ্লিকেশনটির সমান্তরালে এক্সার্গস ব্যবহার করার ধারণাটি বেশ উপন্যাস।
ম্যাটপার্ক

6

জিএনইউ সমান্তরালের একটি সমাধান রয়েছে । 

আমি 1 জিবিপিএসের মাধ্যমে 15 টিবি স্থানান্তরিত করেছি এবং এটি 1 জিবিপিএস লিঙ্কটি পূরণ করতে পারে।

নিম্নলিখিতটি সার্ভার ফুসারবারে সিআরসি-ডির থেকে ডেস্ট-ডায়ারে বড় ফাইল প্রতি এক রিসাইএনসি শুরু করবে:

cd src-dir; find . -type f -size +100000 | \
parallel -v ssh fooserver mkdir -p /dest-dir/{//}\; \
  rsync -s -Havessh {} fooserver:/dest-dir/{}

তৈরি করা ডায়ারগুলি ভুল অনুমতি নিয়ে শেষ হতে পারে এবং ছোট ফাইলগুলি স্থানান্তর করা হচ্ছে না। এই চালাগুলি চূড়ান্ত সময়টি চালানোর জন্য:

rsync -Havessh src-dir/ fooserver:/dest-dir/

1
আপনার উত্তরের "উদাহরণ: সমান্তরালিত rsync" বিভাগটি আটকানো আপনার মনে হবে? ভবিষ্যতে যদি লিঙ্কটি বিচ্ছিন্ন হয় তবে।
পিকোবিট

3

হ্যাঁ। এ জাতীয় বৈশিষ্ট্য বিদ্যমান।

Pssh নামে একটি ইউটিলিটি রয়েছে যা বর্ণিত কার্যকারিতা সরবরাহ করে।

এই প্যাকেজটি ওপেনশ্যাশন সরঞ্জামগুলির সমান্তরাল সংস্করণ সরবরাহ করে। বিতরণ অন্তর্ভুক্ত:

  • সমান্তরাল ssh (pssh)
  • সমান্তরাল scp (pscp)
  • সমান্তরাল rsync (prsync)
  • সমান্তরাল nuke (pnuke)
  • সমান্তরাল স্লর্প (pslurp)

সেট আপ করা কতটা সহজ তা আমি নিশ্চিত নই, তবে এটি সম্ভবত কৌশলটিই করতে পারে!


26
Pssh ইউটিলিটিগুলি একাধিক সার্ভারে কমান্ড ছড়িয়ে দিতে ব্যবহৃত হয়, একই সার্ভারে একাধিকবার একই কমান্ড না করে। বিশেষত, prsync কেবল একাধিক বাহ্যিক মেশিনে আপনার স্থানীয় মেশিনে একটি ফাইল প্রেরণকে সমর্থন করে। এটি একাধিক সংযোগ সহ একটি রিমোট ফাইল ডাউনলোড করা সমর্থন করে না।
ডেরেক ডাহার

1
@ ডেরেকডাহারের মন্তব্য দেওয়া, এই উত্তরের পোস্টার এটি প্রত্যাহার করতে চাইতে পারে?
এমসি 0

3

আমি মন্তব্য করতে পারি না, তাই আমি আগের (সুন্দর ও স্মার্ট) কোডের চেয়ে কিছুটা ভাল কোড সহ একটি নতুন উত্তর যুক্ত করেছি ।

rsyncলাইনটি পরীক্ষা করুন , কারণ এটিতে একটি al ioniceচ্ছিক টুইট রয়েছে ।

#!/bin/bash
start_time=$(date +%s.%N)
# Transfer files in parallel using rsync (simple script)
# MAXCONN: maximum number "rsync" processes running at the same time:
MAXCONN=6
# Source and destination base paths. (not need to end with "/")
SRC_BASE=/home/user/public_html/images
DST_BASE=user@hostname.domain.local:/home/user/public_html/images
RSYNC_OPTS="-ah --partial"
# Main loop:
for FULLDIR in $SRC_BASE/*; do
    NUMRSYNC=`ps -Ao comm | grep '^'rsync'$' | wc -l `
    while [ $NUMRSYNC -ge $MAXCONN ]; do
        NUMRSYNC=`ps -Ao comm | grep '^'rsync'$' | wc -l `
        sleep 1
    done
    DIR=`basename $FULLDIR`
    echo "Start: " $DIR
    ionice -c2 -n5 rsync $RSYNC_OPTS $SRC_BASE/${DIR}/ $DST_BASE/${DIR}/ &
    # rsync $RSYNC_OPTS $SRC_BASE/${DIR}/ $DST_BASE/${DIR}/ &
    sleep 5
done

execution_time=$(echo "$(date +%s.%N) - $start" | bc)
printf "Done. Execution time: %.6f seconds\n" $execution_time

2

দেখে মনে হচ্ছে কেউ আপনার জন্য এই ইউটিলিটি লিখেছেন। এটি সমান্তরাল খণ্ডে স্থানান্তরকে ভেঙে দেয়। এটি GNU সমান্তরাল অধীনে তালিকাভুক্ত "সমান্তরাল বড় ফাইল" সংস্করণের চেয়ে আরও ভাল বাস্তবায়ন:

https://gist.github.com/rcoup/5358786

এছাড়াও, lftp এফটিপি, এফটিপিএস, এইচটিপি, https, এইচএফপি, ফিশ, এসফ্টপি মাধ্যমে ফাইল স্থানান্তরকে সমান্তরাল করতে পারে। অনেক সময়, lftp ব্যবহারের কিছু সুবিধা রয়েছে কারণ rsync এর জন্য অনুমতি, সীমাবদ্ধ অ্যাক্সেস ইত্যাদি পরিচালনা করা চ্যালেঞ্জকর হতে পারে।


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

1

না। এরকম কোনও বৈশিষ্ট্য বিদ্যমান নেই। আপনি rsyncযদি সত্যিই চান তবে আপনি সিঙ্ককে একাধিক কলগুলিতে ভাগ করতে পারেন।

আমি আপনাকে এই রেট-সীমাবদ্ধকরণের যা কিছু করছে তা সন্ধান করার পরামর্শ দিচ্ছি এবং যিনি এটি রক্ষণ / পরিচালনা করে তার সাথে একটি গুরুতর আলোচনা করতে পারেন।


4
প্রায়শই এই বিধিনিষেধগুলি কমপ্যাক্টের মতো কিছু আইএসপি থেকে আসে। তাদের সাথে যে কোনও প্রকারের যুক্তিসঙ্গত কথোপকথনের শুভকামনা।
জেমস মুর

1

আমি একই সাথে বেশ কয়েকটি ডিরেক্টরি (অনেকগুলি ফাইল সহ) স্থানান্তর করতে চেয়েছিলাম, তাই আমি এই ছোট স্ক্রিপ্টটি তৈরি করেছি:

#!/bin/bash
# Transfer files in parallel using rsync (simple script)
# MAXCONN: maximum number "rsync" processes running at the same time:
MAXCONN=10
# Source and destination base paths. (not need to end with "/")
SRC_BASE=/home/sites
DST_BASE=user@example.com:/var/www
RSYNC_OPTS="--stats -ilrtpog"
# Main loop:
for FULLDIR in $SRC_BASE/*/; do
    NUMRSYNC=`ps -Ao comm | grep '^'rsync'$' | wc -l `
    while [ $NUMRSYNC -ge $MAXCONN ]; do
        NUMRSYNC=`ps -Ao comm | grep '^'rsync'$' | wc -l `
        sleep 10
    done
    DIR=`basename $FULLDIR`
    rsync $RSYNC_OPTS $SRC_BASE/${DIR}/ $DST_BASE/${DIR}/ & 
    sleep 1 
done
echo "Done."

আমি এই স্ক্রিপ্টটি বেশ দ্রুত করেছি, সুতরাং দয়া করে এটি সংশোধন করুন এবং উত্পাদন পরিবেশে ব্যবহারের আগে এটি পরীক্ষা করুন


0

সমান্তরালে ছবি সহ অনেক ফোল্ডার আপলোড করতে আমি নিম্নলিখিত স্ক্রিপ্টটি তৈরি করেছি। আপনি এটি প্রথমে সিঙ্ক টার্গেট দিয়ে চালান এবং তারপরে অনুলিপি করতে সমস্ত ফোল্ডারের নাম।

#!/bin/sh

dest="$1"
shift

if [ "$dest" = "" ]; then
    echo "USAGE: $0 TARGET:/foo/bar <dir1> [dir2] [dir3]"
    exit 1
fi

RCol='\x1B[0m' # Text Reset
BYel='\x1B[1;33m';

for i in "$@"; do
    prefix=`printf "$BYel%50s:$RCol" "$i"`
    echo "$prefix * Starting $i"
    echo "$prefix -> syncing '$i/' to '$dest/$i/'"
    (rsync -rv "$i/" "$dest/$i/") 2>&1 | sed "s/^/$prefix /g" &
    sleep 0.5
done

echo "* Waiting for all to complete"
wait

এটি ফোল্ডারটির নামটি হলুদ রঙে সমস্ত rsync কনসোল আউটপুটকে সুন্দর দেখানোর জন্য উপস্থাপিত করে।


-1

অনেক আয়না থেকে অনেক সংযোগ ব্যবহার করে ডেটা ডাউনলোড করার জন্য আরিয়া 2 একটি ভাল ক্লায়েন্ট প্রোগ্রাম। এটি এসএফটিপি সমর্থন করে না। সুতরাং, আমি এফটিপি সার্ভার ইনস্টল করেছি - বনফুটপিডি । আমার 3 জি সংযোগ এফটিপি সার্ভারের সাথে 5 টি সংযোগের সাথে পুরো শক্তি নিয়ে কাজ করে।


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