संघर्ष प्रबंधन के साथ वास्तविक समय मल्टी-क्लाइंट सिंक्रनाइज़ेशन


3

मुझे स्थानीय नेटवर्क में NAS के साथ अपने कंप्यूटर के बीच एक सिंक्रनाइज़ेशन सेटअप करने की आवश्यकता है। सेटअप कुछ जटिल है, हालांकि, इसलिए मैं मान रहा हूं कि एक बंद-शेल्फ उत्पाद नहीं है जो मुझे चाहिए।

विवरण:

मेरे द्वारा उपयोग किए जाने वाले उपकरण:

  • डेस्कटॉप पीसी, डुअल-बूट विंडोज 10 / आर्क लिनक्स
  • लैपटॉप (आर्क लिनक्स)
  • NAS (स्व-निर्माण, उस पर चलने वाला FreeNAS)

मैंने rsyncअब तक NAS के बैकअप के लिए उपयोग किया है (एक तरफ़ा, मेरे दोहरे बूट सेटअप दोनों ओएस के लिए एक ही भंडारण का उपयोग करता है)।

समस्या यह है कि, मैं लैपटॉप को सिंक में लाना चाहूंगा। इसलिए मुझे दो तरह के सिंक करने की जरूरत है।

यहां आने वाली समस्याएं:

  1. मैं अक्सर शटडाउन से पहले केवल कुछ सेकंड के लिए फ़ाइलों को सहेजता हूं, इसलिए मुझे समय-समय पर एक सिंक टूल चलाने के बजाय फ़ाइल परिवर्तनों की निगरानी करने की आवश्यकता है

    • मैं अपने लैपटॉप को स्थानीय नेटवर्क के बाहर सिंक नहीं कर सकता (और स्थानीय नेटवर्क में, मैं ज्यादातर समय डेस्कटॉप पीसी का उपयोग करता हूं); स्थानीय (अद्यतित) संस्करण काफी पुराना हो सकता है और कुछ विरोध दे सकता है।
  2. मैं केवल स्थानीय नेटवर्क (शायद NAS के मौजूदा नेटवर्क शेयर) का उपयोग करना चाहता हूं, न कि खुद का क्लॉड या कुछ इसी तरह का, क्योंकि हमारे पास काफी सीमित बैंडविड्थ है जहां मैं रहता हूं और मेरे पास सिंक करने के लिए कुछ नहीं बल्कि बड़ी फाइलें हैं।

मेरे ख्याल

मुझे यह सवाल मिला: मैं ड्रॉपबॉक्स की न्यूनतम व्यवहार्य प्रतिकृति की नकल करने के लिए rsync और किसी भी अन्य स्क्रिप्ट को कैसे सेटअप करूं? , और lsyncd (Live Syncing Daemon) का उपयोग करके एक समाधान में देखा गया , जो दूरस्थ लक्ष्यों के साथ स्थानीय निर्देशिकाओं को सिंक्रनाइज़ करता है। इससे समस्या # 1 हल हो सकती है, लेकिन मुझे अभी भी संघर्ष के लिए तैयार रहने की जरूरत है। इसके अलावा, मुझे विंडोज पर lsyncd के बारे में कोई डॉक्स नहीं मिला, इसलिए मुझे लगता है कि यह वहां काम नहीं करेगा।

मैंने एक समाधान में यूनिसन को शामिल करने की क्षमता को भी देखा ; यह दो-तरफ़ा सिंक करने के लिए लगता है। शायद मैं इसे lsyncd के साथ मिल कर उपयोग कर सकता था। मैं संघर्ष से निपटने के बारे में निश्चित नहीं हूँ, हालाँकि। मुझे एक संकेत मिला कि -batchसंघर्ष के साथ , बस छोड़ दिया जाता है। लेकिन मैं लंबी अवधि में विवादित फ़ाइलों को कैसे संभालूं (मैं उन्हें सिंक करना चाहता हूं, आखिरकार)?

तो मेरा सवाल यह है कि मैं इसे कैसे पूरा कर सकता हूं?


1
आप एक ऑफ-टॉपिक प्रश्न (सॉफ़्टवेयर खरीदारी) पूछ रहे हैं। उत्पाद, सेवा, या शिक्षण सामग्री की मांग करने वाले प्रश्न ऑफ टॉपिक हैं। विषय पर देखें । Softwarerecs.stackexchange.com आज़माएं लेकिन कृपया पहले पढ़ें कि "पर्याप्त जानकारी" के प्रश्न के लिए क्या आवश्यक है
DavidPostill

1
कृपया ध्यान रखें कि प्रश्न केवल एक सॉफ्टवेयर सिफारिश के बारे में नहीं है, बल्कि विचारों के बारे में है कि समस्या को कैसे हल किया जाए (संभवतः यूनिक्स टूल्स के साथ)। ऑन टॉपिक लिंक के लिए धन्यवाद, वास्तव में मैं कुछ इस तरह की तलाश कर रहा था जब मैंने सवाल पूछा था क्योंकि मुझे यकीन नहीं था कि यह यहां डाल दिया जाए, लेकिन मुझे यह नहीं मिला। मुझे नहीं लगता कि यह softwarerecs.stackexchange.com के अंतर्गत आता है, जैसा कि मुझे उम्मीद नहीं है कि वहाँ भी एक तैयार-टू- यूज़ टूल है जैसा कि उनके OnTopic में कहा गया है । मैं तदनुसार प्रश्न को संपादित करने का प्रयास करूंगा।
Qw3ry

1
@DavidPostill के रूप में कहा गया है OnTopic , प्रश्न के बारे में "व्यक्तिगत और घर कंप्यूटर नेटवर्किंग" और अधिक नहीं "किसी उत्पाद, सेवा के लिए पूछ या सामग्री सिफारिश सीखने" अब है। मुझे लगता है कि यह इन सुझावों को काफी अच्छी तरह से फिट बैठता है ।
Qw3ry

जवाबों:


2

अपने NAS के आधार पर - मैं इसके लिए बिटटोरेंट सिंक का बहुत शौकीन हूं । यह अधिकांश सिस्टम पर चलता है (जिसमें रास्पबेरी पाई और मिप सिस्टम शामिल हैं) काफी कुछ उपभोक्ता NAS सिस्टम (जैसे मेरे सीगेट) से समर्थन के साथ। आप बस साझा करने के लिए एक फ़ोल्डर चुनते हैं, एक कुंजी उत्पन्न करते हैं, और उस सिस्टम को साझा करने के लिए कुंजी का उपयोग करते हैं जिसे आप इसे चाहते हैं। यह पता लगाने के लिए काफी स्मार्ट है कि आप एक लैन पर हैं, इसके बाहर काम करता है। मुफ्त संस्करण मेरी आवश्यकताओं के लिए पर्याप्त रूप से काम करता है - मैं इसे मुख्य रूप से एक सिस्टम से डाउनलोड को सिंक करने के लिए उपयोग करता हूं जो मैं कई छोटी फ़ाइलों के सभी समय और बैकअप पर रखता हूं जिन्हें मैं अक्सर जोड़ता हूं।

यह वही करेगा जो आपको चाहिए - एक रास्ता या दो तरह से सिंक, यदि आवश्यक हो तो लैन का उपयोग करना। यह हटाई गई फ़ाइलों की एक प्रति रखकर संघर्ष से संबंधित है, (जो मैं अपने उपयोग के मामलों के लिए बंद कर देता हूं) और आम तौर पर अच्छी तरह से चलता है कि मैं शायद ही इसे नोटिस करता हूं।


मैं इसे देख लेंगे! शायद इस समाधान का उपयोग करने के लिए अपने आप से एक साथ सेंटिंग पैचिंग के बजाय। स्क्रिप्टिंग दृष्टिकोण का लाभ (मेरे लिए) है, कि SMB- शेयर स्वचालित रूप से बैकअप है (यह एक zfs है)। ओटीओएच का नुकसान यह है कि मेरी स्क्रिप्ट
एकतरफा

मैं आपके समाधान को स्वीकार करूँगा, क्योंकि अधिकांश पीपीएल पढ़ने से यह शायद बिटोरेंट सिंक के साथ बेहतर होगा।
Qw3ry

2

इसलिए, मेरे स्व-विकसित समाधान के लिए जर्नीमैन गीक की तुलना में थोड़ी अधिक स्क्रिप्टिंग की आवश्यकता है । मैंने unisonसिंक-पार्ट के लिए और zenityसंघर्षों के लिए चेतावनी देने के लिए उपयोग किया।

स्क्रिप्ट

बैश स्क्रिप्ट (इसे अपने स्टार्टअप-एप्लिकेशन में डालें):

#!/bin/bash
if [ -z "$(arp | grep MAC_ADDRESS_OF_NAS)" ]; then
    zenity --warning --text="NAS not found. Aborting."
fi;
unison sync -batch=true -repeat=watch |& while read -r line; do
    if test -n "$(echo $line | grep skipped:)"; then
        zenity --warning --text="$line"; 
    fi;
done

यूनिसन कॉन्फ़िगरेशन (इसे इस रूप sync.prfमें डालें ~/.unison/):

root=/home/my-username/the-data-i-want-to-backup/
root=/mnt/NAS/some/sub/path/

# follow all symlinks
follow = Path *

# automatically do everything (if there are no conflicts)
auto = true

# for some reason unison fails if I sync the permissions
perms = 0
dontchmod = true

विस्तृत विवरण (और व्युत्पन्न के लिए समस्या निवारण)

  1. पहले मैं जांचता हूं, अगर NAS स्थानीय नेटवर्क में पाया जाता है। यदि इसका मैक-पता arpआउटपुट में नहीं दिखता है , तो मुझे लगता है कि मुझे सिंक करने की आवश्यकता नहीं है। यह शायद कुछ और आगे बढ़ने की आवश्यकता है क्योंकि मैं शायद ही कभी अपने लैपटॉप को पूरी तरह से बंद कर देता हूं, इसलिए जब मैं नेटवर्क से कनेक्ट करता हूं तो स्क्रिप्ट शुरू नहीं होगी। शायद मैं एक क्रॉन जॉब या किसी तरह का "ऑन-नेटवर्क-कनेक्ट" जोड़ूंगा
  2. zenityएक बैश स्क्रिप्ट से चित्रमय संवाद बनाने के लिए इस्तेमाल किया जा सकता है। आपको शायद इसे स्थापित करने की आवश्यकता है। बुनियादी उपयोग बहुत सीधे आगे है।
  3. unison syncसिंक्रनाइज़ेशन प्रारंभ करता है। यह एक विन्यास प्रोफ़ाइल के लिए लग रहा है जिसे कहा जाता है ~/.unison/sync.prf। मैं syncकुछ और (फ़ाइल नाम और आदेश दोनों) द्वारा स्थानापन्न कर सकता था ।
  4. विवादित फ़ाइलों को छोड़ने के लिए, मैं निर्दिष्ट करता हूं -batch=true। मैं यह कॉन्फ़िग फ़ाइल में नहीं करता क्योंकि मैं unison syncमैन्युअल रूप से चलाना चाहता हूँ यदि कोई विरोध होता है।
  5. मुझे बदलावों को देखने के लिए किसी थर्ड पार्टी टूल की आवश्यकता नहीं है: -repeat=watchमैं जो चाहता हूं, वही करता हूं। सिडेनोट: वास्तव में यह किसी भी बदलाव पर एक पूर्ण पुनर्निमाण शुरू करता है, इसलिए यह बेहतर कर सकता है, लेकिन मेरे लिए ठीक है।
  6. unison-कमांड का आउटपुट थोड़ा अजीब है, इस काम में कुछ समय लगा:
    • यदि कोई विरोध है, तो आउटपुट शामिल है skipped: FILENAME
    • यह STDERR के बजाय STDERR पर होता है, इसलिए मुझे इसके साथ पाइप करना होगा |&
    • किसी कारण से मैं यह पता नहीं लगा सका कि यह grepमेरे लिए आसान नहीं है। मैंने कुछ ऐसा करने की कोशिश की unison sync ... |& grep "skipped:" | xargs zenity --text="{}", लेकिन यह तब तक अमल नहीं करेगा जब तक कि अंत में समाप्त नहीं हुआ (यह बिना ठीक काम किया -repeat=, और यह बिना ठीक काम किया grep)
  7. उपरोक्त कारणों से मैंने इनपुट को पढ़ने के लिए थोड़ी देर के लूप के साथ चिपका दिया और केवल प्रत्येक पंक्ति पर grep का उपयोग किया
  8. यूनिसन प्रोफाइल में, ध्यान दें कि मैंने निरपेक्ष पथों का उपयोग किया है। किसी कारण से यह साथ काम नहीं किया~/my/folder

अतिरिक्त नोट्स

  • मैं ऐसा व्यक्ति हूं, जो ओवर-इंजीनियर के लिए जाता है। मैंने एक स्क्रिप्ट तैयार की है जो मुझे यूनिसन-प्रोफाइल बनाती है। मामले में आप रुचि रखते हैं:

    #!/bin/bash
    
    HOME_DIR=$(cd ~; pwd)
    
    REPO_DIR="$(dirname "$(readlink -f $0)")"
    
    UNISON_PRF=$HOME_DIR/.unison/sync.prf
    
    # write sync script
    read -e -p "Local sync dir: [like ~/Data] " LOCAL_SYNC_DIR
    # make path absolute:
    LOCAL_SYNC_DIR="${LOCAL_SYNC_DIR/#\~/$HOME_DIR}"
    read -e -p "Remote sync dir: [like /mnt/NAS/Data/] " REMOTE_SYNC_DIR
    REMOTE_SYNC_DIR="${REMOTE_SYNC_DIR/#\~/$HOME_DIR}"
    
    rm "$UNISON_PRF"
    echo "root=$LOCAL_SYNC_DIR" > "$UNISON_PRF"
    echo "root=$REMOTE_SYNC_DIR" >> "$UNISON_PRF"
    cat "$REPO_DIR/sync.prf" >> "$UNISON_PRF"
    
    # user info
    echo "IMPORTANT: You need to put $REPO_DIR/unison/sync.sh to your startup applications for this to work properly!"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.