जर्नलिंग फ़ाइल सिस्टम

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

इतिहास
1990 में IBM ने AIX 3.1 में JFS (फ़ाइल सिस्टम) को पहले UNIX वाणिज्यिक फ़ाइल सिस्टम में से एक के रूप में पेश किया, जिसने जर्नलिंग लागू की। अगले वर्ष इस विचार को लॉग-संरचित फ़ाइल सिस्टम पर व्यापक रूप से उद्धृत पेपर में लोकप्रिय बनाया गया। इसके बाद इसे 1993 में माइक्रोसॉफ्ट के विंडोज़ एनटी  के एनटीएफएस फाइल सिस्टम में, 1998 में एप्पल के एचएफएस प्लस फाइल सिस्टम में और 2001 में लिनक्स के ext3 फाइल सिस्टम में लागू किया गया।

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

उदाहरण के लिए, यूनिक्स फ़ाइल सिस्टम पर किसी फ़ाइल को हटाने में तीन चरण शामिल होते हैं:
 * 1) इसकी निर्देशिका प्रविष्टि को हटाया जा रहा है.
 * 2) मुक्त इनोड के पूल में इनोड जारी करना।
 * 3) सभी डिस्क ब्लॉक को मुक्त डिस्क ब्लॉक के पूल में लौटाना।

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

ऐसी विसंगतियों का पता लगाने और उनसे उबरने के लिए आम तौर पर ग्राफ सिद्धांत की शर्तों की पूरी शब्दावली की आवश्यकता होती है#इसके डेटा संरचनाओं का चलना, उदाहरण के लिए fsck (फ़ाइल सिस्टम चेकर) जैसे उपकरण द्वारा। यह आम तौर पर पढ़ने-लिखने की पहुंच के लिए फ़ाइल सिस्टम को अगली बार माउंट करने से पहले किया जाना चाहिए। यदि फ़ाइल सिस्टम बड़ा है और यदि अपेक्षाकृत कम I/O बैंडविड्थ है, तो इसमें लंबा समय लग सकता है और इसके परिणामस्वरूप लंबे समय तक डाउनटाइम हो सकता है यदि यह शेष सिस्टम को ऑनलाइन वापस आने से रोकता है।

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

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

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

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

भौतिक पत्रिकाएँ एक महत्वपूर्ण प्रदर्शन जुर्माना लगाती हैं क्योंकि प्रत्येक परिवर्तित ब्लॉक को दो बार भंडारण के लिए प्रतिबद्ध किया जाना चाहिए, लेकिन पूर्ण दोष संरक्षण की आवश्यकता होने पर स्वीकार्य हो सकता है।

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

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

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

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

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

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

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

यह भी देखें

 * एसिड
 * फ़ाइल सिस्टम की तुलना
 * डेटाबेस
 * आशय लॉग
 * जेएफएस (फाइल सिस्टम)|जर्नल फाइल सिस्टम (जेएफएस) – आईबीएम द्वारा बनाया गया एक फाइल सिस्टम
 * लेनदेन प्रक्रिया
 * फ़ाइल सिस्टम का संस्करणीकरण