मान लीजिए कि आपका प्रोग्राम किसी फ़ाइल पर जानकारी लिख रहा है। सिस्टम क्रैश होने पर डिस्क आपकी फ़ाइल को कैसे पुनर्प्राप्त करता है?


6

और वह सिस्टम क्रैश तब होता है जब आपकी फ़ाइल आपके प्रोग्राम द्वारा लिखी जा रही हो?

इसके अलावा, क्या यह है कि जब आपका प्रोग्राम फ़ाइल को लिखता है, तो यह वास्तव में डिस्क पर सीधे नहीं लिख रहा है, बल्कि इसके बजाय मेमोरी में है?

क्योंकि यह सिर्फ ऐसा लगता है कि यह सिस्टम के लिए लिखित डेटा को मेमोरी में स्थानांतरित करने के लिए अधिक प्रभावी होगा, और फिर जब यह पूरी तरह से चीजों को डिस्क पर वापस स्थानांतरित करने के लिए लिखा जाता है।

किसी भी स्थिति में, डिस्क कैसे डेटा को पुनर्प्राप्त करता है, चाहे आपका प्रोग्राम सीधे डिस्क पर लिखता है, या क्या समाप्त फ़ाइल डिस्क पर विभिन्न स्थानों पर सिस्टम द्वारा कॉपी की जाने की प्रक्रिया में है या नहीं?


आप कौन से ऑपरेटिंग सिस्टम का उपयोग कर रहे हैं? आप किस फाइलसिस्टम का उपयोग कर रहे हैं?
FrustratedWithFormsDesigner

हम्म् अभी मेरे कंप्यूटर में एक विंडोज 7 है (जो मैं मान रहा हूं कि NTFS है)। लेकिन मैं इस प्रश्न के लिए एक सामान्य अर्थ में सोच रहा था (किसी की मशीन के लिए निर्दिष्ट उत्तर ठीक है)।

विंडोज़ के लिए छाया प्रतिलिपि (VSS) देखें, और मुझे लगता है कि linux journaling filesystems के पास कुछ मेटाडेटा है जो लिखने से पहले लिखा जाता है कि फ़ाइल को कहीं और लिखा जा रहा है, और फिर फ़ाइल को लिखे जाने के लिए एक और टुकड़ा।
मालफिस्ट

Btw, क्या आप "linux journaling filesystems" से क्या मतलब है? क्या आपका मतलब है linux logging filesystems ...?

1
यहाँ आप जाते हैं, मैं अपना उत्तर भी अपडेट करूँगा: en.wikipedia.org/wiki/Journaling_file_system
Malfist

जवाबों:


7

क्योंकि यह सिर्फ ऐसा लगता है कि यह सिस्टम के लिए लिखित डेटा को मेमोरी में स्थानांतरित करने के लिए अधिक प्रभावी होगा, और फिर जब यह पूरी तरह से चीजों को डिस्क पर वापस स्थानांतरित करने के लिए लिखा जाता है।

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

किसी भी स्थिति में, डिस्क कैसे डेटा को पुनर्प्राप्त करता है, चाहे आपका प्रोग्राम सीधे डिस्क पर लिखता है, या क्या समाप्त फ़ाइल डिस्क पर विभिन्न स्थानों पर सिस्टम द्वारा कॉपी की जाने की प्रक्रिया में है या नहीं?

ऑपरेटिंग सिस्टम और विशेष फ़ाइल सिस्टम पर निर्भर करता है। अक्सर, डेटा को डिस्क पर एक नई फ़ाइल में लिखा जाता है। जब आपका प्रोग्राम फ़ाइल को बंद कर देता है, तो बफर को फ्लश कर दिया जाता है और डायरेक्टरी को पुरानी वाली के बजाय नई फाइल को इंगित करने के लिए अपडेट किया जाता है, जिसे बाद में डिलीट किया जा सकता है। यह डेटा भ्रष्टाचार से बचता है अगर सिस्टम लेखन के दौरान दुर्घटनाग्रस्त हो जाता है - अंतिम क्षण में निर्देशिका को बदलने से "परमाणु" लिखते हुए भ्रम पैदा होता है।

आप जर्नल फ़ाइल सिस्टम और ट्रांसेक्शनल फ़ाइल सिस्टम के बारे में पढ़ना चाह सकते हैं ।

अन्य रणनीतियाँ भी संभव हैं। संपूर्ण पाठ्यपुस्तकें फाइल सिस्टम और फॉल्ट टॉलरेंस पर उपलब्ध हैं।

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


1
धन्यवाद! यहाँ सिर्फ दो वास्तविक क्विक क्वेश्चन हैं: 1) तो मान लीजिए कि फाइल एटोमिकली नहीं लिखी गई है, और सब कुछ "रोल बैक" होना चाहिए। क्या इसका मतलब यह है कि अगली बार जब सिस्टम रिबूट हो जाता है, तो सिस्टम लॉग की जांच करेगा और फिर से बदलाव करेगा? 2) इसके अलावा, मुझे यकीन नहीं है कि आप गलती सहिष्णुता से क्या मतलब है क्योंकि मैं कुछ ऐसा देख रहा हूं जब वितरित सिस्टम का जिक्र है, लेकिन डिस्क के साथ इतना नहीं ...
काइटलिन मैकमोर्डी

@KaitlynMcmordie 1) फिर, क्या होता है फ़ाइल सिस्टम और OS पर निर्भर करता है, लेकिन आम तौर पर अगर किसी कारणवश (जैसे कि बिजली की विफलता) कोई लेखन पूरा नहीं किया जा सकता है, तो फ़ाइल सिस्टम बिल्कुल भी बदलाव नहीं दिखाएगा। इसलिए, यदि फ़ाइल अभी बनाई जा रही थी, तो यह डिस्क पर मौजूद नहीं होगी। यदि इसे संशोधित किया जा रहा था, तो डिस्क पर फ़ाइल लिखने से ठीक पहले का संस्करण होगा। 2) यहां दोषपूर्ण सहिष्णुता की तुलना में लूटपाट एक बेहतर शब्द हो सकता है; मेरा मतलब था कि विभिन्न प्रकार की त्रुटियों के बावजूद प्रणाली की क्षमता निरंतर बनी रहे।
कालेब

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

2) डिस्क और फॉल्ट टॉलरेंस के बारे में गूगल से पूछना तीन मिलियन परिणाम देता है। फाइल सिस्टम और फॉल्ट टॉलरेंस के लिए समान है। वास्तव में, दोष सहिष्णुता एक बहुत ही व्यापक रूप से लागू शब्द है, उदाहरण के लिए देखें RAID।
मेआर्टिनस

2
@KaitlynMcmordie: एक "लटकने वाला संदर्भ" एक फ़ाइल नाम होगा जो अभी भी एक निर्देशिका में है, लेकिन अब इसके साथ कोई भौतिक फ़ाइल संबद्ध नहीं है। ऐसा तब होता जब कंप्यूटर किसी फ़ाइल को हटाने के दौरान आधे रास्ते में दुर्घटनाग्रस्त हो जाता - OS को फ़ाइल और फ़ाइल नाम दोनों को निकालने की आवश्यकता होती है, और वे आमतौर पर अलग-अलग जगहों पर संग्रहीत होते हैं।
MSalters

5

अधिकांश आधुनिक फाइल सिस्टम जर्नल हैं । इसका मतलब है कि फ़ाइल / फाइल सिस्टम में परिवर्तन की एक पत्रिका है। क्रैश होने पर, अंतिम प्रविष्टि को वापस रोल किया जा सकता है यदि यह पूर्ण के रूप में चिह्नित नहीं है; या यदि पर्याप्त जानकारी है, तो अधिनियमित किया जा सकता है।

विकिपीडिया में यह है:

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

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


समझा! तो फाइलिंग सिस्टम जर्नलिंग करके मैं यह अनुमान लगा रहा हूं कि यह लॉगिंग फाइलसिस्टम के समान ही है, बस एक ही चीज़ का वर्णन करने के लिए अलग-अलग शब्दों का उपयोग करना?
४m में कैटिलिन मैकमोर्डी

1
@KaitlynMcmordie: हाँ।
सर्फ़

आमतौर पर मैं ically लॉगिंग ’सुनने की तुलना में ically जर्नलिंग’ ज्यादा सुनता हूं, fwiw। (मुझे लगता है कि 'लॉगिंग' अधिक संदर्भों में अस्पष्ट हो सकता है।)
शिनराई

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