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

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

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

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

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

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

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

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

यदि बाद में F को विस्तारित करने की आवश्यकता है, चूंकि इसके तुरंत बाद का स्थान भरा हुआ है, फ़ाइल सिस्टम के लिए तीन विकल्प हैं:


 * 1) कहीं और एक नया ब्लॉक जोड़ना और यह इंगित करना कि F का दूसरा विस्तार है
 * 2) फ़ाइलों को विस्तार के रास्ते में कहीं और ले जाना, F को सन्निहित रहने की अनुमति देना
 * 3) फ़ाइल F को स्थानांतरित करना ताकि यह नए, बड़े आकार की एक सन्निहित फ़ाइल हो सके

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

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

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

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

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

प्रकार
फाइल सिस्टम विखंडन कई स्तरों पर हो सकता है:


 * व्यक्तिगत कंप्यूटर फ़ाइलों के भीतर विखंडन
 * मुक्त स्थान विखंडन
 * अलग, परंतु संबंधित फाइलों के बीच संदर्भ की स्थानीयता में कमी
 * फ़ाइल सिस्टम के लिए आरक्षित डेटा संरचनाओं या विशेष फ़ाइलों के भीतर विखंडन

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

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

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

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

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

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

अल्पीकरण
विखंडन से लड़ने के लिए कई तकनीकों का विकास किया गया है। उन्हें सामान्यतः दो श्रेणियों में वर्गीकृत किया जा सकता है: प्रीमेप्टिव और रेट्रोएक्टिव। एक्सेस पैटर्न की भविष्यवाणी करने में कठिनाई के कारण ये तकनीक प्रकृति में अधिकांशतः अनुमानी हैं और अप्रत्याशित वर्कलोड के अनुसार प्रदर्शन को कम कर सकते हैं।

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

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

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

बिटटोरेंट और अन्य पीयर टू पीयर फाइलशेयरिंग एप्लिकेशन  डाउनलोड शुरू करते समय फ़ाइल के लिए आवश्यक पूर्ण स्थान का पूर्व-आवंटन करके विखंडन को सीमित करते हैं एक अपेक्षाकृत आधुनिक तकनीक XFS, HFS+ और ZFS में विलंबित आवंटन है ; उसी तकनीक को reiser4 और ext4 में एलोकेट-ऑन-फ्लश भी कहा जाता है। जब फाइल सिस्टम को लिखा जा रहा है, फाइल सिस्टम ब्लॉक आरक्षित हैं, परंतु विशिष्ट फाइलों के स्थान अभी तक निर्धारित नहीं किए गए हैं। बाद में, जब फाइल सिस्टम को मेमोरी प्रेशर या ट्रांजेक्शन कमिट के परिणामस्वरूप परिवर्तनों को फ्लश करने के लिए मजबूर किया जाता है, तो एलोकेटर को फाइलों की विशेषताओं का बेहतर ज्ञान होगा। इस दृष्टिकोण के साथ अधिकांश फ़ाइल सिस्टम फ़ाइलों को एक ही निर्देशिका में सन्निहित रूप से फ़्लश करने का प्रयास करते हैं। यह मानते हुए कि एक ही निर्देशिका से कई बार पढ़ना सामान्य है, संदर्भ की स्थानीयता में सुधार हुआ है। Reiser4 डायरेक्टरी हैश टेबल के अनुसार फाइलों के लेआउट का भी आदेश देता है, ताकि जब फाइल को प्राकृतिक फाइल सिस्टम ऑर्डर में एक्सेस किया जा रहा हो (जैसा कि रीडडिर द्वारा तय किया गया हो), तो वे हमेशा क्रमिक रूप से पढ़े जाते हैं।

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

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

यह भी देखें

 * डीफ़्रेग्मेंटेशन सॉफ़्टवेयर की सूची
 * एफएटी फ़ाइल विखंडन
 * डिस्क संपीड़न

इस पेज में लापता आंतरिक लिंक की सूची

 * समय की तलाश
 * हद (फाइल सिस्टम)
 * त्रुटि प्रबंधन
 * संदर्भ का इलाका
 * पदानुक्रमित फाइल सिस्टम
 * readdir
 * एमआईबी
 * FAT फ़ाइल विखंडन