2TB (10 মিলিয়ন ফাইল + ডায়ার) সরানো, আমার বাধা কি?


21

পটভূমি

আমি স্থান পরিমাণ স্বল্প উপর /home/dataএবং স্থানান্তর করার প্রয়োজন /home/data/repoথেকে /home/data2

/home/data/repo1 এম ডায়ার রয়েছে যার প্রতিটিতে 11 টি ডায়ার এবং 10 টি ফাইল রয়েছে। এটি মোট 2 টিবি।

/home/datadir_index সক্ষম সহ ext3 এ রয়েছে। /home/data2ext4 এ রয়েছে। CentOS 6.4 চলছে Run

আমি অনুমান করি যে repo/এর নীচে সরাসরি 1 মিলিয়ন ডায়ার রয়েছে তার কারণে এই পদ্ধতিগুলি ধীর গতিযুক্ত।


চেষ্টা 1: mvদ্রুত তবে বাধাগ্রস্ত হয়

এটি শেষ হলে আমার কাজ করা যেতে পারে:

/home/data> mv repo ../data2

কিন্তু 1.5TB স্থানান্তরিত হওয়ার পরে এটি বাধাগ্রস্ত হয়েছিল। এটি প্রায় 1GB / মিনিটে লেখা ছিল at

চেষ্টা 2: rsyncবিল্ডিং ফাইল তালিকার 8 ঘন্টা পরে ক্রলগুলি

/home/data> rsync --ignore-existing -rv repo ../data2

'ইনক্রিমেন্টাল ফাইল তালিকা' তৈরি করতে বেশ কয়েক ঘন্টা সময় লেগেছিল এবং তারপরে এটি 100MB / মিনিটে স্থানান্তরিত হয়।

একটি দ্রুত পদ্ধতির চেষ্টা করার জন্য আমি এটি বাতিল করি।

চেষ্টা 3 এ: mvঅভিযোগ

এটি একটি উপ-ডিরেক্টরিতে পরীক্ষা করা:

/home/data/repo> mv -f foobar ../../data2/repo/
mv: inter-device move failed: '(foobar)' to '../../data2/repo/foobar'; unable to remove target: Is a directory

আমি নিশ্চিত না যে এটি সম্পর্কে ত্রুটি কী, তবে সম্ভবত cpআমাকে জামিন দিতে পারে ..

চেষ্টা 3 বি: cp8 ঘন্টা পরে কোথাও পায় না

/home/data> cp -nr repo ../data2

এটি 8 ঘন্টা ডিস্ক পড়ে এবং আমি এটিকে বাতিল করে আর আরএসসিএন-তে ফিরে যাওয়ার সিদ্ধান্ত নিয়েছি।

চেষ্টা 4: rsyncবিল্ডিং ফাইল তালিকার 8 ঘন্টা পরে ক্রলগুলি

/home/data> rsync --ignore-existing --remove-source-files -rv repo ../data2

আমি --remove-source-filesভাবছিলাম যে এখনই পরিষ্কার করা শুরু করলে এটি আরও দ্রুততর হতে পারে make

ফাইল তালিকা তৈরি করতে কমপক্ষে 6 ঘন্টা সময় লাগে এটি 100-200MB / মিনিটে স্থানান্তর করে।

কিন্তু সার্ভারটি রাতারাতি বোঝা হয়ে গেছে এবং আমার সংযোগ বন্ধ হয়ে গেছে।

চেষ্টা 5: কেবলমাত্র 300 গিগাবাইট স্থানান্তরিত করতে ব্যর্থ হয়েছে কেন এটি এতটা বেআইনী

/home/data> rsync --ignore-existing --remove-source-files -rvW repo ../data2

আবার বাধা দিলেন। -Wপ্রায় করতে দ্রুত "ক্রমবর্ধমান ফাইল তালিকা পাঠানোর", যা আমার বোঝার জ্ঞান করা উচিত নয় বলে মনে হলো। নির্বিশেষে, স্থানান্তরটি মারাত্মকভাবে ধীর এবং আমি এটি ছেড়ে দিচ্ছি।

চেষ্টা 6: tar

/home/data> nohup tar cf - . |(cd ../data2; tar xvfk -)

মূলত সমস্ত কিছু পুনরায় অনুলিপি করার চেষ্টা করা কিন্তু বিদ্যমান ফাইলগুলি উপেক্ষা করে। এটি বিদ্যমান ফাইলগুলির 1.7TB এর মধ্যে ছড়িয়ে দিতে হবে তবে কমপক্ষে এটি 1.2 গিগাবাইট / মিনিটে পড়ছে।

এখনও অবধি, এটি একমাত্র আদেশ যা তাত্ক্ষণিক প্রশংসা দেয়।

আপডেট: আবার বাধাপ্রাপ্ত হয়েছে, একরকম, এমনকি নোহাপ সহ ..

চেষ্টা 7: হরকিরি

এখনও এটি নিয়ে বিতর্ক চলছে

8 টি প্রচেষ্টা: স্ক্রিপ্টযুক্ত 'মার্জ' এর সাথে mv

গন্তব্য দির প্রায় 120k খালি ডায়ার ছিল তাই আমি দৌড়ে গেলাম

/home/data2/repo> find . -type d -empty -exec rmdir {} \;

রুবি লিপি:

SRC  = "/home/data/repo"
DEST = "/home/data2/repo"

`ls #{SRC}  --color=never > lst1.tmp`
`ls #{DEST} --color=never > lst2.tmp`
`diff lst1.tmp lst2.tmp | grep '<' > /home/data/missing.tmp`

t = `cat /home/data/missing.tmp | wc -l`.to_i
puts "Todo: #{t}"

# Manually `mv` each missing directory
File.open('missing.tmp').each do |line|
  dir = line.strip.gsub('< ', '')
  puts `mv #{SRC}/#{dir} #{DEST}/`
end

সম্পন্ন.


আপনি সঠিক, এটি প্রতিটি ডিরেক্টরি খুঁজে বের করতে হবে এবং 1 মিলিয়ন ডায়ার বেদনাদায়ক হতে চলেছে।
সাইবারনার্ড

2
উজ্জ্বল দিকটি দেখুন ... এটি যদি উইন্ডোজ হয় তবে আপনার এক মিলিয়ন উপ-ডিরেক্টরি থাকতে পারে না এবং এখনও একটি ওএস থাকতে পারে যা কাজ করে। :)
জ্যাক

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

5
না এটা পারে না। mvক্ষমা করছেন না, আপনি যদি সংযোগ বিচ্ছিন্ন রাখতে থাকেন তবে আপনি ডেটা হারাতে পারেন এবং এটি জানেন না। যেমন আপনি বলেছিলেন যে আপনি এই কাজটি করছেন ssh, আমি আপনাকে উচ্চতর ব্যবহার screenএবং আলাদা করার পরামর্শ দিচ্ছি । লগিং সক্ষম করুন এবং সেভাবে ট্র্যাক করুন। আপনি যদি ভার্বোস ব্যবহার করছেন তবে এটি আরও বেশি সময় নেবে। এছাড়াও চেষ্টা করুনiotop
ব্রাউজ

2
@ অ্যাডব্রাউজিং - শুভ কল screen। আমি ভার্বোজ সম্পর্কে ভাবছিলাম তবে আমার ধারণা tarএখনই পুনরায় আরম্ভ করতে খুব দেরি হয়ে গেছে। আর iotopগত কয়েকদিন :) জন্য আমার প্রিয় ইউটিলিটি হয়েছে
টিম

উত্তর:


6

কখনও কখনও ছোট ছোট কাজগুলিতে বিভক্ত হওয়ার কথা শুনেছেন?

/ হোম / ডেটা / রেপোতে 1 এম ডায়ার থাকে যার প্রতিটিতে 11 টি ডায়ার এবং 10 টি ফাইল থাকে। এটি মোট 2 টিবি।

rsync -a /source/1/ /destination/1/
rsync -a /source/2/ /destination/2/
rsync -a /source/3/ /destination/3/
rsync -a /source/4/ /destination/4/
rsync -a /source/5/ /destination/5/
rsync -a /source/6/ /destination/6/
rsync -a /source/7/ /destination/7/
rsync -a /source/8/ /destination/8/
rsync -a /source/9/ /destination/9/
rsync -a /source/10/ /destination/10/
rsync -a /source/11/ /destination/11/

(...)

কফি বিরতি সময়।


1
সুবিধা আমি অস্পষ্টভাবে জোর করছি যে আপনি ছোট অংশে অগ্রগতি ট্র্যাক নিজে যাতে কাজের চালু হলে কিছু অংশ বাতিল করা হয়েছে হয় lesss সময় লাগবে (কারণ আপনি জানেন যা পদক্ষেপ সফলভাবে সম্পন্ন করা হয়েছে)।
Рахматуллин

মূলত এটিই আমি শেষ পর্যন্ত শেষ করেছিলাম, ব্যতীত mv। দুর্ভাগ্যক্রমে কোনও সরঞ্জাম সভা mvএবং rsyncঅর্ধপথে নেই।
টিম

4

এই কি ঘটছে তা হয়:

  • প্রাথমিকভাবে rsync ফাইলগুলির তালিকা তৈরি করবে।
  • ফাইল তালিকার প্রাথমিক বাছাইয়ের কারণে এই তালিকাটি তৈরি করা সত্যই ধীর।
  • Ls -f -1 ব্যবহার করে এবং আরএসসিএন ব্যবহার করবে এমন ফাইলগুলির সেট তৈরির জন্য এটি xargs এর সাথে একত্রিত করে বা ফাইল তালিকার কোনও আউটপুট পুনর্নির্দেশের মাধ্যমে এড়ানো যায়।
  • ফোল্ডারের পরিবর্তে এই তালিকাটি আরএসইএনসি-তে পাস করা, তত্ক্ষণাত্ কাজ শুরু করতে আরএসসিএনকে তৈরি করবে।
  • কয়েক মিলিয়ন ফাইল সহ ফোল্ডারগুলির উপর ls -f-1 এর এই কৌশলটি নিবন্ধে পুরোপুরি বর্ণিত হয়েছে: http://unixetc.co.uk/2012/05/20/large-directory-causes-ls-to-hang/

1
আপনি কীভাবে rsync দিয়ে এলএস ব্যবহার করবেন তার একটি উদাহরণ দিতে পারেন? আমার একই রকম তবে অভিন্ন পরিস্থিতি নেই। মেশিন এআইতে আরএসসিএনডি চলছে এবং একটি বড় ডিরেক্টরি ট্রি আমি মেশিন বিতে স্থানান্তর করতে চাই (আসলে, ডিরেক্টরিটির 90% ইতিমধ্যে বি তে রয়েছে)। সমস্যাটি হ'ল আমাকে অস্থির মোবাইল সংযোগ ব্যবহার করতে হবে যা ঘন ঘন ড্রপ হয়। প্রতিবার আমি পুনরায় চালু করার সময় ফাইল তালিকা তৈরি করতে এক ঘন্টা ব্যয় করা বেশ দক্ষ fficient এছাড়াও, বি NAT এর পিছনে রয়েছে যে আমি নিয়ন্ত্রণ করি না তাই এ -> বি সংযুক্ত করা শক্ত, অন্যদিকে বি -> এ সহজ।
db

@Db এর সাথে একমত যদি একটি উদাহরণ দেওয়া যেতে পারে, তবে এই উত্তরটি আরও কার্যকর হবে।
redfox05

1

এমনকি যদি rsync ধীর হয় (তবে এটি ধীর হয় কেন? সম্ভবত -z সহায়তা করবে) মনে হচ্ছে আপনি এটির অনেকটা এগিয়ে চলেছেন, সুতরাং আপনি কেবল চেষ্টা চালিয়ে যেতে পারেন:

যদি আপনি --remove-উত্স-ফাইলগুলি ব্যবহার করেন তবে আপনি খালি ডিরেক্টরিগুলি সরিয়ে ফলোআপ করতে পারেন। - সরানো-উত্স-ফাইলগুলি সমস্ত ফাইল সরিয়ে ফেলবে, তবে ডিরেক্টরিগুলি সেখানে রেখে দেবে।

কেবলমাত্র একাধিক পাস করতে --deove- - সরও-উত্স-ফাইলগুলি ব্যবহার করবেন না তা নিশ্চিত করুন ।

এছাড়াও বর্ধিত গতির জন্য আপনি - স্থান ব্যবহার করতে পারেন

আপনি যদি কোনও লাথি মেরে বেরিয়ে আসছেন কারণ আপনি কোনও সার্ভারে দূর থেকে এটি করার চেষ্টা করছেন, এগিয়ে যান এবং এটি একটি 'স্ক্রিন' সেশনের মধ্যে চালান। কমপক্ষে সেই পথে আপনি এটি চালাতে দিতে পারেন।

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