एक btrfs फाइल सिस्टम पर "cp -R --reflink = हमेशा" एक मानक प्रतिलिपि क्यों करता है?


12

Btrfs कॉपी-ऑन-राइट का समर्थन करते हैं। मैंने किसी निर्देशिका को क्लोन करने के लिए उस सुविधा का उपयोग करने की कोशिश की:

cp -R --reflink=always foo_directory foo_directory.mirror

मुझे उम्मीद थी कि कमांड लगभग (जैसे btrfs subvolume snapshot) तुरंत समाप्त हो जाएगी , लेकिन cpकमांड धीमी, मानक प्रतिलिपि का प्रदर्शन करती है।

मैन पेज के अनुसार, मुझे --reflink=alwaysकॉपी-ऑन-राइट लागू करने की उम्मीद होगी :

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

प्रशन:

  • क्या आप जानते हैं कि --reflink=alwaysकाम क्यों नहीं होता है?
  • इसके बजाय मुझे कौन से विकल्प (या अन्य कमांड) का उपयोग करना चाहिए?

जवाबों:


20

cp --reflink=alwaysनिश्चित रूप से सही ढंग से काम कर रहा है। यदि ऐसा नहीं होता, तो आपको एक त्रुटि हो सकती है। डिजाइन से, यही अंतर है --reflink=alwaysऔर --reflink=auto। त्रुटि इस तरह दिखाई देगी:

# Filesystem that does not support the feature at all
cp: failed to clone `xx' from `yy': Inappropriate ioctl for device

# Filesystem that does support it, but copy across filesystems
cp: failed to clone `xx' from `yy': Invalid cross-device link

क्या आप बहुत सी छोटी फ़ाइलों के साथ निर्देशिका संरचना की प्रतिलिपि बना रहे हैं? उस मामले में cpअभी भी हर डायरेक्टरी बनानी है और हर फाइल को खोलना और बंद करना है, इसलिए इसके विपरीत समय लगेगा btrfs subvolume snapshot। सबसे अधिक संभावना है कि ऑपरेशन करने में लगने वाला समय।


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

1
हाँ, यदि आप एक स्नैपशॉट बना सकते हैं तो इसके लिए जाएँ। cp --reflink=alwaysअभी भी काम में आ सकता है जब आप क्लोन करने की कोशिश कर रहे हैं, तो एक सबवॉल्म की जड़ नहीं है, क्योंकि btrfs subvolume snapshotकेवल सबवॉल्म्स पर काम करता है, सबवॉल्म्स के कुछ हिस्सों पर नहीं।
सेलादा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.