Cp / rsync अतुल्यकालिक हैं?


2

हम एक बैकअप स्क्रिप्ट चला रहे हैं, जो पहले एक गंतव्य पर एक फ़ाइल की प्रतिलिपि बनाती है और फिर उस पर चलती tarहै।

DIR2BCK='/foo/bar'
TMPDIR=$(mktemp -d)
rsync -a ${DIR2BCK} ${TMPDIR}/ > /dev/null 2>&1
tar czf /tmp/foo.backup.tar ${TMPDIR}

इस अंतिम आदेश को चलाने के बाद, कभी-कभी निम्नलिखित चेतावनी दिखाई जाती है:

/tmp/tmp.blqspkA136: जैसे ही हम इसे पढ़ते हैं फाइल बदल जाती है

हम संपीड़न समय पर फ़ाइल परिवर्तनों से बचने के लिए गंतव्य को एक अस्थायी निर्देशिका में कॉपी करते हैं। इसके cpबजाय आदेश का उपयोग करते समय यह व्यवहार भी प्रतिलिपि प्रस्तुत करने योग्य है rsync। मेरा सारा जीवन मैंने सोचा था कि ये आदेश समकालिक थे, लेकिन यह चेतावनी विपरीत दिखाती है।

यदि मैं / और लाइनों के sleepबीच एक कमांड डालता हूं , तो चेतावनी दिखाई नहीं देती है, लेकिन मैं इसे काफी साफ समाधान नहीं मानता हूं।rsynccptar

कुछ तथ्य:

  • मैंने एक ही परिणाम के साथ कमांड और syncकमांड के बीच एक कमांड जोड़ने की कोशिश की ।rsynctar
  • जैसा कि @jcbermu ने सुझाव दिया था कि मैंने स्क्रिप्ट बदलने की भी कोशिश की है, इसलिए दो लाइनें हैं:

    rsync -a ${DIR2BCK} ${TMPDIR}/ > /dev/null 2>&1 &
    wait
    

    मैं कई बार स्क्रिप्ट चलाता हूं और उनमें से कुछ ने एक ही व्यवहार दिखाया है, दावा करते हैं कि नकल करते समय फ़ाइल बदल जाती है।

  • फाइलसिस्टम का इस्तेमाल EXT4 दोनों के लिए है ${TMPDIR}और ${DIR2BCK}

  • ${DIR2BCK}एक दूरस्थ फाइल सिस्टम पर है, वास्तव में यह एक रिमोट मशीन का सांबा माउंटपॉइंट है। ${TMPDIR}स्थानीय फाइल सिस्टम पर है। हालाँकि, ${DIR2BCK}स्थानीय फ़ाइल सिस्टम में बदलने से कोई फ़र्क नहीं पड़ता।
  • सभी फाइलसिस्टम हार्डवेयर RAID -5 आधारित हैं।

क्या ये कमांड वास्तव में सिंक्रोनस हैं? यदि नहीं, तो क्या उन्हें ऐसा करने का कोई तरीका है, या एक वैकल्पिक आदेश है?


हां, ये आदेश बाहर निकलने पर किए जाते हैं। आप फ़ाइल / निर्देशिका नामों को उद्धृत नहीं कर रहे हैं। कृपया उस ASAP को ठीक करें।
डैनियल बी

@DanielB मेरी गलती। यद्यपि लॉजिक्स समान है, यह वास्तविक कोड नहीं है। असली में उद्धरण शामिल हैं।
nKn

खैर तब शायद असली कोड में एक सूक्ष्म गलती है । या वास्तव में इस मुद्दे को पुन: पेश करने के लिए कोड ऊपर पर्याप्त है?
डैनियल बी

हां, यह पर्याप्त होना चाहिए, क्योंकि रास्ते सही हैं। मुख्य मुद्दा यह है कि जब tarशुरू होता है, rsync/ cpअभी तक नकल समाप्त नहीं हुआ है, और चेतावनी दिखाई जाती है। मैंने मान लिया कि ये आज्ञाएँ समकालिक हैं, इसीलिए मैं आश्चर्यचकित हूं।
nnn

कोशिश मत करो, कोशिश करो। अन्यथा, एक योग्य उत्तर प्रदान नहीं किया जा सकता है। // syncयहाँ मदद नहीं कर रहा है। आप उपकरणों पर कच्चे डेटा तक नहीं पहुंच रहे हैं। // कृपया इस बारे में भी जानकारी दें कि कौन से फाइल सिस्टम दोनों पर रहते हैं $TMPDIRऔर किस $DIR2BCKपर रहते हैं।
डैनियल बी

जवाबों:


0

एक समाधान के रूप में इसे फिर से लिखना है:

rsync -a ${DIR2BCK} ${TMPDIR}/ > /dev/null 2>&1 ; tar czf foo.backup.tar ${TMPDIR}

इसलिए, अंत tarतक शुरू नहीं होगा rsync


अन्य समाधान पृष्ठभूमि के लिए cp/ भेजना है rsyncऔर जब तक यह कमांड के साथ समाप्त नहीं होता है तब तक प्रतीक्षा करें wait

उदाहरण के लिए:

rsync -a ${DIR2BCK} ${TMPDIR}/ > /dev/null 2>&1 &
wait
tar czf foo.backup.tar ${TMPDIR}

पंक्ति &में अंतिम rsyncपृष्ठभूमि को निष्पादन भेजता है (यह वर्तमान सत्र का एक बच्चा बन जाता है ), और फिर waitइस शेल सत्र को प्रतीक्षा करने के लिए मजबूर करता है जब तक कि सभी बच्चे जारी रखने के लिए समाप्त नहीं हो जाते।


1
पहले दृष्टिकोण के साथ समस्या यह है कि यह मेरे द्वारा उपयोग किए जाने वाले के बराबर है। दो आदेशों को दो पंक्तियों में विभाजित करना ;विभाजक के साथ एक लाइनर के समान है । उनमें से कोई भी tarपंक्ति को तब तक शुरू नहीं करना चाहिए जब तक कि rsync/ cpकमांड समकालिक न होने पर समाप्त न हो जाएं, लेकिन इस मामले में ऐसा नहीं होता है। मैं दूसरा तरीका आजमाऊंगा और वापस आ जाऊंगा।
nKn

दुर्भाग्य से आपके द्वारा प्रस्तावित परिवर्तन में कुछ बदलावों में समान व्यवहार दिखाया गया था, मैंने इस परीक्षा को जोड़ते हुए अपने प्रश्न को संपादित किया।
एनकेएन

0

मैं rsync / cp और टार लाइनों के बीच एक नींद कमांड रखता हूं, चेतावनी दिखाई नहीं देती है, लेकिन मैं इसे एक बहुत अच्छा समाधान नहीं मानता हूं।

आपके लिए अच्छा है या मानक हैं। क्या होता है, अगर नींद के बजाय, आप उपयोग करते हैं:

सूडो सिंक; गूंज 3 | सुडो टी / proc / sys / vm / drop_caches

क्या आप इसे एक अच्छा समाधान मानते हैं?

नोट: / proc / sys / vm / drop_caches लगता है कि Ubuntu क्या उपयोग करता है, और सभी यूनिक्स (हालांकि शायद सभी लिनक्स) पर काम करने वाला एक दृष्टिकोण होने की उम्मीद नहीं है। मैं इसे पढ़ने के बाद उल्लेख कर रहा हूंhttps://ubuntuforums.org/showthread.php?t=589975 और, प्रारंभिक रिपोर्ट को पढ़ने के बाद ऐसा करने की सुरक्षा पर सवाल उठाते हुए, अधिक मंच थ्रेड पोस्ट पढ़ने से जो इसकी सुरक्षा की पुष्टि करता है।


मैं अपने प्रश्न में उल्लेख करना भूल गया, लेकिन मैंने पहले ही syncआदेश को बिना किसी सफलता के साथ आजमा लिया। मैंने एक स्थानीय फाइल सिस्टम और रिमोट रिमोट दोनों को कॉपी करने की कोशिश की, लेकिन ऐसा ही होता है। drop_cachesके रूप में हम अलग ओएस (CentOS, Ubuntu, डेबियन ...) का एक बहुत का उपयोग हमारे लिए अच्छा नहीं है।
nnn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.