यदि आप इसे कॉपी करते समय किसी फ़ाइल को संशोधित करते हैं तो क्या होता है?


19

फ़ाइल को कॉपी करने का क्या प्रभाव है, fileA.big (900mb) से लोकेशन B से लोकेशन तक। यदि उस cp ऑपरेशन के दौरान, प्रक्रिया के माध्यम से 35% कहते हैं, तो fileA.big को नई जानकारी के साथ जोड़ दिया जाता है और 900mb से 930mb तक बढ़ जाता है।

अंतिम प्रति (यानी fileC.big at locationC) का परिणाम क्या है?

क्या होगा यदि प्रतिलिपि लगभग 70% है, और मूल फ़ाइल को अपडेट किया गया है, लेकिन इस बार 400mb (यानी कॉपी की प्रगति ट्रंकेशन बिंदु से परे है) में काट दिया गया है, अंतिम प्रतिलिपि का परिणाम क्या है?

एक ext3 / ext4 फाइल सिस्टम पर एक linux OS का जिक्र। कोई वॉल्यूम छाया जादू आदि .. बस सादे पुराने सीपी। बैकअप के लिए लाइव काउचडब फाइल को कॉपी करके उत्सुकता बढ़ी, लेकिन विशिष्ट उपयोग के मामले में सामान्य परिदृश्य में अधिक रुचि।


यह पूछने के लिए धन्यवाद। मेरा 'ज्ञान' ज्यादातर एक अनुमान था ... अब तक।
tshepang

जवाबों:


10

यदि fileA.bigप्रतिलिपि के दौरान उगाया जाता है, तो प्रतिलिपि में वह डेटा शामिल होगा जिसे जोड़ा गया था।

यदि फ़ाइल उस स्थान पर छोटी है जहां प्रतिलिपि वर्तमान में है, तो कॉपी सही तरीके से समाप्त हो जाएगी, जहां उसकी और गंतव्य फ़ाइल में वह सम्‍मिलित है, जो उस समय तक निरस्‍त की गई थी, जिसकी प्रतिलिपि बनाई गई थी।


27

पैट्रिक कम या ज्यादा सही है, लेकिन यहाँ क्यों है। जिस तरह से आप UNIX के तहत फाइल कॉपी करते हैं वह इस तरह से काम करता है:

  1. कुछ (अधिक) बाइट्स पढ़ने की कोशिश करें fileA
  2. यदि हम बाइट प्राप्त करने में विफल रहे हैं क्योंकि हम फ़ाइल के अंत में (या पिछले) हैं, तो हम कर रहे हैं; छोड़ दिया।
  3. अन्यथा, fileBचरण 1 पर बाइट्स और लूप को वापस लिखें ।

उसको जानना, और यह जानना उतना ही सरल है, इससे हमें कुछ कोने के मामले देखने को मिलते हैं।

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

यदि फ़ाइल को काट दिया जाता है, तो कॉपी प्रोग्राम कहता है "वाह, मैं फ़ाइल के अंत में हूं!" और छोड़ देता है।

और अगर डेटाबेस के प्रोग्राम, :-) के अनुसार, फ़ाइल के टुकड़ों को यादृच्छिक रूप से अपडेट किया जा रहा है, तो आपकी कॉपी में पुराने और नए डेटा का कुछ मिश्रण होने वाला है, क्योंकि डेटा एक ही समय में कॉपी नहीं किया जाता है। परिणाम संभवतः एक भ्रष्ट प्रतिलिपि होगी, यही कारण है कि यह आमतौर पर लाइव डेटाबेस की प्रतियां बनाने के लिए एक अच्छा विचार नहीं है।

(उस ने कहा, मैं काउचडीबी से परिचित नहीं हूं, और इस तरह के भ्रष्टाचार के लिए प्रतिरोधी होने के लिए एक डेटाबेस तैयार करना संभव है। लेकिन पूरी तरह से सुनिश्चित होना सबसे अच्छा है।)


अच्छे खर्च। BTW, इसने मुझे हमेशा आश्चर्यचकित किया है कि विंडोज से ज्ञात विशिष्ट त्रुटि संदेश प्राप्त किए बिना UNIX जैसे OS के तहत यह क्यों संभव है ("फ़ाइल का उपयोग नहीं कर सकते - फ़ाइल का उपयोग करें") आप पहले से हटाए गए एमपी 3 फ़ाइल भी नहीं खेल सकते थे इसे खेलते समय । यूनिक्स के तहत, आप (आश्चर्यजनक रूप से) - बिना किसी समस्या के कर सकते हैं। मुझे लगता है कि यूनिक्स आधारित ओएस हमेशा फाइलों की बैकअप प्रतियों के साथ काम करते हैं, इसलिए यह संभव है।
सिंटैक्सैयर

1
दरअसल, डिलीट की गई फाइल को पढ़ने में सक्षम होना अलग UNIX फीचर से आता है: UNIX के तहत, फाइल और फाइलनेम अलग-अलग चीजें हैं। जब आप किसी फ़ाइल को हटाते हैं, तो आप वास्तव में क्या कर रहे हैं, फ़ाइल का नाम "लिंक" हटा रहा है। जब कोई प्रोग्राम एक फ़ाइल खोलता है, तो वह एक लिंक के रूप में भी मायने रखता है। सिस्टम फ़ाइल को तभी हटाएगा जब उसके पास कोई लिंक नहीं बचेगा।
जेंडर

इसलिए यदि फ़ाइल तेजी से बढ़ती है तो हम उसे कॉपी कर सकते हैं, cp कभी समाप्त नहीं होगा? मुझे लगता है कि इसकी संभावना कम है, क्योंकि जो कुछ भी फ़ाइल में लिखता है, उसे फ़ाइल में लिखने में सक्षम होना होगा, तेजी से cp से पढ़ सकता है।
मूत्राशय
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.