क्यों लिनक्स कर्नेल "डिस्क स्थान से बाहर" रिपोर्ट करता है जब वास्तव में यह आई-नोड से बाहर होता है


10

मेरा एक दोस्त जो लिनक्स वातावरण में प्रोग्रामिंग पसंद करता है, लेकिन लिनक्स के प्रशासन के बारे में ज्यादा नहीं जानता है हाल ही में एक समस्या में भाग गया, जहां उसका ओएस (उबंटू) "XXX वॉल्यूम पर डिस्क स्थान से बाहर" रिपोर्ट कर रहा था। लेकिन जब वह वॉल्यूम की जांच करने गया, तब भी 700 जीबी बाकी था। बहुत समय बर्बाद होने के बाद, वह अंततः यह पता लगाने में सक्षम था कि वह इनोड से बाहर था। (वह इस वॉल्यूम पर एक बैकअप सिस्टम से बहुत कम वृद्धिशील अपडेट स्टोर कर रहा था और अपने सभी इनोड को जला दिया था।)

उन्होंने मुझसे पूछा कि लिनक्स कर्नेल ने त्रुटि संदेश ("डिस्क स्थान से बाहर") को ठीक से रिपोर्टिंग ("इनोड से बाहर") के बजाय क्यों रिपोर्ट किया। मुझे नहीं पता था, इसलिए मुझे लगा कि मैं StackExchange पूछूंगा।

किसी को पता है कि ऐसा क्यों होता है? और इन सभी वर्षों के बाद इसे ठीक क्यों नहीं किया गया? (मुझे 1995 में इस समस्या के बारे में बताने वाला एक अलग मित्र याद है।)

जवाबों:


18

एक एकल त्रुटि संख्या, ENOSPCका उपयोग दोनों स्थितियों की रिपोर्ट करने के लिए किया जाता है, इसलिए एक ही त्रुटि संदेश।

ISO Cऔर POSIXमानकों के अनुपालन को बनाए रखने के लिए , कर्नेल डेवलपर्स के पास दोनों घटनाओं के लिए एक एकल त्रुटि संख्या का उपयोग करने के अलावा कोई विकल्प नहीं है। एक नई त्रुटि संख्या जोड़ने से मौजूदा कार्यक्रम टूट जाएंगे।

हालाँकि, पारंपरिक त्रुटि संदेशों के लिए चिपटना AFAIK अनिवार्य नहीं है, उदाहरण के लिए, एकल संदेश को स्पष्ट करने के लिए डेवलपर को कुछ भी नहीं करना चाहिए out of disk/inode space

तकनीकी रूप से, चाहे इनोड स्पेस से बाहर हो या डेटा स्पेस से बाहर हो, एक ही है, इसका मतलब है कि सिस्टम कॉल के सफल होने के लिए पर्याप्त डिस्क स्थान नहीं है।

मुझे लगता है कि अगर आपकी डिस्क पूर्ण मुक्त होने के साथ-साथ अभी भी इनकोड स्लॉट हैं, तो आपको शिकायत नहीं होगी।

नोट फाइल सिस्टम की तरह है कि JFS, XFS, ZFSऔर btrfsआवंटित inodes गतिशील इसलिए अब और कोई प्रदर्शनी इस मुद्दे से करते हैं।


हाल के फाइल सिस्टम में ext4 शामिल हैं?
कैमिलो मार्टिन

@CamiloMartin मुझे नहीं लगता कि यह करता है।
jlliagre

@CamiloMartin दुर्भाग्य से नहीं, ext4ext2 / 3 जैसे fs निर्माण समय पर इनोड्स आवंटित करता है और बाद में संशोधित नहीं किया जा सकता है।
मैट

@mindthemonkey डरन! मुझे लगता है कि शायद कुछ पीछे-संगतता की बात है। क्या अन्य फाइलसिस्टम में अच्छी विशेषताएं हैं लेकिन पर्याप्त स्थिर है (क्या btrfs स्थिर है)? ext4 "डिफ़ॉल्ट पसंद" (कम से कम मेरे नौसिखिए परिप्रेक्ष्य से) के कुछ प्रकार लगता है।
कैमिलो मार्टिन

1
हाँ है ext हमेशा पिछले संस्करण का विस्तार किया गया है और पीछे संगत तो कोई बड़ा परिवर्तन नहीं है, लेकिन इसका मतलब है कि यह काफी ठोस और स्थिर है। मैं व्यक्तिगत रूप से अपने सभी बड़े वॉल्यूम स्टोरेज को ZFS के साथ फ्रीबल्ड बॉक्स पर करता हूं। BTRFS को अभी भी "अस्थिर" माना जाता है, हालांकि अधिकांश वितरण कम से कम आपको इसका उपयोग करने देंगे।
मैट

2

मुझे लगता है कि आपका दोस्त एक ext fs का उपयोग कर रहा है, क्योंकि इसके कुछ समझदार fs में से एक जो इनोड्स से बाहर चला सकता है।

ऐसा प्रतीत होता है कि आपका मित्र या तो अपने फाइल सिस्टम से भरा हुआ है और इसे तोड़ दिया है या कई टीबी की हास्यास्पद मात्रा है। इनोड एक उपयोग-एक-बार-फेंकने वाली चीज नहीं है। यदि वह वास्तव में इनोड से बाहर भाग गया है तो इसका मतलब है कि उसके पास कई फाइलें और निर्देशिकाएं हैं ... जो कि एक> 4 टीबी (शिक्षित अनुमान) मात्रा पर हो सकती हैं, जहां "केवल" 700 जीबी मुफ्त हैं। एफएस के एक्सट्रीम परिवार के लिए एफडी की संख्या निर्धारित की जाती है जब एफएस बनाया जाता है। से mkfs.ext4आदमी पेज:

-i bytes-per-inode
          Specify  the  bytes/inode ratio.  mke2fs creates an inode for every bytes-per-inode
          bytes of space on the disk.  The larger the bytes-per-inode ratio, the fewer inodes
          will  be  created.  This value generally shouldn't be smaller than the blocksize of
          the filesystem, since in that case more inodes would be made than can ever be used.
          Be  warned  that  it is not possible to expand the number of inodes on a filesystem
          after it is created, so be careful deciding the correct value for this parameter.

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

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

मुझे यह मुद्दा ext2 के साथ उस समय से याद है जब कर्नेल 2.4 काफी नया था। अंगूठे के एक नियम के रूप में, मैं हमेशा उन संस्करणों के लिए XFS का उपयोग करता हूं जो वर्तमान में सामान्य की तुलना में बहुत बड़े हैं। वर्तमान में मैं एक वॉल्यूम के लिए 250GB से 1TB आम के बीच सब कुछ कहूंगा और हम 4TB HDDs खरीद सकते हैं। तो सब कुछ के लिए> 3TB मैं एक्सएफएस का उपयोग करना चाहूंगा। बस अंगूठे का एक नियम है, लेकिन लंबे समय तक इनोड से बाहर नहीं चला ...


1
मुझे डर है कि आप पूछे गए सवाल का जवाब नहीं दे रहे हैं।
जलीगेरे

सच। मैं पहले इनलाइन सवाल का जवाब देने की कोशिश कर रहा था, मैंने मारा "किसी को पता है कि ऐसा क्यों होता है?", लेकिन शीर्षक में कोई नहीं।
बनगुंगिन

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

@ बनंगिन - क्या आप जानते हैं कि डिफ़ॉल्ट बाइट / इनोड अनुपात क्या है?
प्रेट्ज़ेल

@Pretzel: मुझे लगता है कि मुझे याद है कि डिफ़ॉल्ट प्रत्येक 4k के लिए एक इनोड है। मैंने अभी-अभी अपने कंप्यूटर ( tune2fs -l /dev/sda1) की जाँच की है और मुझे लगता है कि प्रत्येक चार ब्लॉकों के लिए 1 इनोड का अनुपात है और प्रत्येक ब्लॉक का आकार 1k है। हालांकि इसे "डिफ़ॉल्ट" कितना माना जा सकता है, मुझे नहीं पता।
बनगुंगिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.