Cp --reflink = ऑटो डिफ़ॉल्ट व्यवहार क्यों नहीं है?


31

cp --reflink=autoडिफ़ॉल्ट व्यवहार क्यों नहीं है? क्या इसे सक्षम करने के लिए कोई नुकसान हो सकता है?

क्या इसे संकलित समय पर सक्षम करना संभव है, इसलिए यह पूरे सिस्टम में उपयोग किया जाता है, न कि केवल इंटरैक्टिव गोले में?


4
हाँ, अच्छा सवाल है। IMHO यह होगा, क्योंकि केवल BTRFS एक डिफ़ॉल्ट लिनक्स फाइल सिस्टम होना शुरू होता है।
एडम रिक्ज़ोस्की

जवाबों:


38

यह मजबूती के कारणों से डिफ़ॉल्ट नहीं है क्योंकि कोई व्यक्ति डेटा भ्रष्टाचार से बचाने के लिए कॉपी ले सकता है। प्रदर्शन कारणों से भी आप लिख सकते हैं कि सीओडब्ल्यू फ़ाइल पर काम करने वाली कुछ विलंबता संवेदनशील प्रक्रिया के बजाय कॉपी समय पर लिखना संभव हो सकता है और संभवत: मैकेनिकल डिस्क के एक अलग हिस्से को राइट्स द्वारा देरी हो रही है। ध्यान दें कि कोर्यूटिल्स v8.24 mv से डिफ़ॉल्ट रूप से रिफ्लेक्स होगा, क्योंकि इसमें उपरोक्त बाधाएँ नहीं हैं।


8
(कि पारेग जीएनयू कोरयूटिल्स का अनुरक्षक है, क्योंकि इसे आधिकारिक उत्तर माना जा सकता है)।
स्टीफन चेजेलस

8
मुझे संदेह है कि यह उत्तर सही है, कम से कम btrfs पर। यदि फ़ाइल को बाद में लिखा जाता है, तो नए डेटा को btrfs CoW के कारण वैसे भी एक अलग डिस्क सेक्टर को लिखा जाएगा, इसलिए रिफ्लिंक्स न करने का कोई विलंब लाभ नहीं है। जिन फ़ाइलों में NoDataCoW सेट है उन्हें वैसे भी रीलिंक नहीं किया जा सकता है। और अगर आप डेटा करप्शन से बचना चाहते हैं तो आपको एक अलग पार्टीशन में कॉपी करना होगा और रिफ्लेक्स भी काम नहीं करेगा।
जनकानी

3
विलंबता के मुद्दे हैं क्योंकि BTRFS को लेखन समय पर स्थान खोजने और आवंटित करने की आवश्यकता है। यह इस प्रकार भी उपलब्ध समय पर ENOSPC त्रुटियों को फेंकने के लिए उपलब्ध नहीं हो सकता है
ब्रैडी

1
एमवीएल के रिफिल के लिए क्या उपयोग है?
मैकिल

1
क्रॉस सबवोल्म का नाम btrfs पर है
पडरैग ब्रैडी

17

कारण है कि यह डिफ़ॉल्ट नहीं है, हो सकता है इतना है कि यह अन्य नकल उपयोगिताओं (के रूप में ही व्यवहार करती है पता नहीं है rsync, cpio, pax, tar...) जो कोई समर्थन नहीं है के लिए यह (या जब फ़ाइलें एक अंतरफलक भर में कॉपी कर रहे हैं कि अनुमति नहीं है कि (जैसे एनएफएस, सांबा, फ्यूज फाइल सिस्टम लेयर ...)।

मैं कुछ साल पहले उसी स्थिति में था, और जीएनयू सीपीपी कोड को जल्दी से देख रहा था, यह अभी भी वही है, आपको एक अलग डिफ़ॉल्ट व्यवहार प्राप्त करने के लिए कोड को पैच करना होगा:

--- coreutils-8.21/src/cp.c~    2013-06-22 21:50:26.265639114 +0100
+++ coreutils-8.21/src/cp.c     2013-06-22 21:51:06.880513924 +0100
@@ -775,7 +775,7 @@ cp_option_init (struct cp_options *x)
   x->interactive = I_UNSPECIFIED;
   x->move_mode = false;
   x->one_file_system = false;
-  x->reflink_mode = REFLINK_NEVER;
+  x->reflink_mode = REFLINK_AUTO;

   x->preserve_ownership = false;
   x->preserve_links = false;

4

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

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

यह जानते हुए कि आपका सिस्टम आपकी पीठ के पीछे रिफ्लिक्स कॉपी कर रहा था जब उस तरह का एक ऑपरेशन विफल हो गया, यह बहुत बुरा आश्चर्य होगा।


कम से कम btrfs पर भी लिखें कि फाइल का पहले से ही आवंटित हिस्सा ENOSPC के साथ फेल हो सकता है ...
ग्रेवॉल्फ

2
alias cp='cp --reflink=auto --sparse=always'

कोड को पैच करने से बेहतर अर्थ है


6
ऐसा लगता है कि आपने इसे संकलन समय पर सक्षम करना संभव समझा, इसलिए इसका उपयोग पूरे सिस्टम में किया जाता है, न कि केवल ओपी के प्रश्न में संवादात्मक गोले में।
स्टीफन चेजलस

5
@StephaneChazelas हमेशा एक ही नाम की /bin/cpस्क्रिप्ट के साथ इसका नाम बदल सकता है और बदल सकता है
goncalopp

0
  1. मजबूत होने का कारण यह हो सकता है कि कोई व्यक्ति डेटा "हानि" से बचाने के लिए एक प्रति ले सकता है।

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

  2. प्रदर्शन कारणों से नहीं।

    सीओडब्ल्यू तब होता है जब केवल का एक हिस्सा मिटा देता है? ब्लॉक को लिखा है। आधुनिक! डिस्क के साथ! डिवाइस हार्डवेयर ब्लॉक का आकार 4k का एक बहु है। 4k का हिस्सा बदलने से ड्राइव पूरी 4k पढ़ने और इसे फिर से लिखने का कारण बनता है, लेकिन इसके शीर्ष पर कर्नेल एक ही काम करने जा रहा है, इसलिए ब्लॉक डिवाइस, एसएसडी या अन्यथा तक पहुंचने वाला कोई आंशिक लेखन नहीं होगा । कर्नेल को सीओडब्ल्यू को उसी कारणों से करने की आवश्यकता है, जब तक कि हम एक कैश्ड प्रतिलिपि नहीं बनाते हैं, हम डिवाइस के अन्य हिस्सों में मौजूद डेटा को नहीं बना सकते हैं, एक फ़ाइल के कहानी अंत के लिए बचा सकते हैं लेकिन फिर बिंदु है विवादास्पद। लेकिन एक फ़ाइल की प्रतिलिपि कैशिंग और एक फ़ाइल की प्रतिलिपि बनाना अलग-अलग ऑपरेशन हैं, पूर्व बहुत सस्ता है।

    लेखन का पता सारहीन है, लेकिन यह जान लें कि "डिवाइस का कुछ अन-यूज्ड पार्ट" "जहां फाइल के ब्लॉक वर्तमान में रहते हैं," की तुलना में सस्ता है।

तथ्य यह है कि कोई भी CoW विधि या तो सस्ता है या केवल एक ब्लॉक डिवाइस को अपडेट करने के बराबर है। अब अगर हम ब्लॉक डिवाइसेज पर बात नहीं कर रहे थे, तो यह एक और कहानी होगी ... टेप पर लिखा गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.