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