पृष्ठभूमि
मैं अंतरिक्ष से बाहर भाग गया /home/dataऔर इसे स्थानांतरित /home/data/repoकरने की आवश्यकता है /home/data2।
/home/data/repoइसमें 1M dirs होते हैं, जिनमें से प्रत्येक में 11 dirs और 10 फाइलें होती हैं। यह 2TB योग है।
/home/datadir_index सक्षम के साथ ext3 पर है।
/home/data2ext4 पर है। रनिंग सेंटोस 6.4।
मुझे लगता है कि ये दृष्टिकोण इस तथ्य के कारण धीमा हैं कि repo/1 मिलियन डायर सीधे इसके नीचे हैं।
प्रयास 1: mvतेजी से होता है, लेकिन बाधित होता है
अगर यह काम पूरा हो जाता तो मैं किया जा सकता था:
/home/data> mv repo ../data2
लेकिन 1.5TB को स्थानांतरित करने के बाद इसे बाधित कर दिया गया था। यह लगभग 1GB / मिनट पर लिख रहा था।
प्रयास 2: rsyncफ़ाइल सूची के निर्माण के 8 घंटे के बाद क्रॉल करता है
/home/data> rsync --ignore-existing -rv repo ../data2
'वृद्धिशील फ़ाइल सूची' के निर्माण में कई घंटे लग गए और फिर यह 100 एमबी / मिनट पर स्थानांतरित हो गया।
मैं इसे तेज़ तरीका आज़माने के लिए रद्द करता हूँ।
प्रयास 3a: 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 घंटे के लिए डिस्क को पढ़ता है और मैं इसे रद्द करने और rsync पर वापस जाने का निर्णय लेता हूं।
प्रयास 4: rsyncफ़ाइल सूची के निर्माण के 8 घंटे के बाद क्रॉल करता है
/home/data> rsync --ignore-existing --remove-source-files -rv repo ../data2
मैं --remove-source-filesसोचता था कि अगर मैं अब सफाई शुरू कर दूं तो यह और तेज हो सकता है।
फ़ाइल सूची बनाने में कम से कम 6 घंटे का समय लगता है फिर यह 100-200 एमबी / मिनट पर स्थानांतरित हो जाता है।
लेकिन सर्वर रात भर बोझ था और मेरा कनेक्शन बंद हो गया।
प्रयास 5: केवल 300GB करने के लिए छोड़ दिया तो यह एक दर्द है
/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.2GB / मिनट पर पढ़ रहा है।
अब तक, यह एकमात्र आदेश है जो तुरंत संतुष्टि देता है।
अद्यतन: फिर से बाधित, किसी भी तरह, nohup के साथ भी ..
प्रयास 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पिछले कुछ दिनों से मेरी पसंदीदा उपयोगिता है :)