नंबर जोड़ना आसान है। समस्या यह है कि, जोड़ने के लिए कई अलग-अलग संख्याएँ हैं।
एक फ़ाइल का उपयोग डिस्क स्थान कितना करता है?
मूल विचार यह है कि n बाइट्स वाली फ़ाइल डिस्क स्थान के n बाइट्स का उपयोग करती है, साथ ही कुछ नियंत्रण जानकारी के लिए बिट: फ़ाइल की मेटाडेटा (अनुमतियाँ, टाइमस्टैम्प आदि), और सिस्टम के लिए आवश्यक ओवरहेड का एक सा ओवरहेड। फ़ाइल कहाँ संग्रहीत है, इसे ढूंढें। हालाँकि कई जटिलताएँ हैं।
सूक्ष्म जटिलताओं
प्रत्येक फ़ाइल को लाइब्रेरी में पुस्तकों की एक श्रृंखला के रूप में सोचें। छोटी फाइलें सिर्फ एक वॉल्यूम बनाती हैं, लेकिन बड़ी फाइलें एक विश्वकोश की तरह कई संस्करणों से मिलकर बनती हैं। फ़ाइलों का पता लगाने में सक्षम होने के लिए, एक कार्ड कैटलॉग है जो हर वॉल्यूम को संदर्भित करता है। प्रत्येक वॉल्यूम में कवर के कारण ओवरहेड का थोड़ा सा हिस्सा होता है। यदि कोई फ़ाइल बहुत छोटी है, तो यह ओवरहेड अपेक्षाकृत बड़ी है। इसके अलावा कार्ड कैटलॉग में ही कुछ जगह होती है।
थोड़ा और अधिक तकनीकी, एक सामान्य सरल फाइल सिस्टम में जाकर, अंतरिक्ष को ब्लॉकों में विभाजित किया जाता है । एक विशिष्ट ब्लॉक का आकार 4KiB है। प्रत्येक फ़ाइल ब्लॉकों की एक पूर्णांक संख्या तक ले जाती है। जब तक फ़ाइल आकार ब्लॉक आकार के एक से अधिक नहीं होता है, तब तक अंतिम ब्लॉक केवल आंशिक रूप से उपयोग किया जाता है। तो एक 1-बाइट फ़ाइल और 4096-बाइट फ़ाइल दोनों 1 ब्लॉक लेती है, जबकि एक 4097-बाइट फ़ाइल दो ब्लॉक लेती है। आप इसे du
कमांड के साथ देख सकते हैं : यदि आपके फाइलसिस्टम में 4KiB ब्लॉक आकार है, तो du
1-बाइट फ़ाइल के लिए 4KiB की रिपोर्ट करेगा।
यदि कोई फ़ाइल बड़ी है, तो फ़ाइल बनाने वाली ब्लॉक की सूची को संग्रहीत करने के लिए अतिरिक्त ब्लॉक की आवश्यकता होती है (ये अप्रत्यक्ष ब्लॉक हैं ; अधिक परिष्कृत फ़ाइल सिस्टम एक्स्टेंट के रूप में इसे अनुकूलित कर सकते हैं )। वे फ़ाइल आकार में नहीं दिखाते हैं, जो ls -l
GNU द्वारा रिपोर्ट किए गए हैं du --apparent-size
; du
, जो आकार के विपरीत डिस्क उपयोग की रिपोर्ट करता है, उनके लिए खाता है।
कुछ फाइलसिस्टम एक ही ब्लॉक में कई फाइल टेल पैक करने के लिए आखिरी ब्लॉक में छोड़ी गई खाली जगह का फिर से उपयोग करने की कोशिश करते हैं । कुछ फाइल सिस्टम (जैसे कि एक्स्ट्रीम 4 चूंकि लिनक्स 3.8 छोटी फाइलों के लिए 0 ब्लॉक का उपयोग करता है (बस कुछ बाइट्स) जो पूरी तरह से इनोड में फिट होते हैं।
मैक्रोस्कोपिक जटिलताओं
आमतौर पर, जैसा कि ऊपर देखा गया है, du
फ़ाइल द्वारा उपयोग किए गए ब्लॉक या एक्स्टेंट के आकार का योग कुल रिपोर्ट है ।
du
यदि फ़ाइल संपीड़ित है, तो रिपोर्ट किया गया आकार छोटा हो सकता है। यूनिक्स सिस्टम पारंपरिक रूप से संपीड़न के एक कच्चे रूप का समर्थन करते हैं: यदि किसी फ़ाइल ब्लॉक में केवल शून्य बाइट्स होते हैं, तो शून्य के ब्लॉक को स्टोर करने के बजाय, फाइल सिस्टम उस ब्लॉक को पूरी तरह से छोड़ सकता है। इस तरह से छोड़े गए ब्लॉक वाली फाइल को स्पार्स फाइल कहा जाता है । स्पार्स फाइलें स्वचालित रूप से नहीं बनाई जाती हैं जब किसी फाइल में नल बाइट्स की एक बड़ी श्रृंखला होती है, तो एप्लिकेशन को स्पार्स बनने के लिए फाइल की व्यवस्था करनी चाहिए।
कुछ फाइल सिस्टम जैसे कि btrfs और zfs सामान्य-उद्देश्य संपीड़न का समर्थन करते हैं ।
उन्नत जटिलताओं
बहुत आधुनिक फाइल सिस्टम की दो प्रमुख विशेषताएं जैसे कि zfs और btrfs फ़ाइल के आकार और डिस्क के उपयोग के बीच संबंध को और अधिक दूर करते हैं: स्नैपशॉट और डुप्लीकेशन।
स्नैपशॉट एक निश्चित तिथि पर फाइल सिस्टम की एक स्थिर स्थिति है। फाइलसिस्टम जो इस सुविधा का समर्थन करते हैं, उनमें विभिन्न तिथियों में लिए गए कई स्नैपशॉट हो सकते हैं। ये स्नैपशॉट कमरे लेते हैं, निश्चित रूप से। एक चरम पर, यदि आप फ़ाइल सिस्टम के सक्रिय संस्करण से सभी फ़ाइलों को हटा देते हैं, तो स्नैपशॉट शेष रहने पर फ़ाइल सिस्टम खाली नहीं होगा।
किसी भी फाइल या ब्लॉक जो स्नैपशॉट के बाद से नहीं बदला है, या दो स्नैपशॉट के बीच लिया गया था, स्नैपशॉट में और सक्रिय संस्करण या अन्य स्नैपशॉट में समान रूप से मौजूद है। यह कॉपी-ऑन-राइट के माध्यम से कार्यान्वित किया जाता है । कुछ किनारे के मामलों में, यह संभव है कि एक पूर्ण फाइल सिस्टम पर एक फ़ाइल को हटाने से अपर्याप्त उपलब्ध स्थान के कारण विफल हो जाएगा - क्योंकि उस फ़ाइल को हटाने से निर्देशिका में एक ब्लॉक की प्रतिलिपि बनाने की आवश्यकता होगी, और यहां तक कि एक ब्लॉक के लिए और अधिक जगह नहीं है।
डेडुप्लीकेशन एक स्टोरेज ऑप्टिमाइज़ेशन तकनीक है जिसमें समान ब्लॉक्स को स्टोर करने से बचा जाता है। विशिष्ट डेटा के साथ, डुप्लिकेट की तलाश हमेशा प्रयास के लायक नहीं होती है। एक वैकल्पिक विशेषता के रूप में zfs और btrfs दोनों समर्पण कासमर्थन करते हैं।
du
फ़ाइल आकार के योग से कुल क्यों अलग है?
जैसा कि हमने ऊपर देखा है, du
प्रत्येक फ़ाइल के लिए रिपोर्ट किया गया आकार सामान्य रूप से फ़ाइल द्वारा उपयोग किए जाने वाले ब्लॉक या extents के आकार का योग होता है। ध्यान दें कि डिफ़ॉल्ट रूप से, ls -l
बाइट्स में आकारों को सूचीबद्ध करता है, लेकिन du
KiB में या कुछ और पारंपरिक प्रणालियों पर 512-बाइट इकाइयों (क्षेत्रों) में आकारों को सूचीबद्ध करता है ( du -k
किलोबाइट के उपयोग को बल देता है)। अधिकांश आधुनिक unices का समर्थन ls -lh
और du -h
उचित रूप में (किबा, MiB, GiB के लिए) "मानव पठनीय" कश्मीर, एम, जी, आदि suffices का उपयोग कर नंबरों का उपयोग करने के लिए।
जब आप du
किसी निर्देशिका पर चलते हैं , तो यह निर्देशिका ट्री में सभी फाइलों के डिस्क उपयोग को शामिल करता है , जिसमें निर्देशिकाएं भी शामिल हैं। एक निर्देशिका में डेटा (फ़ाइलों के नाम, और फ़ाइल के मेटाडेटा के लिए एक संकेतक) होता है, इसलिए इसे थोड़ी संग्रहण जगह की आवश्यकता होती है। एक छोटी निर्देशिका एक ब्लॉक लेगी, एक बड़ी निर्देशिका को अधिक ब्लॉक की आवश्यकता होगी। किसी निर्देशिका द्वारा उपयोग की जाने वाली संग्रहण की मात्रा कभी-कभी न केवल उन फ़ाइलों पर निर्भर करती है, जिनमें वह सम्मिलित होती है, बल्कि वह क्रम भी जिसमें वे सम्मिलित किए गए थे और जिसमें कुछ फाइलें निकाली गई थीं (कुछ फाइल सिस्टम के साथ, यह छेद छोड़ सकती हैं - डिस्क स्थान और प्रदर्शन के बीच एक समझौता ), लेकिन अंतर छोटा होगा (एक अतिरिक्त ब्लॉक यहां और वहां)। जब तुम दौड़ते होls -ld /some/directory
निर्देशिका का आकार सूचीबद्ध है। (ध्यान दें कि आउटपुट के शीर्ष पर "एनएनएन" लाइन ls -l
एक असंबंधित संख्या है, यह सूचीबद्ध वस्तुओं के ब्लॉक में आकार का योग है, जिसे KiB या सेक्टरों में व्यक्त किया गया है।)
ध्यान रखें कि डॉट फाइलेंdu
शामिल हैं जो तब तक नहीं दिखाई देती हैं जब तक कि आप या विकल्प का उपयोग नहीं करते हैं ।ls
-A
-a
कभी-कभी du
अपेक्षित योग से कम रिपोर्ट करता है। ऐसा तब होता है जब निर्देशिका ट्री के अंदर हार्ड लिंक होते हैं : du
प्रत्येक फ़ाइल को केवल एक बार गिना जाता है।
कुछ फाइल सिस्टम जैसे ZFS
कि लिनक्स पर, du
किसी फाइल की विस्तारित विशेषताओं के द्वारा पूर्ण डिस्क स्थान की सूचना नहीं देता है।
सावधान रहें कि यदि किसी निर्देशिका के तहत माउंट बिंदु हैं, तो du
इन माउंट बिंदुओं पर सभी फाइलों को गिनेंगे, जब तक कि -x
विकल्प नहीं दिया जाता है। इसलिए अगर उदाहरण के लिए आप अपने रूट फाइल सिस्टम में फ़ाइलों का कुल आकार चाहते हैं, तो चलाएं du -x /
, नहीं du /
।
यदि कोई फ़ाइल सिस्टम किसी गैर-रिक्त निर्देशिका पर आरूढ़ है , तो उस निर्देशिका में फ़ाइलें माउंटेड फ़ाइल सिस्टम द्वारा छिपाई जाती हैं। वे अभी भी अपने स्थान पर कब्जा कर लेते हैं, लेकिन du
उन्हें नहीं पाएंगे।
नष्ट कर दी गई फाइलें
जब कोई फ़ाइल हटा दी जाती है , तो यह केवल निर्देशिका प्रविष्टि को हटाता है, जरूरी नहीं कि यह फ़ाइल ही हो। वास्तव में किसी फ़ाइल को हटाने के लिए दो स्थितियाँ आवश्यक हैं और इस प्रकार इसकी डिस्क स्थान को पुनः प्राप्त करें:
- फ़ाइल की लिंक गणना 0 पर ड्रॉप होनी चाहिए: यदि किसी फ़ाइल में कई हार्ड लिंक हैं, तो एक को हटाने से दूसरों पर कोई प्रभाव नहीं पड़ता है।
- जब तक फ़ाइल किसी प्रक्रिया द्वारा खुली रहती है, तब तक डेटा बना रहता है। केवल तभी जब सभी प्रक्रियाओं ने फ़ाइल को बंद कर दिया है वह फ़ाइल हटा दी गई है। आउटपुट
fuser -m
या lsof
आरोह बिंदु पर उन प्रक्रियाओं को शामिल किया जाता है जिनमें फ़ाइल फ़ाइल सिस्टम पर एक फ़ाइल खुली होती है, भले ही फ़ाइल हटा दी गई हो।
- भले ही किसी प्रक्रिया में डिलीट की गई फ़ाइल न हो, यदि फ़ाइल किसी
loop
डिवाइस का बैकएंड है तो फ़ाइल का स्थान पुनः प्राप्त नहीं किया जा सकता है। losetup -a
(as root
) आपको बता सकता है कि loop
वर्तमान में कौन से डिवाइस सेट किए गए हैं और किस फाइल पर हैं। losetup -d
डिस्क स्थान को पुनर्प्राप्त करने से पहले लूप डिवाइस को नष्ट कर दिया जाना चाहिए (के साथ )।
यदि आप किसी फ़ाइल प्रबंधक या GUI वातावरण में कोई फ़ाइल हटाते हैं, तो उसे कूड़ेदान क्षेत्र में रखा जा सकता है, जहाँ उसे हटाया नहीं जा सकता। जब तक फ़ाइल को हटाया नहीं जा सकता है, तब तक इसका स्थान अभी भी खपत है।
ये संख्याएँ df
वास्तव में क्या हैं ?
एक सामान्य फाइलसिस्टम में शामिल है:
- फ़ाइल (निर्देशिकाओं सहित) डेटा और कुछ मेटाडेटा (अप्रत्यक्ष ब्लॉक सहित, और कुछ फ़ाइल सिस्टम पर विस्तारित विशेषताएँ) ब्लॉक।
- नि: शुल्क ब्लॉक।
- रूट उपयोगकर्ता के लिए आरक्षित ब्लॉक।
- सुपरब्लॉक और अन्य नियंत्रण जानकारी।
- inodes
- एक पत्रिका
द्वारा पहली तरह की सूचना दी जाती है du
। जब यह आता है df
, तो "उपयोग किया गया", "उपलब्ध" और कुल कॉलम में क्या जाता है, फाइल सिस्टम पर निर्भर करता है (बेशक इस्तेमाल किए गए ब्लॉक (अप्रत्यक्ष वाले सहित) हमेशा "उपयोग किए गए" कॉलम में होते हैं, और अप्रयुक्त ब्लॉक हमेशा "में" होते हैं) उपलब्ध "कॉलम)।
फाइलसिस्टम एक्स 2 / एक्सट 3 / एक्सटी 4 में 5% स्थान को मूल उपयोगकर्ता के लिए आरक्षित करता है। यह रूट फाइलसिस्टम पर उपयोगी है, सिस्टम को चालू रखने के लिए यदि यह भरता है (विशेष रूप से लॉगिंग के लिए, और सिस्टम एडमिनिस्ट्रेटर को समस्या को ठीक करते समय डेटा को थोड़ा स्टोर करने देता है)। यहां तक कि डेटा विभाजन के लिए भी /home
, जैसे कि आरक्षित स्थान उपयोगी है, क्योंकि लगभग पूर्ण-फ़ाइल सिस्टम विखंडन से ग्रस्त है। लिनक्स विखंडन से बचने की कोशिश करता है (जो कि फाइल एक्सेस को धीमा कर देता है, विशेष रूप से मैकेनिकल डिवाइस जैसे कि हार्ड डिस्क को घुमाने पर) जब फाइल लिखी जा रही होती है, तो कई लगातार ब्लॉक को आवंटित करके, लेकिन अगर लगातार कई ब्लॉक नहीं होते हैं, तो वह काम नहीं कर सकता है ।
एक्सटर्नल फाइलसिस्टम, अप करने के लिए और एक्सटर् 4 सहित, लेकिन btrfs नहीं, फाइल सिस्टम बनाए जाने पर इनोड की निश्चित संख्या को आरक्षित करें । यह महत्वपूर्ण रूप से फाइलसिस्टम के डिजाइन को सरल करता है, लेकिन नकारात्मक पक्ष यह है कि इनोड की संख्या को ठीक से आकार देने की आवश्यकता है: बहुत सारे इनोड्स के साथ, अंतरिक्ष बर्बाद हो जाता है; बहुत कम इनकोड्स के साथ, फ़ाइल सिस्टम अंतरिक्ष से बाहर चलने से पहले इनोड्स से बाहर चला सकता है। कमांड df -i
रिपोर्ट करता है कि कितने इनोड उपयोग में हैं और कितने उपलब्ध हैं (फाइलसिस्टम जहां अवधारणा लागू नहीं है, रिपोर्ट 0 हो सकती है)।
tune2fs -l
एक ext2 / ext3 / ext4 फाइल सिस्टम वाले वॉल्यूम पर चलने से कुल संख्या और मुफ्त इनोड्स और ब्लॉक सहित कुछ आंकड़े रिपोर्ट होते हैं।
एक और विशेषता जो पदार्थ को भ्रमित कर सकती है वह है सबवोल्यूम्स ( btrfs में समर्थित है , और डेटासेट्स के नाम पर zfs में )। एक से अधिक सबवोल्यूम एक ही स्थान को साझा करते हैं, लेकिन अलग-अलग डायरेक्टरी के पेड़ की जड़ें होती हैं।
यदि एक फाइल सिस्टम नेटवर्क (एनएफएस, सांबा, आदि) पर चढ़ा हुआ है और सर्वर उस फाइलसिस्टम (जैसे सर्वर में /home
फाइलसिस्टम और एक्सपोर्ट/home/bob
) का एक हिस्सा निर्यात करता है , तो df
एक क्लाइंट पर पूरे फाइलसिस्टम के लिए डेटा को दर्शाता है, न कि सिर्फ उस हिस्से के लिए जो क्लाइंट पर एक्सपोर्ट और माउंटेड है।
मेरी डिस्क पर स्थान का उपयोग क्या है?
जैसा कि हमने ऊपर देखा है, रिपोर्ट किया गया कुल आकार df
हमेशा फाइल सिस्टम के सभी नियंत्रण डेटा को ध्यान में नहीं रखता है। यदि आवश्यक हो तो फाइलसिस्टम का सटीक आकार प्राप्त करने के लिए फाइलसिस्टम-विशिष्ट टूल का उपयोग करें। उदाहरण के लिए, ext2 / ext3 / ext4 के साथ, tune2fs -l
ब्लॉक गणना द्वारा ब्लॉक आकार को चलाएं और गुणा करें।
जब आप एक फाइल सिस्टम बनाते हैं, तो यह आम तौर पर संलग्न विभाजन या वॉल्यूम पर उपलब्ध स्थान को भरता है। कभी-कभी आप एक छोटे फाइल सिस्टम के साथ समाप्त हो सकते हैं जब आप फाइल सिस्टम को चारों ओर घूम रहे हैं या वॉल्यूम का आकार बदल रहे हैं।
लिनक्स पर, lsblk
उपलब्ध स्टोरेज वॉल्यूम का अच्छा अवलोकन प्रस्तुत करता है। अतिरिक्त जानकारी के लिए या यदि आपके पास नहीं है lsblk
, तो आपके पास क्या विभाजन हैं, यह जांचने के लिए विशेष वॉल्यूम प्रबंधन या विभाजन टूल का उपयोग करें। लिनक्स पर, वहाँ है lvs
, vgs
, pvs
के लिए एलवीएम , fdisk
पारंपरिक पीसी शैली ( "एमबीआर") विभाजन (और साथ GPT के रूप में पर हाल ही में सिस्टम) के लिए, gdisk
के लिए GPT विभाजन, disklabel
बीएसडी डिस्कलेबल, के लिए जुदा , आदि लिनक्स के तहत, cat /proc/partitions
एक त्वरित सारांश देता है। विशिष्ट स्थापनाओं में ऑपरेटिंग सिस्टम द्वारा उपयोग किए जाने वाले कम से कम दो विभाजन या वॉल्यूम होते हैं: एक फाइलसिस्टम (कभी-कभी अधिक), और एक स्वैप वॉल्यूम।
कुछ कंप्यूटरों में एक विभाजन होता है जिसमें BIOS या अन्य नैदानिक सॉफ़्टवेयर होते हैं। यूईएफआई वाले कंप्यूटरों में एक समर्पित बूटलोडर विभाजन होता है।
अंत में, ध्यान दें कि अधिकांश कंप्यूटर प्रोग्राम 1024 = 2 10 की शक्तियों के आधार पर इकाइयों का उपयोग करते हैं (क्योंकि प्रोग्रामर द्विआधारी और 2 की शक्तियों से प्यार करते हैं)। तो 1 kB = 1024 B, 1 MB = 1048576 B, 1 GB = 1073741824, 1 TB = 1099511627776 B,… आधिकारिक तौर पर, इन इकाइयों को kibibyte KiB, mebibyte MiB, आदि के रूप में जाना जाता है , लेकिन अधिकांश सॉफ्टवेयर सिर्फ k या kB की रिपोर्ट करते हैं। एम या एमबी, आदि। दूसरी ओर, हार्ड डिस्क निर्माता व्यवस्थित रूप से मीट्रिक (1000-आधारित इकाइयों) का उपयोग करते हैं। ताकि 1 टीबी ड्राइव केवल 931 GiB या 0.904 TiB हो।
tune2fs
को फाइल सिस्टम में ब्लॉक डिवाइस तक रीड एक्सेस की आवश्यकता होती है, जिसमें सामान्य रूप से रूट की आवश्यकता होती है क्योंकि इससे आप किसी भी फाइल की सामग्री को पढ़ सकते हैं।