जर्नलिंग फ़ाइल सिस्टम: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 6: Line 6:
'''जर्नलिंग [[फाइल सिस्टम]]''' ऐसा फ़ाइल सिस्टम है जो [[जर्नल (कंप्यूटिंग)]] नामक डेटा स्ट्रक्चर में ऐसे चेंजेज़ के गोल को रिकॉर्ड करके फ़ाइल सिस्टम के मुख्य भाग में अभी तक प्रतिबद्ध नहीं किए गए चेंजेज़ का ट्रैक रखता है, जो सामान्तयः [[गोलाकार लॉग|सर्कुलर लॉग]] होता है। सिस्टम क्रैश या पावर फेल्यर की स्थिति में, ऐसे फ़ाइल सिस्टम को डेटा कर्रप्ट होने की कम संभावना के साथ अधिक तीव्रता से पुनः ऑनलाइन लाया जा सकता है।<ref name="developerworks-1">{{citation|title = Anatomy of Linux journaling file systems|url = http://www.ibm.com/developerworks/library/l-journaling-filesystems/index.html|publisher = [[IBM DeveloperWorks]]|date = June 4, 2008|access-date = April 13, 2009|first = M Tim|last = Jones|archive-url = https://web.archive.org/web/20090221103211/http://www.ibm.com/developerworks/library/l-journaling-filesystems/index.html|archive-date = February 21, 2009|url-status = live}}</ref><ref name="ostep-1">{{citation|title = Crash Consistency: FSCK and Journaling|url = http://pages.cs.wisc.edu/~remzi/OSTEP/file-journaling.pdf|publisher = Arpaci-Dusseau Books|date = January 21, 2014|first1 = Remzi H.|last1 = Arpaci-Dusseau|first2 = Andrea C.|last2 = Arpaci-Dusseau|access-date = January 22, 2014|archive-url = https://web.archive.org/web/20140124115718/http://pages.cs.wisc.edu/~remzi/OSTEP/file-journaling.pdf|archive-date = January 24, 2014|url-status = live}}</ref>
'''जर्नलिंग [[फाइल सिस्टम]]''' ऐसा फ़ाइल सिस्टम है जो [[जर्नल (कंप्यूटिंग)]] नामक डेटा स्ट्रक्चर में ऐसे चेंजेज़ के गोल को रिकॉर्ड करके फ़ाइल सिस्टम के मुख्य भाग में अभी तक प्रतिबद्ध नहीं किए गए चेंजेज़ का ट्रैक रखता है, जो सामान्तयः [[गोलाकार लॉग|सर्कुलर लॉग]] होता है। सिस्टम क्रैश या पावर फेल्यर की स्थिति में, ऐसे फ़ाइल सिस्टम को डेटा कर्रप्ट होने की कम संभावना के साथ अधिक तीव्रता से पुनः ऑनलाइन लाया जा सकता है।<ref name="developerworks-1">{{citation|title = Anatomy of Linux journaling file systems|url = http://www.ibm.com/developerworks/library/l-journaling-filesystems/index.html|publisher = [[IBM DeveloperWorks]]|date = June 4, 2008|access-date = April 13, 2009|first = M Tim|last = Jones|archive-url = https://web.archive.org/web/20090221103211/http://www.ibm.com/developerworks/library/l-journaling-filesystems/index.html|archive-date = February 21, 2009|url-status = live}}</ref><ref name="ostep-1">{{citation|title = Crash Consistency: FSCK and Journaling|url = http://pages.cs.wisc.edu/~remzi/OSTEP/file-journaling.pdf|publisher = Arpaci-Dusseau Books|date = January 21, 2014|first1 = Remzi H.|last1 = Arpaci-Dusseau|first2 = Andrea C.|last2 = Arpaci-Dusseau|access-date = January 22, 2014|archive-url = https://web.archive.org/web/20140124115718/http://pages.cs.wisc.edu/~remzi/OSTEP/file-journaling.pdf|archive-date = January 24, 2014|url-status = live}}</ref>


वास्तविक इम्प्लीमेंटेशन के आधार पर, जर्नलिंग फ़ाइल सिस्टम केवल स्टोर्ड [[ मेटा डेटा |मेटा डेटा]] का ट्रैक रख सकता है, जिसके परिणामस्वरूप डेटा कर्रप्शन की बढ़ती संभावना के व्यय पर परफॉरमेंस में उन्नति होती है। वैकल्पिक रूप से, जर्नलिंग फ़ाइल सिस्टम स्टोर्ड डेटा और संबंधित मेटाडेटा दोनों को ट्रैक कर सकता है, जबकि कुछ इम्प्लीमेंटेशन इस संबंध में सेलेक्टेबल बिहेवियर की अनुमति देते हैं।<ref>{{Cite web
वास्तविक इम्प्लीमेंटेशन के आधार पर, जर्नलिंग फ़ाइल सिस्टम केवल स्टोर्ड [[ मेटा डेटा |मेटा डेटा]] का ट्रैक रख सकता है, जिसके परिणामस्वरूप डेटा कर्रप्शन की संभावना में वृद्धि के व्यय पर परफॉरमेंस में उन्नति होती है। वैकल्पिक रूप से, जर्नलिंग फ़ाइल सिस्टम स्टोर्ड डेटा और संबंधित मेटाडेटा दोनों को ट्रैक कर सकता है, जबकि कुछ इम्प्लीमेंटेशन इस संबंध में सेलेक्टेबल बिहेवियर की अनुमति देते हैं।<ref>{{Cite web
  | url = http://linux.die.net/man/8/tune2fs
  | url = http://linux.die.net/man/8/tune2fs
  | title = tune2fs(8) – Linux man page
  | title = tune2fs(8) – Linux man page
Line 20: Line 20:
तत्पश्चात इसे 1993 में माइक्रोसॉफ्ट के [[ विंडोज़ एनटी |विंडोज़ एनटी]] के [[एनटीएफएस]] फाइल सिस्टम में, 1998 में एप्पल के [[एचएफएस प्लस]] फाइल सिस्टम में और 2001 में [[लिनक्स]] के [[ext3]] फाइल सिस्टम में इम्प्लीमेंट किया गया था।<ref>{{cite web|url=http://marc.info/?l=linux-kernel&m=100650331813822&w=2|title='2.4.15-final' - MARC|website=marc.info|access-date=March 24, 2018}}</ref>
तत्पश्चात इसे 1993 में माइक्रोसॉफ्ट के [[ विंडोज़ एनटी |विंडोज़ एनटी]] के [[एनटीएफएस]] फाइल सिस्टम में, 1998 में एप्पल के [[एचएफएस प्लस]] फाइल सिस्टम में और 2001 में [[लिनक्स]] के [[ext3]] फाइल सिस्टम में इम्प्लीमेंट किया गया था।<ref>{{cite web|url=http://marc.info/?l=linux-kernel&m=100650331813822&w=2|title='2.4.15-final' - MARC|website=marc.info|access-date=March 24, 2018}}</ref>
==तर्कसंगत ==
==तर्कसंगत ==
फ़ाइलों और डायरेक्ट्रियों में चेंजेज़ को रिफ्लेक्ट करने के लिए तथा फ़ाइल सिस्टम को अपडेट करने के लिए सामान्तयः कई भिन्न-भिन्न राइट ऑपरेशनों की आवश्यकता होती है। इससे राइटिंग के मध्य इंट्रप्शन (जैसे पावर फेल्यर या सिस्टम [[क्रैश (कंप्यूटिंग)]]) के कारण डेटा स्ट्रक्चर्स को इनवैलिड इंटरमीडिएट स्टेट में छोड़ना संभव हो जाता है।<ref name="developerworks-1" />
फ़ाइलों और डायरेक्ट्रियों में चेंजेज़ को रिफ्लेक्ट करने के लिए तथा फ़ाइल सिस्टम को अपडेट करने के लिए सामान्तयः कई भिन्न-भिन्न राइट ऑपरेशनों की आवश्यकता होती है। इससे राइटिंग के मध्य इंट्रप्शन (जैसे पावर फेल्यर या सिस्टम [[क्रैश (कंप्यूटिंग)]]) के कारण डेटा स्ट्रक्चर्स को इनवैलिड इंटरमीडिएट स्टेट में रखना संभव हो जाता है।<ref name="developerworks-1" />


उदाहरण के लिए, यूनिक्स फ़ाइल सिस्टम पर किसी फ़ाइल को डिलीट करने में तीन चरण सम्मिलित होते हैं:<ref>File Systems from Tanenbaum, A.S. (2008). Modern operating systems (3rd ed., pp. 287). Upper Saddle River, NJ: Prentice Hall.</ref>
उदाहरण के लिए, यूनिक्स फ़ाइल सिस्टम पर किसी फ़ाइल को डिलीट करने में तीन चरण सम्मिलित होते हैं:<ref>File Systems from Tanenbaum, A.S. (2008). Modern operating systems (3rd ed., pp. 287). Upper Saddle River, NJ: Prentice Hall.</ref>
Line 34: Line 34:


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


जब जर्नल स्वयं लिखा जा रहा हो तो जर्नल के आंतरिक प्रारूप को क्रैश होने से बचाना चाहिए। कई जर्नल इम्प्लीमेंटेशन (जैसे कि [[ext4]] में JBD2 परत) चेकसम के साथ लॉग किए गए प्रत्येक परिवर्तन को इस समझ के साथ ब्रैकेट करते हैं कि क्रैश लापता (या बेमेल) चेकसम के साथ आंशिक रूप से लिखित परिवर्तन छोड़ देगा जिसे जर्नल को दोबारा चलाने पर आसानी से अनदेखा किया जा सकता है। अगला रिमाउंट.
जब जर्नल स्वयं लिखा जा रहा हो तो जर्नल के इंटरनल फॉर्मेट को क्रैश होने से बचाना चाहिए। कई जर्नल इम्प्लीमेंटेशन (जैसे कि [[ext4]] में जेबीडी2 लेयर) चेकसम के साथ लॉग किए गए प्रत्येक परिवर्तन को इस समझ के साथ ब्रैकेट करते हैं कि क्रैश मिसिंग (या मिसमैच) चेकसम के साथ पार्शियली रिटेन चेंज त्याग देगा जिसे नेक्स्ट रीमाउंट पर जर्नल को रीप्ले करने पर सरलता से अनदेखा किया जा सकता है।


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


भौतिक पत्रिकाएँ महत्वपूर्ण प्रदर्शन जुर्माना लगाती हैं क्योंकि प्रत्येक परिवर्तित ब्लॉक को दो बार भंडारण के लिए प्रतिबद्ध किया जाना चाहिए, लेकिन पूर्ण दोष संरक्षण की आवश्यकता होने पर स्वीकार्य हो सकता है।<ref name="tweedie-1">{{citation|title = Ext3, journaling filesystem|last = Tweedie|first = Stephen|journal = Proceedings of the Ottawa Linux Symposium|pages = 24–29|year = 2000}}</ref>
फिजिकल जर्नल्स महत्वपूर्ण परफॉरमेंस पेनल्टी लगाते हैं क्योंकि प्रत्येक चेंज्ड ब्लॉक को दो बार स्टोरेज के लिए प्रतिबद्ध किया जाना चाहिए, किन्तु एब्सोल्यूट फाल्ट प्रोटेक्शन की आवश्यकता होने पर यह स्वीकार्य हो सकता है।<ref name="tweedie-1">{{citation|title = Ext3, journaling filesystem|last = Tweedie|first = Stephen|journal = Proceedings of the Ottawa Linux Symposium|pages = 24–29|year = 2000}}</ref>
=== तार्किक जर्नल ===
=== लॉजिकल जर्नल ===
तार्किक जर्नल जर्नल में फ़ाइल मेटाडेटा में केवल परिवर्तनों को स्टोर्ड करता है, और काफी बेहतर लेखन प्रदर्शन के लिए दोष सहनशीलता का व्यापार करता है।<ref>{{citation|title = Analysis and Evolution of Journaling File Systems|first1 = Vijayan|last1 = Prabhakaran|first2 = Andrea C|last2 = Arpaci-Dusseau|first3 = Remzi H|last3 = Arpaci-Dusseau|url = https://www.usenix.org/events/usenix05/tech/general/full_papers/prabhakaran/prabhakaran.pdf|journal = 2005 USENIX Annual Technical Conference|publisher = USENIX Association|access-date = July 27, 2007|archive-url = https://web.archive.org/web/20070926161625/https://www.usenix.org/events/usenix05/tech/general/full_papers/prabhakaran/prabhakaran.pdf|archive-date = September 26, 2007|url-status = live}}.</ref> लॉजिकल जर्नल वाला फ़ाइल सिस्टम क्रैश होने के बाद भी जल्दी ठीक हो जाता है, लेकिन अनजर्नल फ़ाइल डेटा और जर्नल मेटाडेटा को -दूसरे के साथ समन्वयित होने की अनुमति दे सकता है, जिससे डेटा भ्रष्टाचार हो सकता है।
लॉजिकल जर्नल, जर्नल में फ़ाइल मेटाडेटा में केवल चेंजेज़ को स्टोर्ड करता है, और बेटर राइट परफॉरमेंस के लिए फाल्ट टॉलरेंस का व्यापार करता है।<ref>{{citation|title = Analysis and Evolution of Journaling File Systems|first1 = Vijayan|last1 = Prabhakaran|first2 = Andrea C|last2 = Arpaci-Dusseau|first3 = Remzi H|last3 = Arpaci-Dusseau|url = https://www.usenix.org/events/usenix05/tech/general/full_papers/prabhakaran/prabhakaran.pdf|journal = 2005 USENIX Annual Technical Conference|publisher = USENIX Association|access-date = July 27, 2007|archive-url = https://web.archive.org/web/20070926161625/https://www.usenix.org/events/usenix05/tech/general/full_papers/prabhakaran/prabhakaran.pdf|archive-date = September 26, 2007|url-status = live}}.</ref> लॉजिकल जर्नल वाला फ़ाइल सिस्टम क्रैश होने के पश्चात् भी रिकवर हो जाता है, किन्तु अनजर्नल फ़ाइल डेटा और जर्नल मेटाडेटा को एक-दूसरे के साथ सिंक होने की अनुमति दे सकता है, जिससे डेटा करप्शन हो सकता है।


उदाहरण के लिए, किसी फ़ाइल में जोड़ने पर तीन अलग-अलग लेखन सम्मिलित हो सकते हैं:
उदाहरण के लिए, किसी फ़ाइल में ऍपेन्डिंग पर तीन भिन्न-भिन्न राइट्स सम्मिलित हो सकते हैं:
# फ़ाइल का इनोड, फ़ाइल के मेटाडेटा में नोट करने के लिए कि इसका आकार बढ़ गया है।
# फ़ाइल का इनोड, फ़ाइल के मेटाडेटा में नोट करने के लिए कि इसके आकार में वृद्धि हो गयी है।
# मुक्त स्थान मानचित्र, जोड़े जाने वाले डेटा के लिए स्थान के आवंटन को चिह्नित करने के लिए।
#ऍपेन्डेड डेटा के लिए स्पेस के एलोकेशन को मार्क करने के लिए फ्री स्पेस मैप होता है।
# नया आवंटित स्थान, वास्तव में संलग्न डेटा लिखने के लिए।
#ऍपेन्डेड डेटा लिखने के लिए नया एलोकेट स्पेस होता है।
केवल-मेटाडेटा जर्नल में, चरण 3 लॉग नहीं किया जाएगा। यदि चरण 3 पूरा नहीं किया गया था, लेकिन पुनर्प्राप्ति के दौरान चरण 1 और 2 को दोबारा चलाया जाता है, तो फ़ाइल को कचरे के साथ जोड़ दिया जाएगा।
केवल-मेटाडेटा जर्नल में, चरण 3 लॉग नहीं किया जाएगा। यदि चरण 3 पूर्ण नहीं किया गया था, किन्तु रिकवरी के समय चरण 1 और 2 को रीप्ले किया जाता है, तो फ़ाइल को गार्बेज के साथ अपेण्ड कर दिया जाएगा।


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



Revision as of 06:21, 23 November 2023


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

वास्तविक इम्प्लीमेंटेशन के आधार पर, जर्नलिंग फ़ाइल सिस्टम केवल स्टोर्ड मेटा डेटा का ट्रैक रख सकता है, जिसके परिणामस्वरूप डेटा कर्रप्शन की संभावना में वृद्धि के व्यय पर परफॉरमेंस में उन्नति होती है। वैकल्पिक रूप से, जर्नलिंग फ़ाइल सिस्टम स्टोर्ड डेटा और संबंधित मेटाडेटा दोनों को ट्रैक कर सकता है, जबकि कुछ इम्प्लीमेंटेशन इस संबंध में सेलेक्टेबल बिहेवियर की अनुमति देते हैं।[3]

इतिहास

1990 में आईबीएम ने एआईएक्स 3.1 में जेएफएस (फ़ाइल सिस्टम) को प्रथम यूनिक्स कमर्शियल फ़ाइल सिस्टम में से एक के रूप में प्रस्तुत किया, जिसने जर्नलिंग को भी इम्प्लीमेंट किया था।[4] इसके पश्चात् आगामी वर्ष इस विचार को लॉग-स्ट्रक्चर्ड फ़ाइल सिस्टम पर व्यापक रूप से साइटेड पेपर में लोकप्रिय बनाया गया था।[5]

तत्पश्चात इसे 1993 में माइक्रोसॉफ्ट के विंडोज़ एनटी के एनटीएफएस फाइल सिस्टम में, 1998 में एप्पल के एचएफएस प्लस फाइल सिस्टम में और 2001 में लिनक्स के ext3 फाइल सिस्टम में इम्प्लीमेंट किया गया था।[6]

तर्कसंगत

फ़ाइलों और डायरेक्ट्रियों में चेंजेज़ को रिफ्लेक्ट करने के लिए तथा फ़ाइल सिस्टम को अपडेट करने के लिए सामान्तयः कई भिन्न-भिन्न राइट ऑपरेशनों की आवश्यकता होती है। इससे राइटिंग के मध्य इंट्रप्शन (जैसे पावर फेल्यर या सिस्टम क्रैश (कंप्यूटिंग)) के कारण डेटा स्ट्रक्चर्स को इनवैलिड इंटरमीडिएट स्टेट में रखना संभव हो जाता है।[1]

उदाहरण के लिए, यूनिक्स फ़ाइल सिस्टम पर किसी फ़ाइल को डिलीट करने में तीन चरण सम्मिलित होते हैं:[7]

  1. इसकी डायरेक्टरी एंट्री को रिमूव करना।
  2. फ्री इनोड के पूल में इनोड रिलीज़ करना।
  3. सभी डिस्क ब्लॉक को फ्री डिस्क ब्लॉक के पूल में रिटर्न करना।

यदि चरण 1 के पश्चात् और चरण 2 से पूर्व कोई क्रैश होता है, तो ओर्फेंड इनोड होगा और इस कारण से स्टोरेज लीक हो सकती है; यदि चरण 2 और 3 के मध्य कोई क्रैश होता है, तो फ़ाइल द्वारा पूर्व उपयोग किए गए ब्लॉक का उपयोग नई फ़ाइलों के लिए नहीं किया जा सकता है, जिससे फ़ाइल सिस्टम की स्टोरेज क्षमता प्रभावी रूप से कम हो जाती है। जिससे चरणों को पुनः व्यवस्थित करने से भी सहायता प्राप्त नहीं होती है। यदि चरण 3 चरण 1 से पूर्व होता है, तो उनके मध्य क्रैश फ़ाइल के ब्लॉक को नई फ़ाइल के लिए पुन: उपयोग करने की अनुमति दे सकता है, जिसका अर्थ है कि पार्शियली डिलीट की गई फ़ाइल में किसी अन्य फ़ाइल के कंटेंट का भाग होगा, और किसी भी फ़ाइल में किया गया संशोधन दोनों में दिखाई देगा। दूसरी ओर, यदि चरण 2, चरण 1 से पूर्व होता है, तो उनके मध्य क्रैश के कारण फ़ाइल एक्सिस्ट में प्रतीत होने के पश्चात् भी इनएक्सेसिबल हो जाएगी।

इस प्रकार की इनकंसिस्टेंसी को ज्ञात करने और उसे रिकवर करने के लिए सामान्तयः इसके डेटा स्ट्रक्चर को पूर्ण परीक्षण की आवश्यकता होती है, उदाहरण के लिए fsck (फ़ाइल सिस्टम चेकर) टूल द्वारा इसका परीक्षण किया जा सकता है।[2] इसे सामान्तयः रीड-राइट एक्सेस के लिए फ़ाइल सिस्टम को पुनः माउंट करने से पूर्व किया जाना चाहिए। यदि फ़ाइल सिस्टम बड़ा है और यदि अपेक्षाकृत कम इनपुट/आउटपुट बैंडविड्थ है, तो इसमें अधिक समय लग सकता है और इसके परिणामस्वरूप अधिक समय तक डाउनटाइम हो सकता है यदि यह रेस्ट सिस्टम को ऑनलाइन पुनः आने से ब्लॉक करता है।

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

टेक्निक

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

जब जर्नल स्वयं लिखा जा रहा हो तो जर्नल के इंटरनल फॉर्मेट को क्रैश होने से बचाना चाहिए। कई जर्नल इम्प्लीमेंटेशन (जैसे कि ext4 में जेबीडी2 लेयर) चेकसम के साथ लॉग किए गए प्रत्येक परिवर्तन को इस समझ के साथ ब्रैकेट करते हैं कि क्रैश मिसिंग (या मिसमैच) चेकसम के साथ पार्शियली रिटेन चेंज त्याग देगा जिसे नेक्स्ट रीमाउंट पर जर्नल को रीप्ले करने पर सरलता से अनदेखा किया जा सकता है।

फिजिकल जर्नल्स

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

फिजिकल जर्नल्स महत्वपूर्ण परफॉरमेंस पेनल्टी लगाते हैं क्योंकि प्रत्येक चेंज्ड ब्लॉक को दो बार स्टोरेज के लिए प्रतिबद्ध किया जाना चाहिए, किन्तु एब्सोल्यूट फाल्ट प्रोटेक्शन की आवश्यकता होने पर यह स्वीकार्य हो सकता है।[8]

लॉजिकल जर्नल

लॉजिकल जर्नल, जर्नल में फ़ाइल मेटाडेटा में केवल चेंजेज़ को स्टोर्ड करता है, और बेटर राइट परफॉरमेंस के लिए फाल्ट टॉलरेंस का व्यापार करता है।[9] लॉजिकल जर्नल वाला फ़ाइल सिस्टम क्रैश होने के पश्चात् भी रिकवर हो जाता है, किन्तु अनजर्नल फ़ाइल डेटा और जर्नल मेटाडेटा को एक-दूसरे के साथ सिंक होने की अनुमति दे सकता है, जिससे डेटा करप्शन हो सकता है।

उदाहरण के लिए, किसी फ़ाइल में ऍपेन्डिंग पर तीन भिन्न-भिन्न राइट्स सम्मिलित हो सकते हैं:

  1. फ़ाइल का इनोड, फ़ाइल के मेटाडेटा में नोट करने के लिए कि इसके आकार में वृद्धि हो गयी है।
  2. ऍपेन्डेड डेटा के लिए स्पेस के एलोकेशन को मार्क करने के लिए फ्री स्पेस मैप होता है।
  3. ऍपेन्डेड डेटा लिखने के लिए नया एलोकेट स्पेस होता है।

केवल-मेटाडेटा जर्नल में, चरण 3 लॉग नहीं किया जाएगा। यदि चरण 3 पूर्ण नहीं किया गया था, किन्तु रिकवरी के समय चरण 1 और 2 को रीप्ले किया जाता है, तो फ़ाइल को गार्बेज के साथ अपेण्ड कर दिया जाएगा।

राइट हैज़ार्डस

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

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

विकल्प

सॉफ्ट अपडेट्स

कुछ यूनिक्स फ़ाइल सिस्टम इम्प्लीमेंटेशन जर्नलिंग से बचते हैं और इसके बजाय सॉफ्ट अपडेट लागू करते हैं: वे अपने राइट्स को इस तरह से ऑर्डर करते हैं कि ऑन-डिस्क फाइल सिस्टम कभी भी असंगत नहीं होता है, या क्रैश की स्थिति में बनाई जा सकने वाली मात्र असंगतता स्टोरेज है रिसना। इन लीक से उबरने के लिए, मुक्त स्थान मानचित्र को अगले माउंट पर फ़ाइल सिस्टम के पूर्ण चलने के विरुद्ध समेटा जाता है। यह कचरा संग्रहण (कंप्यूटर विज्ञान) सामान्तयः पृष्ठभूमि में किया जाता है।[11]

लॉग-स्ट्रक्चर्ड फ़ाइल सिस्टम

लॉग-स्ट्रक्चर्ड फ़ाइल सिस्टम में, राइट-ट्वाइस पेनल्टी प्रारम्भ नहीं होती है क्योंकि जर्नल स्वयं फ़ाइल सिस्टम है: यह संपूर्ण स्टोरेज डिवाइस पर कब्जा कर लेता है और इसे संरचित किया जाता है ताकि इसे सामान्य फ़ाइल सिस्टम की तरह ट्रैवर्स किया जा सके।

कॉपी-ऑन-राइट फ़ाइल सिस्टम

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

यह भी देखें

संदर्भ

  1. 1.0 1.1 Jones, M Tim (June 4, 2008), Anatomy of Linux journaling file systems, IBM DeveloperWorks, archived from the original on February 21, 2009, retrieved April 13, 2009
  2. 2.0 2.1 Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (January 21, 2014), Crash Consistency: FSCK and Journaling (PDF), Arpaci-Dusseau Books, archived (PDF) from the original on January 24, 2014, retrieved January 22, 2014
  3. "tune2fs(8) – Linux man page". linux.die.net. Archived from the original on February 25, 2015. Retrieved February 20, 2015.
  4. Chang, A.; Mergen, M.F.; Rader, R.K.; Roberts, J.A.; Porter, S.L. (January 1990), "Evolution of storage facilities in AIX Version 3 for RISC System/6000 processors" (PDF), IBM Journal of Research and Development, 34:1: 105–109, doi:10.1147/rd.341.0105
  5. Rosembaum, Mendel; Ousterhout, John (February 1991). लॉग-स्ट्रक्चर फ़ाइल सिस्टम का डिज़ाइन और कार्यान्वयन (PDF). ACM 13th Annual Symposium on Operating Systems Principles.
  6. "'2.4.15-final' - MARC". marc.info. Retrieved March 24, 2018.
  7. File Systems from Tanenbaum, A.S. (2008). Modern operating systems (3rd ed., pp. 287). Upper Saddle River, NJ: Prentice Hall.
  8. Tweedie, Stephen (2000), "Ext3, journaling filesystem", Proceedings of the Ottawa Linux Symposium: 24–29
  9. Prabhakaran, Vijayan; Arpaci-Dusseau, Andrea C; Arpaci-Dusseau, Remzi H, "Analysis and Evolution of Journaling File Systems" (PDF), 2005 USENIX Annual Technical Conference, USENIX Association, archived (PDF) from the original on September 26, 2007, retrieved July 27, 2007.
  10. Corbet, Jonathan (May 21, 2008), Barriers and journaling filesystems, archived from the original on March 14, 2010, retrieved March 6, 2010
  11. Seltzer, Margo I; Ganger, Gregory R; McKusick, M Kirk, "Journaling Versus Soft Updates: Asynchronous Meta-data Protection in File Systems", 2000 USENIX Annual Technical Conference, USENIX Association, archived from the original on October 26, 2007, retrieved July 27, 2007.