क्या लिनक्स में फ़ाइल संपादन सीधे डिस्क में सहेजे जाते हैं?


57

मैं सोचता था कि फ़ाइल परिवर्तन सीधे डिस्क में सहेजे जाते हैं, अर्थात्, जैसे ही मैं फ़ाइल बंद करता हूं और सहेजें पर क्लिक / चयन करने का निर्णय लेता हूं। हालाँकि, हाल ही में एक वार्तालाप में, मेरे एक मित्र ने मुझे बताया कि यह आमतौर पर सच नहीं है; ओएस (विशेष रूप से हम लिनक्स सिस्टम के बारे में बात कर रहे थे) मेमोरी में परिवर्तन रखता है और इसमें एक डेमॉन है जो वास्तव में मेमोरी से डिस्क पर सामग्री लिखता है।

यहां तक ​​कि उन्होंने बाहरी फ्लैश ड्राइव का उदाहरण दिया: ये सिस्टम में लगाए गए हैं (मेमोरी में कॉपी किए गए) और कभी-कभी डेटा हानि होती है क्योंकि डेमन ने अभी तक फ्लैश मेमोरी में सामग्री को बचाया नहीं था; यही कारण है कि हम फ्लैश ड्राइव को अनमाउंट करते हैं।

मुझे ऑपरेटिंग सिस्टम के कामकाज के बारे में कोई जानकारी नहीं है, और इसलिए मुझे बिल्कुल पता नहीं है कि क्या यह सच है और किन परिस्थितियों में है। मेरा मुख्य प्रश्न यह है कि क्या लिनक्स / यूनिक्स सिस्टम (और शायद अन्य OSes) में वर्णित है? उदाहरण के लिए, इसका मतलब यह है कि अगर मैं किसी फ़ाइल को संपादित करने और सहेजने के तुरंत बाद कंप्यूटर को बंद कर देता हूं, तो मेरे परिवर्तन सबसे अधिक खो जाएंगे? शायद यह डिस्क प्रकार पर निर्भर करता है - पारंपरिक हार्ड ड्राइव बनाम ठोस-राज्य डिस्क?

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


8
एफएओ: क्लोज वोट कतार समीक्षक। यह सीखने की सामग्री के लिए अनुरोध नहीं है। देखें unix.meta.stackexchange.com/q/3892/22812
एंथनी जी - मोनिका

2
कैश उपयोगकर्ता के लिए अपारदर्शी है, आपके पास सबसे अच्छा मामला है sync, और flushकैश की गारंटी देने के लिए एप्लिकेशन को वापस लिखा जाना चाहिए , लेकिन यहां तक ​​कि एक सक्सेफुल syncकेवल भौतिक डिस्क पर वापस लिखने की गारंटी नहीं देता है कि कर्नेल कैश डिस्क में प्रवाहित होते हैं, जो विलंबता हो सकती है ड्राइवर या डिस्क हार्डवेयर में (उदाहरण के लिए ड्राइव कैश जो आप खो देते हैं)
crasic

1
हालांकि मैं इस बात से सहमत नहीं हूं कि यह सीखने की सामग्री के लिए एक अनुरोध है, मुझे लगता है कि यह सवाल अपने वर्तमान स्वरूप में थोड़ा व्यापक है। लिनक्स वितरण (या जो भी विशिष्ट ओएस) के लिए गुंजाइश को सीमित करें और संभवतः इसे कुछ भंडारण प्रौद्योगिकियों और फाइल सिस्टम तक सीमित करें।
जेफ स्कालर

3
जैसा कि @AnthonyGeoghegan ने बताया, मैं इस प्रश्न को सीखने की सामग्री के लिए अनुरोध नहीं मानता। मुझे लगता है कि यह विशिष्ट है; मैंने एक लंबी और गहरी व्याख्या या लिनक्स फाइल सिस्टम के बारे में मैनुअल नहीं पूछा; केवल एक संक्षिप्त विचार के बारे में जिसे मैं स्पष्ट करना चाहता था।
जुआनरोमोन्डे

3
यह सच है कि जैसा कि यह है, यह थोड़ा व्यापक हो सकता है, @JeffSchaller; मैं इसे थोड़ा संपादित करने की कोशिश करने जा रहा हूं; हालाँकि, ईमानदारी से अगर साइट इस प्रकार के प्रश्नों के लिए नहीं है, जो सीधे लिनक्स के कामकाज को संबोधित करती है, तो यह किस लिए है?
जुआनरोकॉन्डम

जवाबों:


70

यदि मैं किसी फ़ाइल को संपादित करने और फ़ाइल को सहेजने के तुरंत बाद कंप्यूटर को बंद कर देता हूं, तो मेरे परिवर्तन सबसे अधिक खो जाएंगे?

वो हो सकते है। मैं "सबसे अधिक संभावना" नहीं कहूंगा, लेकिन संभावना बहुत सारी चीजों पर निर्भर करती है।


फ़ाइल लिखने के प्रदर्शन को बढ़ाने का एक आसान तरीका है, ओएस के लिए केवल डेटा को कैश करना, बताएं (झूठ बोलना) कि आवेदन जिस माध्यम से गया था, और फिर वास्तव में बाद में लिखें। यह विशेष रूप से उपयोगी है अगर एक ही समय में अन्य डिस्क गतिविधि चल रही है: ओएस रीड्स को प्राथमिकता दे सकता है और बाद में लिख सकता है। यह एक वास्तविक लेखन की आवश्यकता को भी पूरी तरह से हटा सकता है, उदाहरण के लिए, उस मामले में जहां एक अस्थायी फ़ाइल बाद में जल्दी से हटा दी जाती है।

भंडारण धीमा होने पर कैशिंग समस्या अधिक स्पष्ट होती है। एक तेज SSD से धीमी USB स्टिक में फ़ाइलों को कॉपी करना संभवत: बहुत सारे लेखन कैशिंग को शामिल करेगा, क्योंकि USB स्टिक अभी तक नहीं रख सकता है। लेकिन आपकी cpकमांड तेजी से लौटती है, इसलिए आप काम कर सकते हैं, संभवतः उन फाइलों को भी संपादित करना जो अभी कॉपी की गई थीं।


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

मैंने कहा, "माना जाता है", क्योंकि ड्राइव स्वयं ओएस को एक ही झूठ बता सकता है और कह सकता है कि लेखन पूरा हो गया है, जबकि फ़ाइल वास्तव में केवल ड्राइव के भीतर एक अस्थिर लेखन कैश में मौजूद है। ड्राइव के आधार पर, इसके आसपास कोई रास्ता नहीं हो सकता है।

के अलावा fsync(), वहाँ भी कर रहे हैं sync()और syncfs()सिस्टम कॉल कि इस प्रणाली के लिए एक विशेष फाइल सिस्टम पर सुनिश्चित करें कि सभी पूरे सिस्टम में राईट या सभी राईट डिस्क हिट करने के लिए कहें। उपयोगिता syncका उपयोग उन लोगों को कॉल करने के लिए किया जा सकता है।

इसके बाद O_DIRECTध्वजopen() भी है , जिसे माना जाता है कि "इस फ़ाइल में I / O के कैश प्रभाव को कम करने का प्रयास करें।" कैशिंग को हटाने से प्रदर्शन कम हो जाता है, इसलिए इसका उपयोग ज्यादातर अनुप्रयोगों (डेटाबेस) द्वारा किया जाता है जो अपने स्वयं के कैशिंग करते हैं और इसके नियंत्रण में रहना चाहते हैं। ( O_DIRECTइसके मुद्दों के बिना नहीं है, आदमी पृष्ठ में इसके बारे में टिप्पणी कुछ मनोरंजक हैं।)


पावर-आउट पर क्या होता है, यह फाइल सिस्टम पर भी निर्भर करता है। यह केवल फ़ाइल डेटा नहीं है जिसके बारे में आपको चिंतित होना चाहिए, बल्कि फाइल सिस्टम मेटाडेटा। अगर आपको यह नहीं मिल रहा है तो डिस्क पर फ़ाइल डेटा का अधिक उपयोग नहीं होता है। बस एक फ़ाइल को बड़े आकार में विस्तारित करने के लिए नए डेटा ब्लॉक आवंटित करने की आवश्यकता होगी, और उन्हें कहीं न कहीं चिह्नित करने की आवश्यकता है।

मेटाडेटा परिवर्तन के साथ एक फाइलसिस्टम कैसे व्यवहार करता है और मेटाडेटा और डेटा लिखने के बीच क्रम बहुत भिन्न होता है। उदाहरण के लिए ext4, यदि आप माउंट फ़्लैग सेट करते हैं data=journal, तो सभी लिखते हैं - यहां तक ​​कि डेटा भी लिखते हैं - जर्नल के माध्यम से जाना चाहिए और बल्कि सुरक्षित होना चाहिए। इसका मतलब यह भी है कि वे दो बार लिखे जाते हैं, इसलिए प्रदर्शन कम हो जाता है। डिफ़ॉल्ट विकल्प राइट्स को ऑर्डर करने की कोशिश करते हैं ताकि मेटाडेटा अपडेट होने से पहले डेटा डिस्क पर हो। अन्य विकल्प या अन्य फाइलसिस्टम बेहतर या बदतर हो सकते हैं; मैं भी एक व्यापक अध्ययन की कोशिश नहीं करेंगे।


व्यवहार में, हल्के ढंग से भरी हुई प्रणाली पर, फ़ाइल को कुछ सेकंड के भीतर डिस्क को हिट करना चाहिए। यदि आप हटाने योग्य भंडारण के साथ काम कर रहे हैं, तो डेटा को वास्तव में ड्राइव पर भेजे जाने के लिए मीडिया को खींचने से पहले फाइल सिस्टम को अनमाउंट करें, और आगे कोई गतिविधि नहीं है। (या अपने GUI वातावरण है कि आप के लिए है।)


आपका some cases whereलिंक ऐसे किसी भी मामले के बारे में नहीं कहता है - यह कहने के बजाय कि एप्लिकेशन का उपयोग नहीं करने पर समस्याएं थीं fsync। या मुझे इन मामलों को खोजने के लिए टिप्पणियों पर गौर करना चाहिए जिन्हें आप इंगित कर रहे हैं?
रुस्लान

1
आप syncसभी कैश को फ्लश करने के लिए कर्नेल को पोक करने के लिए सीधे सिस्टम शेल कमांड के रूप में भी उपयोग कर सकते हैं ।
अर्धसैनिक

3
व्यवहार में, हल्के ढंग से भरी हुई प्रणाली पर, फ़ाइल एक पल के भीतर डिस्क से टकरा जाएगी। यदि fsync()फ़ाइल लिखने के बाद ही आपका संपादक उपयोग करता है । लिनक्स डिफ़ॉल्ट के लिए /proc/sys/vm/dirty_writeback_centisecs500 (5 सेकंड) है, और पावरटॉप इसे 1500 (15 सेकंड) पर सेट करने की सलाह देता है। ( kernel.org/doc/Documentation/sysctl/vm.txt )। एक हल्के से लोड किए गए सिस्टम पर, कर्नेल इसे पृष्ठ-कैश में गंदे बैठने देगा जो write()डिस्क को फ्लश करने से बहुत पहले, उस मामले के लिए ऑप्टिमाइज़ करने के लिए जहां इसे हटा दिया गया है या जल्द ही फिर से संशोधित किया गया है।
पीटर कॉर्ड्स

2
+1 के बाद से ड्राइव स्वयं OS के लिए एक ही झूठ बना सकता है । मेरी समझ यह है कि इस तरह के कैशिंग करने वाले ड्राइव में पर्याप्त शक्ति समाई होती है, ताकि उनके कैशे को भी भयावह बिजली नुकसान से बचाया जा सके। यह ओएस-विशिष्ट नहीं है; उपयोगकर्ता के अनप्लग होने से पहले कैश फ्लशिंग करने के लिए विंडोज में "सुरक्षित रूप से यूएसबी हटाएं" तंत्र है।
स्टडोग

1
@studog, मुझे यकीन नहीं होगा, विशेष रूप से उपभोक्ता हार्डवेयर पर। लेकिन यह सिर्फ व्यामोह हो सकता है। यह परीक्षण करने के लिए दिलचस्प होगा, हालांकि।
ilkachachu

14

यह साबित करने का एक बहुत ही सरल तरीका है कि यह सच नहीं हो सकता है कि फ़ाइल संपादन हमेशा डिस्क पर सीधे सहेजे जाते हैं, अर्थात् तथ्य यह है कि ऐसे फाइल सिस्टम हैं जो पहली बार में डिस्क द्वारा समर्थित नहीं हैं । यदि किसी फ़ाइल सिस्टम में पहले स्थान पर डिस्क नहीं है , तो यह संभवतः डिस्क में परिवर्तन को कभी भी नहीं लिख सकता है

कुछ उदाहरण निम्न हैं:

  • tmpfs, एक फ़ाइल सिस्टम जो केवल RAM में मौजूद है (या अधिक सटीक रूप से, बफर कैश में)
  • ramfs, एक फाइल सिस्टम जो केवल RAM में मौजूद है
  • कोई भी नेटवर्क फाइल सिस्टम (NFS, CIFS / SMB, AFS, AFP,…)
  • किसी भी आभासी फाइल सिस्टम ( sysfs, procfs, devfs, shmfs, ...)

लेकिन डिस्क-समर्थित फ़ाइल सिस्टम के लिए भी यह आमतौर पर सच नहीं है। पेज हाउ टू करप्ट ए एन SQLite डेटाबेस में एक अध्याय है जिसे सिंक करने के लिए विफलता कहा जाता है जो कई अलग-अलग तरीकों का वर्णन करता है जिसमें यह लिखा होता है (इस मामले में SQLite डेटाबेस में आने पर) डिस्क पर पहुंचने में विफल हो सकता है। SQLite में एक श्वेत पत्र भी होता है, जिसमें बताया गया है कि परमाणु कमिट इन SQLite की गारंटी के लिए आपको कई हूपों से कूदना होगा । (ध्यान दें कि एटॉमिक राइट सिर्फ राइट की तुलना में समस्या की तुलना में बहुत कठिन है , लेकिन निश्चित रूप से डिस्क पर लिखना परमाणु लेखन की उप-समस्या है, और आप उस समस्या के बारे में भी बहुत कुछ सीख सकते हैं, इस पेपर से भी)। चीजों पर धारा जो गलत हो सकती है जिसमें एक उपधारा शामिल हैअधूरी डिस्क फ्लश जो सूक्ष्म पेचीदगियों के कुछ उदाहरण देते हैं, जो एक लेख को डिस्क तक पहुंचने से रोक सकते हैं (जैसे कि एचडीडी कंट्रोलर रिपोर्टिंग कि यह डिस्क पर तब लिखा है जब यह तथ्य नहीं है - हाँ, एचडीडी निर्माता हैं जो ऐसा करते हैं। और यह ATA युक्ति के अनुसार कानूनी भी हो सकता है, क्योंकि यह अस्पष्ट रूप से इस संबंध में शब्द है)।


10
इस उत्तर के पहले भाग में इस्तेमाल किए गए सटीक शब्द के बारे में सिर्फ besserwissering है। मैं यह नहीं देखता कि यह उपयोगकर्ता के उपहास के अलावा किसी अन्य उद्देश्य को कैसे पूरा करता है। जाहिर है कि एक नेटवर्क फाइल सिस्टम एक स्थानीय डिस्क पर नहीं लिखेगा, लेकिन सवाल अभी भी वहीं है।
पाइप

3
जैसा कि @ पिप ने बताया, तथ्य यह है कि ऐसे फाइल सिस्टम हैं जो डेटा को डिस्क में नहीं सहेजते हैं क्योंकि वे डेटा को स्टोर करने के लिए डिस्क का उपयोग नहीं करते हैं, यह तय नहीं करता है कि जिनके पास है वे सीधे इसे सहेज सकते हैं या नहीं। हालाँकि, जवाब दिलचस्प लग रहा है
JuanRocemonte

1
@ पिप मुझे यकीन है कि "बेस्स्विस्सरिंग" शब्द का प्रयोग बेस्सविस्सरिंग कर रहा है! यह कहते हुए कि अधिकार के साथ एक जर्मन बेसेरविसर के रूप में।
वोल्कर सेगेल

11

यह सच है कि अधिकांश ऑपरेटिंग सिस्टम, जिनमें यूनिक्स, लिनक्स और विंडोज शामिल हैं, ऑपरेशन को गति देने के लिए राइट कैश का उपयोग करते हैं। इसका मतलब है कि कंप्यूटर को बंद किए बिना बंद करना एक बुरा विचार है और इससे डेटा हानि हो सकती है। यदि आप USB संग्रहण को हटाने से पहले तैयार करते हैं तो यह सच है।

अधिकांश प्रणालियाँ लिखने को तुल्यकालिक बनाने का विकल्प भी देती हैं। इसका मतलब यह है कि डेटा धीमी होने की कीमत पर किसी एप्लिकेशन को सफलता की पुष्टि प्राप्त होने से पहले डिस्क पर होगा।

संक्षेप में, एक कारण है कि आपको अपने कंप्यूटर को ठीक से बंद करना चाहिए और हटाने के लिए यूएसबी स्टोरेज को ठीक से तैयार करना चाहिए।


आपके जवाब के लिए धन्यवाद! क्या लिनक्स में एक विशिष्ट फ़ाइल के डिस्क लेखन को मजबूर करने का एक तरीका है? शायद एक ट्यूटोरियल या डॉक्स पेज का लिंक, यहां तक ​​कि एक एसई सवाल भी ठीक होगा :)
जुआनरोकांटे

4
आप fsync()किसी प्रोग्राम से फ़ाइल को syscall के साथ लिखने के लिए बाध्य कर सकते हैं । एक शेल से, बस syncकमांड का उपयोग करें ।
राल्फफ्राइडल

2
लिनक्स के कुछ संस्करणों में (या कम से कम थे) कुछ फाइल सिस्टम हैं, जहां syncएक नो-ऑप के रूप में लागू किया गया था। और यहां तक कि फ़ाइल सिस्टम है कि के लिए है सही ढंग से लागू करने sync, वहां अभी भी समस्या यह है कि कुछ डिस्क firmwares लागू है FLUSH CACHEनो-सेशन के रूप में या तुरंत इसे से लौट सकते हैं और पृष्ठभूमि में प्रदर्शन करते हैं।
जोर्ज डब्ल्यू मित्तग

9

1. फ्लैश आधारित भंडारण

क्या यह डिस्क प्रकार (पारंपरिक हार्ड ड्राइव बनाम ठोस-राज्य डिस्क) या किसी अन्य चर पर निर्भर करता है, जिसके बारे में मुझे जानकारी नहीं है? क्या यह होता है (यदि यह करता है) केवल लिनक्स में या यह अन्य OSes में मौजूद है?

जब आपके पास एक विकल्प होता है, तो आपको फ्लैश-आधारित भंडारण को बिना शटडाउन के बिजली खोने की अनुमति नहीं देनी चाहिए।

एसडी कार्ड की तरह कम लागत वाले भंडारण पर, आप पूरे इरेज़-ब्लॉक (4KB से कई गुना बड़ा) खोने की उम्मीद कर सकते हैं, डेटा खो सकते हैं जो विभिन्न फाइलों या फाइल सिस्टम की आवश्यक संरचनाओं से संबंधित हो सकते हैं।

बिजली की विफलता के कारण कुछ महंगे एसएसडी बेहतर गारंटी देने का दावा कर सकते हैं। हालांकि तीसरे पक्ष के परीक्षण से पता चलता है कि कई महंगे एसएसडी ऐसा करने में विफल रहते हैं। "पहनने लेवलिंग" के लिए ब्लॉक को हटाने वाली परत जटिल और मालिकाना है। संभावित विफलताओं में ड्राइव पर सभी डेटा का नुकसान शामिल है।

हमारे परीक्षण ढांचे को लागू करते हुए, हम कुल तीन हजार से अधिक गलती इंजेक्शन चक्रों का उपयोग करते हुए छह अलग-अलग विक्रेताओं से 17 कमोडिटी एसएसडी का परीक्षण करते हैं। हमारे प्रयोगात्मक परिणामों से पता चलता है कि 17 में से 14 परीक्षण किए गए एसएसडी डिवाइस बिजली के दोषों के तहत आश्चर्यजनक विफलता व्यवहार प्रदर्शित करते हैं, जिसमें थोड़ा भ्रष्टाचार, कटा हुआ लेखन, अप्राप्य लेखन, मेटाडेटा भ्रष्टाचार और कुल डिवाइस विफलता शामिल हैं।

2017: https://dl.acm.org/citation.cfm?id=2992782&preflayout=flat

2013: https://www.usenix.org/system/files/conference/fast13/fast13-final80.pdf?wptouch_preview_theme=enabled

2. हार्ड डिस्क ड्राइव को स्पिन करना

स्पिनिंग एचडीडी की अलग-अलग विशेषताएं हैं। सुरक्षा और सरलता के लिए, मैं यह मानने की सलाह देता हूं कि उनके पास फ्लैश-आधारित भंडारण जैसी ही व्यावहारिक अनिश्चितता है।

जब तक आपके पास कोई विशिष्ट सबूत न हो, जो आप स्पष्ट रूप से नहीं करते हैं। HDDs कताई के लिए मेरे पास तुलनात्मक आंकड़े नहीं हैं।

एक HDD खराब चेकसम के साथ एक अधूरे लिखित क्षेत्र को छोड़ सकता है, जो हमें बाद में एक अच्छी पढ़ने में विफलता देगा। मोटे तौर पर, HDDs की यह विफलता मोड पूरी तरह से अपेक्षित है; देशी लिनक्स फाइल सिस्टम को ध्यान में रखते हुए बनाया गया है। उनका लक्ष्य fsync()इस प्रकार की बिजली हानि दोष की स्थिति में अनुबंध को संरक्षित करना है। (हम वास्तव में SSDs पर इसकी गारंटी देखना चाहेंगे)।

हालाँकि मुझे यकीन नहीं है कि क्या लिनक्स फाइल सिस्टम सभी मामलों में इसे हासिल करता है, या यह संभव भी है।

इस प्रकार की गलती के बाद अगले बूट को एक फाइल सिस्टम मरम्मत की आवश्यकता हो सकती है। यह लिनक्स होने के नाते, यह संभव है कि फाइलसिस्टम की मरम्मत कुछ सवाल पूछेंगी जो आपको समझ में नहीं आते हैं, जहां आप केवल वाई को दबा सकते हैं और आशा करते हैं कि यह खुद को हल कर लेगा।

2.1 यदि आप नहीं जानते कि fsync () अनुबंध क्या है

Fsync () अनुबंध अच्छी खबर और बुरी खबर दोनों का एक स्रोत है। आपको पहले अच्छी खबर को समझना चाहिए।

अच्छी खबर: fsync()फ़ाइल डेटा लिखने के सही तरीके के रूप में अच्छी तरह से प्रलेखित है जैसे कि जब आप "सेव" को हिट करते हैं। और यह व्यापक रूप से समझा जाता है कि उदाहरण के लिए पाठ संपादकों को मौजूदा फ़ाइलों को अनिवार्य रूप से उपयोग करना चाहिए rename()। यह सुनिश्चित करने के लिए है कि आप हमेशा या तो पुरानी फ़ाइल रखते हैं, या नई फ़ाइल प्राप्त करते हैं (जो fsync()कि नाम बदलने से पहले एड की गई थी )। आप नई फ़ाइल के आधे लिखित संस्करण के साथ नहीं रहना चाहते हैं।

बुरी खबर: कई सालों से, सबसे लोकप्रिय लिनक्स फाइल सिस्टम पर fsync () कॉलिंग प्रभावी रूप से दसियों सेकंड के लिए लटकाए गए पूरे सिस्टम को प्रभावी ढंग से छोड़ सकती है। चूँकि अनुप्रयोग इस बारे में कुछ नहीं कर सकते हैं, इसलिए fsync () के बिना नाम बदलने () का उपयोग करना सामान्य था, जो इस फाइलसिस्टम पर अपेक्षाकृत विश्वसनीय प्रतीत होता था।

इसलिए, एप्लिकेशन मौजूद हैं जो fsync () का सही उपयोग नहीं करते हैं।

इस फाइलसिस्टम के अगले संस्करण में आमतौर पर fsync () हैंग से बचा जाता है - साथ ही साथ यह fsync () के सही उपयोग पर निर्भर होने लगा।

यह सब बहुत बुरा है। इस इतिहास को समझना संभवत: खारिज करने वाले स्वर और अभेद्य द्वारा मदद नहीं करता है जो कि कई परस्पर विरोधी कर्नेल डेवलपर्स द्वारा उपयोग किया गया था।

वर्तमान रिज़ॉल्यूशन यह है कि वर्तमान सबसे लोकप्रिय लिनक्स फाइल सिस्टम नाम बदलने का समर्थन करने के लिए चूक () fsync की आवश्यकता के बिना पैटर्न ()पिछले संस्करण के साथ "बग-फॉर-बग संगतता" को लागू करता है। इसे माउंट विकल्प के साथ अक्षम किया जा सकता है noauto_da_alloc

यह पूर्ण सुरक्षा नहीं है। मूल रूप से यह नामांकित () समय पर लंबित IO को निकाल देता है, लेकिन यह नाम बदलने से पहले IO के पूरा होने की प्रतीक्षा नहीं करता है। हालांकि यह एक 60 सेकंड खतरे की खिड़की की तुलना में बहुत बेहतर है! यह भी देखें कि किसी मौजूदा फ़ाइल को नाम बदलने () के साथ बदलने के दौरान क्रैश-सुरक्षा के लिए किन फाइल सिस्टमों के लिए fsync () की आवश्यकता होती है?

कुछ कम लोकप्रिय फाइल सिस्टम सुरक्षा प्रदान नहीं करते हैं। XFS ऐसा करने से इनकार करता है। और यूबीआईएफएस ने इसे लागू नहीं किया है, जाहिरा तौर पर इसे स्वीकार किया जा सकता है लेकिन इसे संभव बनाने के लिए बहुत काम करने की आवश्यकता है। एक ही पृष्ठ बताता है कि यूबीआईएफएस में डेटा अखंडता के लिए कई अन्य "TODO" मुद्दे हैं, जिसमें बिजली की हानि भी शामिल है। UBIFS एक फाइलसिस्टम है जिसका उपयोग सीधे फ्लैश स्टोरेज पर किया जाता है। मुझे लगता है कि फ्लैश स्टोरेज के साथ UBIFS उल्लेखों में से कुछ कठिनाइयों SSD कीड़े के लिए प्रासंगिक हो सकता है।


5

एक हल्के से लोड किए गए सिस्टम पर, कर्नेल नव-लिखित फ़ाइल डेटा write()को डिस्क के फ्लश करने से पहले 30 सेकंड के लिए पेज-कैशे में बैठ सकता है , इसे डिलीट करने या संशोधित किए गए केस के अनुकूलन के लिए।

dirty_expire_centisecs3000 (30 सेकंड) के लिए लिनक्स की चूक , और नव-लिखित डेटा "एक्सपायर" से पहले कितनी देर तक नियंत्रित करता है। ( Https://lwn.net/Articles/322823/ देखें )।

अधिक संबंधित ट्यूनबलों के लिए https://www.kernel.org/doc/Documentation/sysctl/vm.txt और बहुत अधिक के लिए Google देखें । (जैसे गूगल पर dirty_writeback_centisecs)।

/proc/sys/vm/dirty_writeback_centisecs500 (5 सेकंड) के लिए लिनक्स डिफ़ॉल्ट है , और पावरटॉप बिजली की खपत को कम करने के लिए इसे 1500 (15 सेकंड) पर सेट करने की सलाह देता है।


विलंबित राइट-बैक कर्नेल को यह देखने के लिए भी समय देता है कि फ़ाइल कितनी बड़ी होगी, इसे डिस्क पर लिखना शुरू करने से पहले। देरी से आवंटन के साथ फाइलसिस्टम (जैसे XFS, और शायद अन्य लोग इन दिनों) यह भी नहीं चुनते हैं कि डिस्क पर कहां है कि जब तक आवश्यक न हो, तब तक इनोड के लिए जगह आवंटित करने से अलग एक नव-लिखित फ़ाइल का डेटा न डालें। यह विखंडन को कम कर देता है, उदाहरण के लिए, उन्हें अन्य फ़ाइलों के बीच 1 मेगा गैप में बड़ी फ़ाइल की शुरुआत से बचने से रोकता है।

यदि बहुत सारा डेटा लिखा जा रहा है, तो पेजबैक में कितने गंदे (अभी तक डिस्क पर सिंक नहीं किए गए) डेटा के लिए थ्रेश डिस्क से डिस्क को ट्रिगर किया जा सकता है।

यदि आप बहुत कुछ नहीं कर रहे हैं, हालांकि, आपकी हार्ड-ड्राइव गतिविधि प्रकाश एक छोटी फ़ाइल पर सहेजने के बाद 5 (या 15) सेकंड के लिए नहीं जाएगी।


यदि आपका संपादक fsync()फ़ाइल लिखने के बाद उपयोग करता है, तो कर्नेल बिना किसी देरी के डिस्क पर लिख देगा। (और fsyncडेटा के डिस्क पर भेजे जाने तक वापस नहीं आएगा)।


डिस्क के भीतर कैशिंग लिखना भी एक बात हो सकती है, लेकिन डिस्क आमतौर पर लिनक्स के पेज-कैश एल्गोरिदम के विपरीत, उनके लेखन-कैश को स्थायी भंडारण एएसएपी के लिए प्रतिबद्ध करने की कोशिश करते हैं। डिस्क लिखने के कैश लिखने के छोटे फटने को अवशोषित करने के लिए एक स्टोर बफर के अधिक हैं, लेकिन हो सकता है कि वह रीड्स के पक्ष में लिखने में देरी कर सकता है, और डिस्क्स फ़र्मवेयर रूम को एक सीक पैटर्न को अनुकूलित करने के लिए देता है (जैसे दो पास में लिखने या पढ़ने के बजाय एक करने के लिए। , तो दूर की तलाश, फिर वापस मांगने की।)

एक घूर्णन (चुंबकीय) डिस्क पर, आप देख सकते हैं कि SATA राइट कमांड से डेटा से पहले प्रत्येक 7 से 10 ms की कुछ देरी हो रही है, वास्तव में पॉवर-ऑफ से सुरक्षित है, अगर आपके लिखे के आगे पठन / लेखन लंबित थे। (इस प्रश्न पर कुछ अन्य उत्तर डिस्क लेखन कैश के बारे में अधिक विस्तार से जाते हैं और उन बाधाओं को लिखते हैं जो एफएस को प्रकाशित करते हैं भ्रष्टाचार से बचने के लिए।)

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