cp --reflink=auto
डिफ़ॉल्ट व्यवहार क्यों नहीं है? क्या इसे सक्षम करने के लिए कोई नुकसान हो सकता है?
क्या इसे संकलित समय पर सक्षम करना संभव है, इसलिए यह पूरे सिस्टम में उपयोग किया जाता है, न कि केवल इंटरैक्टिव गोले में?
cp --reflink=auto
डिफ़ॉल्ट व्यवहार क्यों नहीं है? क्या इसे सक्षम करने के लिए कोई नुकसान हो सकता है?
क्या इसे संकलित समय पर सक्षम करना संभव है, इसलिए यह पूरे सिस्टम में उपयोग किया जाता है, न कि केवल इंटरैक्टिव गोले में?
जवाबों:
यह मजबूती के कारणों से डिफ़ॉल्ट नहीं है क्योंकि कोई व्यक्ति डेटा भ्रष्टाचार से बचाने के लिए कॉपी ले सकता है। प्रदर्शन कारणों से भी आप लिख सकते हैं कि सीओडब्ल्यू फ़ाइल पर काम करने वाली कुछ विलंबता संवेदनशील प्रक्रिया के बजाय कॉपी समय पर लिखना संभव हो सकता है और संभवत: मैकेनिकल डिस्क के एक अलग हिस्से को राइट्स द्वारा देरी हो रही है। ध्यान दें कि कोर्यूटिल्स v8.24 mv से डिफ़ॉल्ट रूप से रिफ्लेक्स होगा, क्योंकि इसमें उपरोक्त बाधाएँ नहीं हैं।
कारण है कि यह डिफ़ॉल्ट नहीं है, हो सकता है इतना है कि यह अन्य नकल उपयोगिताओं (के रूप में ही व्यवहार करती है पता नहीं है 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;
एक बड़ा मुद्दा यह है कि जब आप लिखते हैं तो कॉपी करने के लिए अंतरिक्ष से बाहर भागने की क्षमता होती है।
एक सामान्य कॉपी के साथ, फिर जैसे ही कॉपी पूरी हो जाती है, आपको कभी भी फाइल के मौजूदा हिस्सों के लिखने के बारे में चिंता करने की जरूरत नहीं है: स्पेस पूरी तरह से आवंटित है और जब तक आप फाइल को डिलीट नहीं करेंगे तब तक यह नहीं जाएगा। लेकिन एक रिफ्लिंक कॉपी के साथ, हमेशा एक जोखिम होता है कि सड़क के नीचे कुछ बिंदु सप्ताह या महीनों में, फ़ाइल के मौजूदा हिस्से के लिए एक लेखन विफल हो जाएगा क्योंकि प्रतिलिपि बनाने के लिए पर्याप्त जगह नहीं थी।
यह जानते हुए कि आपका सिस्टम आपकी पीठ के पीछे रिफ्लिक्स कॉपी कर रहा था जब उस तरह का एक ऑपरेशन विफल हो गया, यह बहुत बुरा आश्चर्य होगा।
alias cp='cp --reflink=auto --sparse=always'
कोड को पैच करने से बेहतर अर्थ है
/bin/cp
स्क्रिप्ट के साथ इसका नाम बदल सकता है और बदल सकता है
मजबूत होने का कारण यह हो सकता है कि कोई व्यक्ति डेटा "हानि" से बचाने के लिए एक प्रति ले सकता है।
हम नहीं जानते कि इसका कारण है, लेकिन जो बुरी चीजें हो सकती हैं, वे मीडिया के विनाश तक सीमित हैं। अधिकांश सभी ब्लॉक डिवाइसों में भ्रष्टाचार पहचान (crc) के कुछ रूप होंगे, यदि त्रुटि सुधार (समता) को अग्रेषित नहीं किया गया है।
प्रदर्शन कारणों से नहीं।
सीओडब्ल्यू तब होता है जब केवल का एक हिस्सा मिटा देता है? ब्लॉक को लिखा है। आधुनिक! डिस्क के साथ! डिवाइस हार्डवेयर ब्लॉक का आकार 4k का एक बहु है। 4k का हिस्सा बदलने से ड्राइव पूरी 4k पढ़ने और इसे फिर से लिखने का कारण बनता है, लेकिन इसके शीर्ष पर कर्नेल एक ही काम करने जा रहा है, इसलिए ब्लॉक डिवाइस, एसएसडी या अन्यथा तक पहुंचने वाला कोई आंशिक लेखन नहीं होगा । कर्नेल को सीओडब्ल्यू को उसी कारणों से करने की आवश्यकता है, जब तक कि हम एक कैश्ड प्रतिलिपि नहीं बनाते हैं, हम डिवाइस के अन्य हिस्सों में मौजूद डेटा को नहीं बना सकते हैं, एक फ़ाइल के कहानी अंत के लिए बचा सकते हैं लेकिन फिर बिंदु है विवादास्पद। लेकिन एक फ़ाइल की प्रतिलिपि कैशिंग और एक फ़ाइल की प्रतिलिपि बनाना अलग-अलग ऑपरेशन हैं, पूर्व बहुत सस्ता है।
लेखन का पता सारहीन है, लेकिन यह जान लें कि "डिवाइस का कुछ अन-यूज्ड पार्ट" "जहां फाइल के ब्लॉक वर्तमान में रहते हैं," की तुलना में सस्ता है।
तथ्य यह है कि कोई भी CoW विधि या तो सस्ता है या केवल एक ब्लॉक डिवाइस को अपडेट करने के बराबर है। अब अगर हम ब्लॉक डिवाइसेज पर बात नहीं कर रहे थे, तो यह एक और कहानी होगी ... टेप पर लिखा गया है।