आप मशीनों के बीच विशाल विरल फ़ाइलों (VM डिस्क छवियों) को कैसे सिंक्रनाइज़ करते हैं?


22

क्या rsync जैसी कोई कमांड है, जो एक लिनक्स सर्वर से दूसरे में विशाल, विरल, फाइलों को सिंक्रोनाइज़ कर सकती है?

यह बहुत महत्वपूर्ण है कि गंतव्य फ़ाइल विरल बनी रहे। यह उस ड्राइव की तुलना में अधिक लंबी (लेकिन बड़ी नहीं) हो सकती है। केवल परिवर्तित ब्लॉकों को तार के पार भेजा जाना चाहिए।

मैंने rsync की कोशिश की है, लेकिन कोई खुशी नहीं मिली। https://groups.google.com/forum/#!topic/mailing.unix.rsync/lPOScZgFE9M

अगर मैं ऐसा करने के लिए एक कार्यक्रम लिखता हूं, तो क्या मैं सिर्फ पहिया को सुदृढ़ कर रहा हूं? http://www.finalcog.com/synchronise-block-devices

धन्यवाद,

क्रिस।


rsync विशाल फ़ाइलों के साथ बेहद अक्षम है। यहां तक ​​कि --इनप्लेस के साथ यह पहले टारगेट होस्ट पर पूरी फाइल को पढ़ेगा और फिर स्थानीय फाइल पर फाइल को पढ़ना शुरू करेगा और अंतर को ट्रांसफर करेगा (rsync चलाते समय और इसी तरह देखें) और निरीक्षण करें
ndemou

जवाबों:


21
rsync --ignore-existing --sparse ...

विरल मोड में नई फाइलें बनाने के लिए

के बाद

rsync --inplace ...

सभी मौजूदा फ़ाइलों (पूर्व में निर्मित विरल सहित) को अपडेट करने के लिए inplace।


3
इसे रिवर्स करें rsync --existing --inplaceऔर फिर rsync --ignore-existing --sparseएक सिंक स्पीडअप करने के लिए
माइक

2
क्या कोई भी Mikes टिप्पणी की व्याख्या कर सकता है और यह कैसे सिंक को गति देना चाहिए?
प्रिक्सो

मुझे लगता है कि माइक का मतलब है पहले बदलाव और फिर नया जोड़ना, ताकि नए लोगों को पहले और दूसरे कॉल के बीच के समय के अंतर के कारण - फिर से होने की आवश्यकता न हो। यह तभी सही है जब आप डेटास्टोर से सीधे rsync करें और VMs चल रहे हों। जब तक उसका मतलब कुछ और न हो?
युआन

मैं युआन से सहमत हूं। स्टीव सेकेंड कमांड नई फ़ाइलों को फिर से rsync करेगा, आप माइक कमांड अनुक्रम का उपयोग करके इसे सुरक्षित कर सकते हैं।
बाज़

rsync विशाल फ़ाइलों के साथ बेहद अक्षम है। सवाल पर मेरी टिप्पणी देखें।
ndemou

5

रुपीक्स केवल प्रत्येक फ़ाइल में परिवर्तन स्थानांतरित करता है और --inplace को केवल उन ब्लॉकों को फिर से लिखना चाहिए जो फ़ाइल को फिर से बनाए बिना बदल गए हैं। उनके फीचर्स पेज से

rsync यूनिक्स सिस्टम के लिए एक फाइल ट्रांसफर प्रोग्राम है। rsync "rsync एल्गोरिथ्म" का उपयोग करता है जो दूरस्थ फ़ाइलों को सिंक में लाने के लिए एक बहुत तेज़ विधि प्रदान करता है। यह लिंक के पार फ़ाइलों में सिर्फ अंतर भेजकर ऐसा करता है, बिना आवश्यकता के कि दोनों फाइलें पहले से लिंक के किसी एक छोर पर मौजूद हैं।

का उपयोग करते हुए --inplace आप के लिए काम करना चाहिए। यह आपको प्रगति दिखाएगा, स्थानान्तरण (डिफ़ॉल्ट संपीड़न स्तर पर) को संपीड़ित करेगा, स्थानीय भंडारण निर्देशिका की सामग्री को पुनरावर्ती रूप से स्थानांतरित करेगा (जो कि पहले स्लैश मामलों को पीछे छोड़ता है), फाइलों में परिवर्तन करें और परिवहन के लिए ssh का उपयोग करें।

rsync -v -z -r --inplace --progress -e ssh /path/to/local/storage/ \
user@remote.machine:/path/to/remote/storage/ 

मैं अक्सर एक-ध्वज का उपयोग करता हूं जो कुछ और चीजें करता है। यह मैन-पेज में देखने के लिए आपके द्वारा किए गए सटीक व्यवहार को छोड़ देता है।


1
'-S' विरल फाइलों के लिए है, न कि 'लंबी लाइनों को काटता है'। मैन पेज से: -S, -sparse हैंडल स्पार्स फाइल्स को कुशलता से संभालता है। मैं इसे एक कोशिश देता हूँ, धन्यवाद।
6

धन्यवाद मैंने तय किया - मैं आपके द्वारा दिए गए लिंक में कही गई बातों से दूर जा रहा था।
मिलाएं

नहीं, दुर्भाग्य से यह समस्या का समाधान नहीं करता है। यह फ़ाइल को सिंक करता है , लेकिन यह विरल फ़ाइल को गैर-विरल फ़ाइल में सबसे अंत में बदल देता है। मैं ssh / rsync का उपयोग कर रहा हूं जो Ubuntu 9.04 के साथ आता है।
6

मेरी उपरोक्त टिप्पणी गलत थी। समस्या यह थी कि rsync अपनी पहली प्रति पर गैर-विरल फ़ाइलें बनाता है। --Inplace rsync सही ढंग से काम करता है, बशर्ते कि गंतव्य फ़ाइल पहले से मौजूद हो और मूल फ़ाइल की तरह लंबी (बड़ी नहीं) हो। मेरे पास अब एक समाधान है, लेकिन मुझे यह जांचने की आवश्यकता है कि क्या प्रत्येक फ़ाइल पहले से ही लक्ष्य सर्वर पर मौजूद है। अगर ऐसा होता है, तो मैं एक --inplace करता हूँ, अगर यह नहीं होता है, तो मैं --sparse का उपयोग करता हूँ। यह आदर्श नहीं है, लेकिन यह काम करता है।
फ़ेडबीबी

rsync विशाल फ़ाइलों के साथ बेहद अक्षम है। प्रश्न पर मेरी टिप्पणी देखें
ndemou

4

मैंने ऐसा करने के लिए सॉफ्टवेयर लिखना समाप्त कर दिया:

http://www.virtsync.com

यह कमर्शियल सॉफ्टवेयर है जिसकी लागत $ 49 प्रति भौतिक सर्वर है।

मैं अब आवासीय ब्रॉडबैंड भर में 3 मिनट के भीतर 50GB विरल फ़ाइल (जिसमें 3GB सामग्री है) की प्रतिकृति बना सकता हूं।

chris@server:~$ time virtsync -v /var/lib/libvirt/images/vsws.img backup.barricane.com:/home/chris/
syncing /var/lib/libvirt/images/vsws.img to backup.barricane.com:/home/chris/vsws.img (dot = 1 GiB)
[........>.........................................]
done - 53687091200 bytes compared, 4096 bytes transferred.

real    2m47.201s
user    0m48.821s
sys     0m43.915s 

4
टीबीएच, जिस समय पर आप सिंक कर सकते हैं, वह बताते समय बहुत व्यर्थ है क्योंकि यह स्पष्ट रूप से बदले गए डेटा की मात्रा पर निर्भर करता है। यह कहना अधिक सटीक होगा कि आपके सॉफ़्टवेयर को यह पता लगाने में 3 मिनट लगते हैं कि कौन से ब्लॉक बदले गए हैं, और यहां तक ​​कि वह गति संभवतः आपकी डिस्क i / o पर निर्भर करती है और शायद CPU चक्र उपलब्ध हैं।
रियलिटी एक्सट्रैक्टर

6
आपको यह बताना चाहिए कि यह नेटवर्क की कार्यक्षमता के लिए $ 98 या अधिक लागत वाला वाणिज्यिक सॉफ़्टवेयर है।
रीड

एक सॉफ्टवेयर पर हमें इंगित करने के लिए धन्यवाद, जिसने आपके लिए अच्छा काम किया, जिसे लोग अब विचार कर सकते हैं और उपयोग कर सकते हैं, या उपयोग नहीं कर सकते हैं जैसे कि उन्हें ज़रूरत है। अन्य दो लोगों के योगदान के लिए धन्यवाद, कुछ भी नया नहीं।
फ्लोरियन हीगल

3

ज़ुमास्टर लिनक्स स्टोरेज प्रोजेक्ट पर एक नज़र डालें, यह ddsnapउपकरण के माध्यम से बाइनरी "rsync" का उपयोग करके "स्नैपशॉट" बैकअप लागू करता है।

मैन-पेज से:

ddsnap ब्लॉक डिवाइस प्रतिकृति प्रदान करता है, जो एक ब्लॉक स्तर स्नैपशॉट सुविधा देता है जो एक साथ कई स्नैपशॉट को कुशलतापूर्वक रखने में सक्षम है। ddsnap स्नैपशॉट विखंडू की एक सूची उत्पन्न कर सकता है जो दो स्नैपशॉट के बीच भिन्न होता है, फिर तार पर उस अंतर को भेजें। डाउनस्ट्रीम सर्वर पर, स्नैपशॉट ब्लॉक किए गए डिवाइस पर अपडेट किया गया डेटा लिखें।


2

lvmsync ऐसा करता है।

यहाँ एक उपयोग प्रतिलेख है । यह स्रोत पर LVM स्नैपशॉट बनाता है, तार्किक विभाजन को स्थानांतरित करता है। आप स्नैपशॉट निर्माण के बाद से परिवर्तनों के वृद्धिशील अपडेट को जितनी बार चाहें स्थानांतरित कर सकते हैं।


मैं यह कोशिश की है, लेकिन यह काम नहीं करता है, और लेखक समर्थन करने के लिए तैयार नहीं है
user1007727

1
@ user1007727 समर्थन करने के लिए तैयार नहीं है, या मुफ्त में समर्थन करने के लिए तैयार नहीं है?
फ़ेडबीबी

मैंने अतीत में lvmsync का इस्तेमाल किया, यह काम किया लेकिन यह "ठेस ग्रेड" सॉफ्टवेयर imo नहीं है। :-)
फ्लोरियन हेगल

1

पूरे फाइल सिस्टम की नकल एक समाधान हो सकता है? केडंप? http://www.drbd.org/


मुझे नहीं लगता कि यहाँ पर drbd एक अच्छा समाधान है, लेकिन डिस्क-इमेज-फाइल्स के बजाय पूरे fs को rsyncing-inplace करने का विचार दिलचस्प है। मुझे यकीन नहीं है कि rsync इसे अनुमति देता है - मैं इसे एक कोशिश करूँगा और वापस रिपोर्ट करूँगा ...
fadedbee

1

शायद यहां थोड़ा अजीब है, लेकिन मुझे हाल ही में पता चला कि एनएफएस इस जुर्माने को संभालता है।

तो आप एक मशीन पर एक निर्देशिका निर्यात करते हैं, फिर इसे दूसरे पर माउंट करते हैं और आप बस बुनियादी बर्तनों जैसी फाइलों की नकल करते हैं cp। (कुछ पुरानी / प्राचीन उपयोगिताओं में विरल फाइलों की समस्या हो सकती है।)

मैं rsyncविरल फ़ाइलों को स्थानांतरित करने में विशेष रूप से अक्षम पाया गया ।


1

भारी फ़ाइलों या ब्लॉक-डिवाइसेस को कम से मध्यम अंतर के साथ सिंक करने के लिए आप या तो एक सादे कॉपी कर सकते हैं या bdsync का उपयोग कर सकते हैं , rsync इस विशेष मामले के लिए बिल्कुल फिट नहीं है *।

bdsyncमेरे लिए काम किया, काफी परिपक्व लगता है, यह बगों का इतिहास उत्साहजनक है (छोटे मुद्दों, शीघ्र समाधान)। मेरे परीक्षणों में यह गति सैद्धांतिक अधिकतम के करीब थी जिसे आप ** प्राप्त कर सकते हैं (यानी आप उस समय के बारे में सिंक कर सकते हैं जब आपको फ़ाइल पढ़ने की आवश्यकता होती है)। अंत में यह खुला स्रोत है और कुछ भी नहीं खर्च होता है।

bdsyncदोनों मेजबानों से फाइल पढ़ता है और उनकी तुलना करने और मतभेदों का पता लगाने के लिए चेक-रकम का आदान-प्रदान करता है। एक ही समय में ये सब । यह अंत में स्रोत होस्ट पर एक संकुचित पैच फ़ाइल बनाता है। फिर आप उस फ़ाइल को गंतव्य होस्ट पर ले जाते हैं और गंतव्य फ़ाइल को पैच करने के लिए दूसरी बार bdsync चलाते हैं।

जब इसे एक तेज़ तेज़ लिंक (उदाहरण के लिए 100Mbit ईथरनेट) और छोटे अंतर वाली फ़ाइलों के लिए उपयोग किया जाता है (जैसा कि अक्सर VM डिस्क पर होता है) तो यह उस समय को कम कर देता है, जिस समय आपको फ़ाइल पढ़ने की आवश्यकता होती है। एक धीमी लिंक पर आपको थोड़ा और समय चाहिए क्योंकि आपको एक मेजबान से दूसरे में संपीड़ित परिवर्तनों की प्रतिलिपि बनाना होगा (ऐसा लगता है कि आप एक अच्छी चाल का उपयोग करके समय बचा सकते हैं लेकिन परीक्षण नहीं किया है)।


* - rsync विशाल फ़ाइलों के साथ बेहद अक्षम है। यहां तक ​​कि --inplace के साथ यह पहली बार डेस्टिनेशन होस्ट पर पूरी फाइल को पढ़ेगा, AFTERWARDS फाइल को सोर्स होस्ट पर पढ़ना शुरू कर देता है और अंत में अंतर को ट्रांसफर कर देता है (बस rsync चलाते हुए और अवलोकन करते हुए dstat या इसी तरह चलाएं)। नतीजा यह है कि छोटे अंतर वाली फ़ाइलों के लिए भी फ़ाइल को सिंक करने के लिए आपको फ़ाइल को पढ़ने में लगभग दोगुना समय लगता है।

**: इस धारणा के तहत कि आपके पास यह बताने का कोई दूसरा तरीका नहीं है कि फाइलों के कौन से हिस्से बदल गए हैं। LVM स्नैपशॉट परिवर्तित किए गए ब्लॉकों को रिकॉर्ड करने के लिए बिटमैप का उपयोग करते हैं ताकि वे बहुत तेज़ हो सकें ( lvmsync की रीडमी को अधिक जानकारी नहीं है)।


0

मुझे इस तरह की उपयोगिता के बारे में पता नहीं है, केवल सिस्टम कॉल ही इसे संभाल सकता है, इसलिए यदि आप ऐसी उपयोगिता लिखते हैं, तो यह उपयोगी हो सकता है।

आप वास्तव में क्या कर सकते हैं का उपयोग कर सकते हैं qemu-img फ़ाइलों को कॉपी करने के लिए कनवर्ट करें, लेकिन यह केवल तभी काम करेगा जब गंतव्य FS एफएआर फ़ाइलों का समर्थन करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.