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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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