পটভূমি
আমি স্থান পরিমাণ স্বল্প উপর /home/data
এবং স্থানান্তর করার প্রয়োজন /home/data/repo
থেকে /home/data2
।
/home/data/repo
1 এম ডায়ার রয়েছে যার প্রতিটিতে 11 টি ডায়ার এবং 10 টি ফাইল রয়েছে। এটি মোট 2 টিবি।
/home/data
dir_index সক্ষম সহ ext3 এ রয়েছে।
/home/data2
ext4 এ রয়েছে। 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 বি: cp
8 ঘন্টা পরে কোথাও পায় না
/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
সম্পন্ন.
mv
আবার কেন করবেন না ? তত্ত্ব mv
অনুসারে গন্তব্য ফাইলটি সম্পূর্ণ অনুলিপি করা হয়েছে তবে এটি ঠিক আছে কাজ করা উচিত যদি কোনও উত্স ফাইল মুছবে । এছাড়াও, আপনার কি মেশিনে শারীরিক অ্যাক্সেস রয়েছে বা এটি কোনও ssh
সংযোগের মাধ্যমে করা হয়েছে ?
mv
ক্ষমা করছেন না, আপনি যদি সংযোগ বিচ্ছিন্ন রাখতে থাকেন তবে আপনি ডেটা হারাতে পারেন এবং এটি জানেন না। যেমন আপনি বলেছিলেন যে আপনি এই কাজটি করছেন ssh
, আমি আপনাকে উচ্চতর ব্যবহার screen
এবং আলাদা করার পরামর্শ দিচ্ছি । লগিং সক্ষম করুন এবং সেভাবে ট্র্যাক করুন। আপনি যদি ভার্বোস ব্যবহার করছেন তবে এটি আরও বেশি সময় নেবে। এছাড়াও চেষ্টা করুনiotop
screen
। আমি ভার্বোজ সম্পর্কে ভাবছিলাম তবে আমার ধারণা tar
এখনই পুনরায় আরম্ভ করতে খুব দেরি হয়ে গেছে। আর iotop
গত কয়েকদিন :) জন্য আমার প্রিয় ইউটিলিটি হয়েছে