हम एक बैकअप स्क्रिप्ट चला रहे हैं, जो पहले एक गंतव्य पर एक फ़ाइल की प्रतिलिपि बनाती है और फिर उस पर चलती 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
बीच एक कमांड डालता हूं , तो चेतावनी दिखाई नहीं देती है, लेकिन मैं इसे काफी साफ समाधान नहीं मानता हूं।rsync
cp
tar
कुछ तथ्य:
- मैंने एक ही परिणाम के साथ कमांड और
sync
कमांड के बीच एक कमांड जोड़ने की कोशिश की ।rsync
tar
जैसा कि @jcbermu ने सुझाव दिया था कि मैंने स्क्रिप्ट बदलने की भी कोशिश की है, इसलिए दो लाइनें हैं:
rsync -a ${DIR2BCK} ${TMPDIR}/ > /dev/null 2>&1 & wait
मैं कई बार स्क्रिप्ट चलाता हूं और उनमें से कुछ ने एक ही व्यवहार दिखाया है, दावा करते हैं कि नकल करते समय फ़ाइल बदल जाती है।
फाइलसिस्टम का इस्तेमाल EXT4 दोनों के लिए है
${TMPDIR}
और${DIR2BCK}
।${DIR2BCK}
एक दूरस्थ फाइल सिस्टम पर है, वास्तव में यह एक रिमोट मशीन का सांबा माउंटपॉइंट है।${TMPDIR}
स्थानीय फाइल सिस्टम पर है। हालाँकि,${DIR2BCK}
स्थानीय फ़ाइल सिस्टम में बदलने से कोई फ़र्क नहीं पड़ता।- सभी फाइलसिस्टम हार्डवेयर RAID -5 आधारित हैं।
क्या ये कमांड वास्तव में सिंक्रोनस हैं? यदि नहीं, तो क्या उन्हें ऐसा करने का कोई तरीका है, या एक वैकल्पिक आदेश है?
tar
शुरू होता है, rsync
/ cp
अभी तक नकल समाप्त नहीं हुआ है, और चेतावनी दिखाई जाती है। मैंने मान लिया कि ये आज्ञाएँ समकालिक हैं, इसीलिए मैं आश्चर्यचकित हूं।
sync
यहाँ मदद नहीं कर रहा है। आप उपकरणों पर कच्चे डेटा तक नहीं पहुंच रहे हैं। // कृपया इस बारे में भी जानकारी दें कि कौन से फाइल सिस्टम दोनों पर रहते हैं $TMPDIR
और किस $DIR2BCK
पर रहते हैं।