क्या कोई फाइल सिस्टम सीपी के लिए लिखें तंत्र पर कॉपी लागू करता है


16

हमने देखा है कि OS एक प्रक्रिया लिखते समय अनुकूलन पर कॉपी कर रहा है। कारण यह है कि अधिकांश समय कांटे को क्रियान्वित करके आगे बढ़ाया जाता है, इसलिए हम पृष्ठ आवंटन की लागत को लाइक नहीं करना चाहते हैं और कॉलर एड्रेस स्पेस से डेटा को अनावश्यक रूप से कॉपी करना चाहते हैं।

तो क्या यह तब भी होता है जब ext 4 या xfs (जर्नलिंग) फ़ाइल सिस्टम के साथ एक लिनक्स पर सीपी कर रहा है। अगर नहीं होता है, तो क्यों नहीं होता है?


आशा है कि कोई इस दिलचस्प सवाल का जवाब देगा
करीम मनाउल

हालाँकि, मुझे ऐसा नहीं लगता है, क्योंकि, उदाहरण के लिए, एक बड़ी फ़ाइल का उपयोग करने में काफी लंबा समय लगता है (नए ब्लॉक में डेटा कॉपी करना)। अगर इस तरह के फाइलसिस्टम (कम से कम 3 / ext4 कम से कम) में एक गाय था, तो आप समय विलंबता को नोटिस नहीं करेंगे (शायद इस तरह के मामले में केवल संकेत के बिना इनोड की नकल डेटा ब्लॉक और कुछ गाय के झंडे को चिह्नित करना है)।
करीम मनौली

कॉपी-ऑन-राइट जेडएफएस पर लागू किया गया है, और इसमें वास्तव में बहुत सस्ता फाइल सिस्टम / वॉल्यूम क्लोन है। ext4 / xfs के पास बहुत ही आदिम ऑन-डिस्क प्रारूप है, मुझे विश्वास है कि समर्थन करने के लिए
myaut

जवाबों:


7

खोज के लिए कीवर्ड है reflink। इसे हाल ही में XFS में लागू किया गया था।

संपादित करें: XFS कार्यान्वयन को शुरू में EXPERIMENTAL के रूप में चिह्नित किया गया था। कर्नेल रिलीज़ 4.16 में यह चेतावनी हटा दी गई थी, इसके कुछ महीने बाद मैंने ऊपर :-) लिखा था।


12

से cp आदमी पेज :

जब --reflink [= हमेशा] निर्दिष्ट किया जाता है, तो एक हल्की कॉपी करें, जहां डेटा ब्लॉक केवल संशोधित होने पर कॉपी किए जाते हैं। यदि यह संभव नहीं है तो प्रतिलिपि विफल हो जाती है, या यदि --reflink = ऑटो निर्दिष्ट किया जाता है, तो मानक प्रतिलिपि पर वापस गिरें।

यह फाइल सिस्टम पर काम करता है जो फिलहाल कॉपी-ऑन-राइट ( रिफलिंक ) का समर्थन करता है , मुख्य रूप से BTRFS। XFS रिफ्लिन कार्यान्वयन विकास [1] [2] में है


1
कुछ नेटवर्क फ़ाइल सिस्टम जैसे NFS, CIFS, OCFS2 सर्वर के साथ-साथ उन तक भी जा सकते हैं।
स्टीफन चेज़लस

2

लिनक्स में एक सिस्टम कॉल है जो उपयोगकर्ताओं को फ़ाइलों की प्रतिलिपि लिखने पर कॉपी बनाने के लिए उपयोगकर्ताओं को बताने की अनुमति देता है। FICLONERANGE और FICLONE को ioctl के लिए विकल्प के रूप में उपयोग किया जाता है जो फ़ाइलों की कॉपी प्रतियां और फाइलों के भीतर श्रेणियों को बनाने की अनुमति देता है।

इसका उपयोग cp --reflink द्वारा उन प्रतियों को बनाने के लिए किया जाता है जहाँ फ़ाइल सिस्टम इस का समर्थन करता है।


1

जब तक आप cp(या कम से कम किसी ब्लॉक को कॉपी करने के लिए) एक syscall का परिचय नहीं देते हैं , OS के पास एक कठिन समय होता है जिससे पता चलता है कि cpप्रोग्राम जो डेटा लिखने जा रहा है, वह वैसा ही है जैसा वह किसी दूसरे ब्लॉक से पढ़ता है। उसके ऊपर, आपके पास "कई फ़ाइलों को समान ब्लॉक साझा करने के लिए" परिदृश्य का प्रबंधन करने के लिए अतिरिक्त ओवरहेड होगा। बड़ी समान फाइलें जो केवल कुछ ब्लॉकों में भिन्न होती हैं, शायद ही कभी होती हैं। तो यह उन ब्लॉकों को कॉपी करने के लिए पूरे पर सस्ता है, फिर इस प्रशासनिक ओवरहेड को सभी फाइलों में जोड़ने के लिए ।

अब यदि आप फ़ाइल सिस्टम में किसी अन्य क्लोन / स्नैपशॉट को जोड़कर (उनमें से बहुत सारी) फाइलों की "कॉपी" करते हैं, तो कहते हैं, BTRFS, स्थिति अलग है: अब आपने फाइलसिस्टम की सभी फाइलों को कॉपी कर लिया है , और इसमें कोई बदलाव किया है। उन्हें कॉपी-ऑन-राइट किया जाएगा। यह मौजूद है, लेकिन ext4 में नहीं।

"पत्रिका" उस से पूरी तरह से स्वतंत्र अवधारणा है, यह फाइलों की गिनती के लिए प्रशासनिक संरचना है।


बड़ी फ़ाइलों में से एक बहुत ही कम समय में अन्य अत्यंत दुर्लभ समय की बाइनरी कॉपी होती है और ऐसा होने पर त्रुटि के कारण होती है।
बिटिफेट

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