2 সার্ভারের মধ্যে কয়েক মিলিয়ন ফাইল অনুলিপি করার সর্বোত্তম উপায়


39

আমার একক ডিরেক্টরিতে প্রায় 5 মিলিয়ন ছোট (5-30 কে) ফাইল রয়েছে যা আমি একই গিগাবিট নেটওয়ার্কের অন্য একটি মেশিনে অনুলিপি করতে চাই। আমি আরএসসিএনসি ব্যবহারের চেষ্টা করেছি, তবে কয়েক ঘন্টা দৌড়ানোর পরে এটি ক্রল হয়ে পড়বে, আমি মনে করি যে প্রতিবারের মতো আরএসসিএনকে উত্স এবং গন্তব্য ফাইলটি পরীক্ষা করতে হবে?

আমার দ্বিতীয় চিন্তাটি স্কেপ ব্যবহার করা হবে, তবে এর চেয়ে আরও ভাল উপায় আছে কিনা তা দেখার জন্য বাইরের মতামত পেতে চেয়েছিলাম। ধন্যবাদ!


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

উত্তর:


41

এই জাতীয় কিছু ভাল কাজ করা উচিত:

tar c some/dir | gzip - |  ssh host2 tar xz

আপনি গিগাবিট নেটওয়ার্কে থাকায় জিজপ এবং নিষ্কাশনের জন্য "জেড" পতাকাটি বাদ দিতেও পারেন।


এটি gzip করা প্রয়োজন, বা এসএসএস যেভাবে স্ট্রিমটি সংকোচিত করে? নাকি এটা করা যায়?
থিলো

1
আপনি "-সি" পাস করলে ssh স্ট্রিমটি সঙ্কুচিত করবে। লেন ধরে আমি স্ট্রিমটি সংকুচিত করে বিরক্ত করব না; ইন্টারনেটে আমি সম্ভবত এটি করতাম, যদি না এটি ইতিমধ্যে সংকুচিত হয়।

6
ব্যক্তিগতভাবে আমি গিজিপটি ছেড়ে চলে যাব: এমনকি গিগাবিট ইথারনেটের উপরেও বোতলের সিপিইউ হওয়ার সম্ভাবনা খুব কম।
বেনজি XVI

6
@ বেনজিএক্সবিআই-কে বাধা দেওয়া অবশ্যই সিপিইউ gzipহবে যেহেতু কেবল কোনও একক কোরকে কার্যকর করা হবে। আপনি 6 টির ডিফল্ট সংকোচনের স্তরটি দিয়ে প্রায় 30 এমবি / সেকেন্ডে যুক্তিযুক্তভাবে আশা করতে পারেন - তবে এটি গিগাবিট ইথারনেটকে সর্বাধিক উপার্জন করতে পারবে না।
syneticon-dj

2
pbzip2 ব্যবহার করবেন? ...
অ্যাপাচি

19

আমি নিশ্চিত যে আপনার একক ডিরেক্টরিতে সমস্ত ফাইভ মিলিয়ন ফাইল অনেকগুলি সরঞ্জামকে এক উত্তেজনায় ফেলে দেবে sure আমি বিস্মিত হইনি যে আরএসসিএনসি এটিকে সুন্দরভাবে পরিচালনা করে না - এটি বেশ "অনন্য" পরিস্থিতি। আপনি যদি কোনও ধরণের ডিরেক্টরি কাঠামোর মধ্যে ফাইলগুলি গঠনের কোনও উপায় বের করতে পারেন তবে আমি নিশ্চিত যে সিএসসি-র মতো স্ট্যান্ডার্ড সিঙ্ক সরঞ্জামগুলি আরও বেশি প্রতিক্রিয়াশীল হবে।

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


6
শারীরিকভাবে ড্রাইভ চালনার জন্য +1, এটি এই পথে আরও দ্রুত
রবার্ট গোল্ড

1
এটি অবশ্যই লাফ ড্রাইভে সমস্ত কিছু অনুলিপি করে পেছন পেছনে চলে যায় ...
ভার্টুওসিমিডিয়া

@ রবার্টগল্ড আইপোএএসি আমাদের ট্রান্সমিশন প্রোটোকল হিসাবে ব্যবহার করুন: "ডি
কুলক্যাট 700

12

একটি গিগাবিট স্যুইচে লক্ষ লক্ষ ফাইল অনুলিপি করতে (বিশ্বস্ত পরিবেশে) আপনি ইতিমধ্যে ব্যবহারকারীর দ্বারা প্রস্তাবিত netcat (or nc)এবং এর সমন্বয়ও ব্যবহার করতে পারেন tar55 এটি সমস্ত ফাইলকে একটি বড় ফাইল হিসাবে প্রবাহিত করবে (দেখুন দ্রুত ফাইলের অনুলিপি - লিনাক্স! (39 গিগাবাইট) )।

# requires netcat on both servers
nc -l -p 2342 | tar -C /target/dir -xzf -   # destination box
tar -cz /source/dir | nc Target_Box 2342    # source box

আজকাল আইপিভি trying চেষ্টা করে আরও বেশি কিছু নিয়ে আপনার "এনসি কমান্ডের সাথে উভয় প্রান্তে -4 সুইচ ব্যবহার করতে এটি" পুরানো "আইপিভি 4 ল্যানে কাজ করতে পারে।
BeowulfNode42

5

আমাদের একটি ডিরেক্টরিতে প্রায় 1 মিলিয়ন ফাইল ছিল (প্রায় 4 বছরের ফাইলের ফাইল)।

এবং আমরা ওয়াইওয়াই / এমএম ডিরেক্টরিতে ফাইলগুলি সরানোর জন্য রোবোকপি ব্যবহার করেছি (প্রতি মাসে প্রায় 35-45,000 ফাইল) .. আমরা একটি .bat ফাইলে রবোকপি স্ক্রিপ্টটি এভাবে রাখি:

ROBOCOPY /NS /NC /NFL /NP /LOG+:H:\BCK_REPORT\ROBO.LOG /MAXAGE:20081101 /MINAGE:20081201 /MOV H:\Cs\out\fix H:\BCK_REPORT\2008\11
ROBOCOPY /NS /NC /NFL /NP /LOG+:H:\BCK_REPORT\ROBO.LOG /MAXAGE:20081201 /MINAGE:20090101 /MOV H:\Cs\out\fix H:\BCK_REPORT\2008\12
ROBOCOPY /NS /NC /NFL /NP /LOG+:H:\BCK_REPORT\ROBO.LOG /MAXAGE:20090101 /MINAGE:20090201 /MOV H:\Cs\out\fix H:\BCK_REPORT\2009\01
ROBOCOPY /NS /NC /NFL /NP /LOG+:H:\BCK_REPORT\ROBO.LOG /MAXAGE:20090201 /MINAGE:20090301 /MOV H:\Cs\out\fix H:\BCK_REPORT\2009\02

সংক্ষিপ্ত নোটস .. /ns /nc /nfl /npঅতিরিক্ত তথ্য সহ লগ ফাইলটি ফুলে যাওয়া এড়ানোর জন্য লগ ফাইলটিতে /log+...সংক্ষিপ্ত তথ্য লিখতে হয়।

/minage and /maxage is to copy files modified with in that date range. 

সুতরাং উদাহরণস্বরূপ ফাইলগুলি <= 01 / নভেম্বর / 2008 (অন্তর্ভুক্ত) সংশোধিত ফাইলগুলিতে <01 / ডিসেম্বর / ২০০৮ (অন্তর্ভুক্ত নয়)

ROBOCOPY /NS /NC /NFL /NP /LOG+:H:\BCK_REPORT\ROBO.LOG /MAXAGE:20081101 /MINAGE:20081201 /MOV H:\Cs\out\fix H:\BCK_REPORT\2008\11

/mov ফাইল সরানো

তারপরে উত্স ডিরেক্টরি আসে

তারপরে আসে গন্তব্য ডিরেক্টরি (যখন প্রয়োজন হয় তখন ডিরেক্টরিগুলি তৈরি করা হবে)।

এক মাসের মূল্য স্থানান্তরের জন্য এটি প্রায় 40 - 60 মিনিট সময় নিয়েছে (প্রায় 35-45,000 ফাইলগুলি) আমরা মনে করি এটি এক বছরের মূল্য স্থানান্তরের জন্য 12 ঘন্টা বা তারও কম সময় নেয়।

উইন্ডোজ সার্ভার 2003 ব্যবহার করে।

সমস্ত জিনিস লগ ফাইলে লগইন করা হয় ... শুরুর সময়, শেষ সময় এবং ফাইলগুলির সংখ্যা অনুলিপি করা হয়।

রোবকপি দিনটি বাঁচিয়েছিল।


আজকাল রোবকপিতে এন থ্রেড (ডিফল্ট 8) এর সাথে একাধিক থ্রেডযুক্ত অনুলিপিগুলি করার জন্য স্যুইচ / এমটি [: n] রয়েছে যা একই প্রভাবটি আরও ভালভাবে অর্জন করতে পারে এবং তারিখের সীমাগুলির উপর নির্ভর করে না, এবং একটির পরিবর্তে একটি একক কমান্ড লাইনকে অনুমতি দেয় প্রতি থ্রেড যদিও এমটি সুইচ উইন্ডোজ 2003 উপলব্ধ নয়
BeowulfNode42

4

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


4

আমি এই মুহুর্তে দ্রুততম সংকোচনের সরঞ্জাম হিসাবে lz4 ব্যবহার করা পছন্দ করি । এসএসএইচ বিকল্প -c আরকফোর 128 ডিফল্টর চেয়ে দ্রুত এনক্রিপশন অ্যালগরিদম ব্যবহার করে। [1]

সুতরাং ডিরেক্টরি হস্তান্তর কিছু দেখাচ্ছে:

tar -c folder | lz4 -c | ssh -carcfour128 somehost 'lz4 -d | tar -x > folder'

দয়া করে নোট করুন যে ডেবিয়ান lz4 কমান্ডটি lz4c এবং CentOS এ এটি lz4।


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

3

রোবোকপি এই জাতীয় জিনিসগুলির জন্য দুর্দান্ত। নেটওয়ার্ক সময়সীমা পেরিয়ে যাওয়ার পরে এটি আবার চেষ্টা করবে এবং এটি আপনাকে পাইপ স্য্যাম্প করার জন্য একটি আন্ত-প্যাকেট ফাঁক দেরি সেট করতে দেয়।

[সম্পাদনা]

মনে রাখবেন এটি একটি উইন্ডোজ শুধুমাত্র অ্যাপ্লিকেশন।


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

3

আমি জানি এটি নির্বোধ হতে পারে - তবে আপনি কি কেবল সেগুলি একটি বাহ্যিক ডিস্কে অনুলিপি করে অন্য সার্ভারে নিয়ে যাওয়ার কথা ভেবে দেখেছেন? এটি আসলে সবচেয়ে দক্ষ এবং সহজ সমাধান হতে পারে।


3

আমরা বর্তমানে এই সমস্যাটি তদন্ত করছি। আমাদের প্রায় 18 মিলিয়ন ছোট ফাইল স্থানান্তর করতে হবে - মোট 200 জিবি মোট। আমরা সরল পুরানো এক্সকপি ব্যবহার করে সেরা পারফরম্যান্স অর্জন করেছি, তবে এটি এখনও অনেক বেশি সময় নিয়েছে। 1 সার্ভার থেকে অন্য সার্ভারে প্রায় 3 দিন, একটি বাহ্যিক ড্রাইভে প্রায় 2 সপ্তাহ!

অন্য একটি প্রক্রিয়ার মাধ্যমে, আমাদের সার্ভারের সদৃশ করতে হবে। এটি অ্যাক্রোনিসের সাথে করা হয়েছিল। এটি প্রায় 3 ঘন্টা সময় নিয়েছে !!!

আমরা এটি আরও কিছু তদন্ত করব। উপরের ডিডি পরামর্শটি সম্ভবত অনুরূপ ফলাফল সরবরাহ করবে।


2

ইতিমধ্যে অনেক ভাল পরামর্শ, কিন্তু তুলনা ছাড়িয়ে নিক্ষেপ করতে চেয়েছিলেন । আমি সম্প্রতি একটি গিগাবিট সুইচের মাধ্যমে একটি সার্ভার থেকে অন্য সার্ভারে 5KB এবং 20MB এর মধ্যে প্রায় 750,000 ফাইল স্থানান্তর করেছি। এমনকি একেবারে হিচাপও হয়নি। এটি কিছুক্ষণ সময় নিয়েছে, তবে আমি এটি এতটা ডেটা সহ আশা করব।


1

আমি দেখতে চাই কিভাবে একটি জিপ-> অনুলিপি> আনজিপ সম্পাদন করে

বা আপনার প্রিয় সংক্ষেপণ / সংরক্ষণাগার সিস্টেম যাই হোক না কেন।


হ্যাঁ এগুলিকে একটি ফাইলে সংকুচিত করা খুব ভাল ধারণা হবে
রবার্ট গল্ড

এমনকি কেবল একটি
টারবাল

1

আপনি এটি অনুলিপি করার আগে একটি একক ফাইলে প্যাক করুন, এটি অনুলিপি করার পরে তাদের আবার প্যাক করুন।


1

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

স্কয়ার বা আরএসএনসি (ওয়াইএমএমভি) এর তুলনায় ট্যারের পদ্ধতির পরিবর্তনের হার প্রায় দ্বিগুণ হয়ে যায়।

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

box1> cd source_directory; tar cf - . | remsh box2 "cd target_directory; tar xf - "

প্রথম টার কমান্ডটি '-' নামে একটি ফাইল তৈরি করে, যা এই ক্ষেত্রে একটি বিশেষ টোকেন যার অর্থ 'স্ট্যান্ডার্ড আউটপুট'। তৈরি করা সংরক্ষণাগারটিতে বর্তমান ডিরেক্টরি (।) এর সাথে সাথে সমস্ত উপ-ডিরেক্টরিগুলির সমস্ত ফাইল রয়েছে (ডিফল্টরূপে পুনরাবৃত্ত হয়)। এই সংরক্ষণাগারটি ফাইলটি রিমশ কমান্ডে পাইপ করা হয়েছে যা এটি বক্স 2 মেশিনে প্রেরণ করে। 2 বাক্সে আমি প্রথমে যথাযথ গ্রহণের ডিরেক্টরিতে পরিবর্তন করি, তারপরে আমি '-', বা 'স্ট্যান্ডার্ড ইনপুট' থেকে আগত ফাইলগুলি বের করি।

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


1

ফাইল সিস্টেমটি বাইপাস করুন।

আপনি কি এই পার্টিশনটি আনমাউন্ট করতে সক্ষম হন যে ফাইলগুলি এতে থাকে? এটি করুন, তারপরে এমন কিছু করুন:

dd if=/dev/PARTITION | ssh username@host "dd of=diskimage.bin"

এরপরে আপনি diskimage.binগন্তব্য পাশের লুপব্যাক ডিভাইস হিসাবে মাউন্ট করতে পারেন এবং এ থেকে ফাইলগুলি আপনার আসল গন্তব্য ফাইল সিস্টেমে অনুলিপি করতে পারেন, বা সম্ভবত সঠিক সরঞ্জামগুলি এটিকে গন্তব্যের পাশের একটি ফাঁকা বিভাজনে সেলাই করতে ব্যবহার করতে পারেন (বিপজ্জনক, তবে সম্ভবত সম্ভব যদিও আমি এটি কখনও করি নি))

আপনি যদি সত্যই সাহসী হন তবে আপনি ddসরাসরি গন্তব্য দিকের পার্টিশনে ফিরে আসতে পারেন । আমি যে সুপারিশ না।


0

আপনি নিম্নলিখিত চেষ্টা করতে পারেন (ফাইলের ব্যাচে থাকতে পারে)

  • ফাইল ব্যাচ টার
  • তাদের gzip
  • সম্ভব হলে scp ব্যবহার করে অনুলিপি করুন
  • gunzip প্রয়োগ
  • ফাইলগুলি আনটার করুন

0

স্টাফের পরামর্শ অনুসারে আপনি এসএসএস-এর চেয়ে বেশি চেষ্টা করতে পারেন।

আপনার যদি এনক্রিপশনটির প্রয়োজন না হয় (মূলত আপনি rsync ব্যবহার করেছেন তবে এটি rsync + ssh ছিল না উল্লেখ করে) আপনি ssh ওভারহেড এড়াতে নেটকাটের উপর দিয়ে টার চেষ্টা করতে পারেন।

অবশ্যই আপনি জিজিপ বা অন্যান্য সংক্ষেপণ পদ্ধতি ব্যবহার করে সময়টি সংক্ষিপ্ত করতে পারেন।


0

আরও কিছু বিবেচনা করার আছে। এটা চেষ্টা কর:

  • গতিশীল আকারের একটি ভিএইচডি তৈরি করুন
  • এটি মাউন্ট করুন, সম্ভবত একটি ডিরেক্টরি হিসাবে
  • 'সম্পূর্ণ ডিস্কটি সংক্ষেপণ' বৈশিষ্ট্যটি সেট করুন

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

উইন্ডোজে, আমি 16348 এর মতো ডিফল্ট টিসিপি প্যাকেটের আকার বৃহত্তর হিসাবে সেট করেছি This এর অর্থ কম আইপি হেডার ওভারহেড।

একটি জিনিস যা আমি চালিয়েছি, তা হ'ল কোনও নেটওয়ার্ক বা ইউএসবি স্থানান্তরের জন্য ফাইল মাপগুলি 100 এমবি এর নীচে রাখা ভাল। আমি তার জন্য Rar.exe ব্যবহার করি - ফাইলগুলি বিভক্ত করতে।

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

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

এনটিএফএস হিসাবে ফর্ম্যাট করা একটি ভিএইচডি ফোল্ডারে কয়েক মিলিয়ন ফাইলও পরিচালনা করতে পারে।

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