क्या मैं बहुत बड़ी संख्या में खाली फ़ाइलों को बनाकर डिस्क स्थान से बाहर चला सकता हूं?


35

यह सर्वविदित है कि खाली पाठ फ़ाइलों में शून्य बाइट्स होते हैं:

यहाँ छवि विवरण दर्ज करें

हालांकि, उनमें से प्रत्येक में मेटाडेटा शामिल है , जो मेरे शोध के अनुसार, इनोड्स में संग्रहीत है , और अंतरिक्ष का उपयोग करते हैं

इसे देखते हुए, यह मेरे लिए तर्कसंगत लगता है कि शुद्ध रूप से खाली पाठ फ़ाइलों को बनाकर डिस्क को भरना संभव है। क्या ये सही है? यदि हां, तो मुझे 1GB, की डिस्क में कितनी खाली पाठ फ़ाइलों को भरने की आवश्यकता होगी?


कुछ जाँच करने के लिए, मैं दौड़ता हूँ df -iलेकिन यह स्पष्ट रूप से प्रदर्शित करता है कि वे कितना (वजन?) का उपयोग करते हैं।

Filesystem             Inodes  IUsed    IFree IUse% Mounted on
udev                   947470    556   946914    1% /dev
tmpfs                  952593    805   951788    1% /run
/dev/sda2            28786688 667980 28118708    3% /
tmpfs                  952593     25   952568    1% /dev/shm
tmpfs                  952593      5   952588    1% /run/lock
tmpfs                  952593     16   952577    1% /sys/fs/cgroup
/dev/sda1                   0      0        0     - /boot/efi
tmpfs                  952593     25   952568    1% /run/user/1000
/home/lucho/.Private 28786688 667980 28118708    3% /home/lucho

संबंधित: unix.stackexchange.com/q/62049
moooeeeep

जवाबों:


40

यह आउटपुट 28786688कुल मिलाकर आयतों का सुझाव देता है , जिसके बाद रूट फाइलसिस्टम (डिवाइस /dev/sda2) में एक फाइल बनाने का अगला प्रयास वापस आएगा ENOSPC("डिवाइस पर कोई स्थान नहीं बचा है")।

स्पष्टीकरण: मूल * निक्स फाइलसिस्टम डिजाइन पर, फाइल सिस्टम के निर्माण के समय इनोड की अधिकतम संख्या निर्धारित की जाती है। उनके लिए समर्पित स्थान आवंटित किया गया है। इससे पहले कि आप डेटा के लिए अंतरिक्ष से बाहर, या इसके विपरीत, आप इनोड से बाहर भाग सकते हैं। सबसे आम डिफ़ॉल्ट लिनक्स फाइल सिस्टम में ext4अभी भी यह सीमा है। Ext4 पर इनोड के आकारों के बारे में जानकारी के लिए, mkfs.ext4 के मैनपेज को देखें।

लिनक्स इस सीमा के बिना अन्य फाइल सिस्टम का समर्थन करता है। पर btrfs, अंतरिक्ष को गतिशील रूप से आवंटित किया जाता है। "इनकोड संरचना अपेक्षाकृत छोटी है, और इसमें एम्बेडेड फ़ाइल डेटा या विस्तारित विशेषता डेटा नहीं होगा।" (ext3 / 4 विस्तारित विशेषताओं के लिए इनोड्स के अंदर कुछ जगह आवंटित करता है )। बेशक आप अभी भी बहुत अधिक मेटाडेटा / निर्देशिका प्रविष्टियों को बनाकर डिस्क स्थान से बाहर चला सकते हैं।

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


"XFS डायनामिक रूप से इनकोड भी आवंटित करता है। तो JFS करता है। तो किया / reiserfs किया है। तो F2FS करता है। पारंपरिक यूनिक्स फाइलसिस्टम इनकोड्स को एमकेएफएस समय पर स्टैटिकली आवंटित करते हैं, और इसलिए ext4 जैसे आधुनिक FSES इसे अपनी विरासत का पता लगाते हैं, लेकिन इन दिनों है कि अपवाद, नियम नहीं।

"बीटीडब्लू, एक्सएफएस आपको इनोड्स द्वारा उपयोग किए जाने वाले अधिकतम प्रतिशत स्थान पर एक सीमा निर्धारित करने देता है, इसलिए आप उस बिंदु पर पहुंचने से पहले इनकोड से बाहर निकल सकते हैं, जहां आप मौजूदा फ़ाइलों के लिए अपील नहीं कर सकते। (डिफ़ॉल्ट FSF के लिए 25% है। 1TB के तहत, 50TB तक की फाइल सिस्टम के लिए 5%, उससे बड़ी के लिए 1%।) वैसे भी, मेटाडाटा (इनोड्स और हद नक्शे) पर इस अंतरिक्ष उपयोग को नियमित रूप से परिलक्षित किया जाएगा df -h"- पीटर कॉर्डेस इस उत्तर के लिए एक टिप्पणी में


तो, क्या आप कह रहे हैं कि अगर मैं 28786688-667980=28118708खाली फाइलें बनाता हूं, तो मैं प्रभाव से बाहर चला जाएगा और "मेरी प्रणाली को तोड़ दूंगा"?
ल्यूकोनाचो

1
XFS डायनामिक रूप से इनोड्स भी आवंटित करता है। तो JFS करता है। तो / reiserfs किया था। तो F2FS करता है । पारंपरिक यूनिक्स फाइल सिस्टम एमकेएफ के समय में निष्क्रिय रूप से इनकोड आवंटित करते हैं, और इसलिए ext4 जैसे आधुनिक एफएसई करते हैं जो अपनी विरासत को इसे वापस ट्रेस करते हैं, लेकिन इन दिनों यह अपवाद है, नियम नहीं। (जब तक आप स्थापित-बेस के द्वारा वजन की चीजों को नहीं हटाते हैं, जिसमें यह कहना शायद सही है कि वर्तमान में वाइल्ड पर * nix सिस्टम पर डिस्क पर मौजूद अधिकांश फाइल सिस्टम को स्टेटिक रूप से आवंटित किया गया है।)
पीटर कॉर्ड्स

BTW, XFS आपको इनोड्स द्वारा उपयोग किए जाने वाले अधिकतम प्रतिशत स्थान पर एक सीमा निर्धारित करने देता है, ताकि आप उस बिंदु पर पहुंचने से पहले इनकोड से बाहर निकल सकें, जहाँ आप मौजूदा फ़ाइलों के लिए अपील नहीं कर सकते। (डिफ़ॉल्ट 1TB के तहत FSes के लिए 25%, 50TB तक फाइल सिस्टम के लिए 5%, उससे बड़ा 1%) df -h
पीटर कॉर्डेस

26

खाली फ़ाइलों को बनाने में निम्नलिखित का उपयोग करना शामिल है:

  • आयोड्स, प्रति फ़ाइल एक;
  • अतिरिक्त निर्देशिका प्रविष्टियाँ, प्रति फ़ाइल एक भी, लेकिन कुल मिलाकर।

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

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

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


तो मुझे 100% इनोड का उपयोग करने के लिए पर्याप्त खाली फाइलें बनाने की आवश्यकता होगी?
ल्यूकोनाचो

@luchonacho हाँ, प्रभावी रूप से प्रति इनकोड एक खाली फ़ाइल।
स्टीफन किट

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

ठीक है, मैं सही खड़ा हूं। बात यह है, यह मेरे ब्राउज़र पर प्रदान किए गए और निश्चित-चौड़ाई वाले फोंट के साथ मुझे अजीब लगता है। जिज्ञासा से बाहर, आप उन्हें कैसे सम्मिलित करते हैं? क्या आपके कीबोर्ड में उस चरित्र और U + 0022 के लिए एक अलग कुंजी है?
स्टीफन चेज़लस

धन्यवाद, जिज्ञासा से बाहर, मैंने जाँच की कि क्या वे मेरे यूके कीबोर्ड लेआउट पर हैं और वास्तव में वे AltGr + Shift + V / B (शिफ्ट के बिना दोहरे उद्धरण) पर हैं। हालांकि मैं U + 0022 के साथ रहना चाहूंगा।
स्टीफन चेज़लस

7

शुद्ध तर्क वितर्क:

फ़ाइल नाम में बाइट्स की गैर-शून्य राशि होती है। यहां तक कि फ़ाइल नाम के निरपेक्ष अधिकतम राशि की अनुमति देने के लिए बनाया गया एक काल्पनिक फाइल सिस्टम में सैद्धांतिक अधिकतम संपीड़न के साथ, प्रत्येक फ़ाइल नाम अभी भी कम से कम एक बिट में खपत होगी कहीं अपने भौतिक डिस्क पर। शायद अधिक है, लेकिन "प्रति फ़ाइल 1 बिट" तुच्छ न्यूनतम है।

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

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


0

बस नहीं, लेकिन आप लिनक्स पर इनोड से बाहर चला सकते हैं जो अंतरिक्ष से बाहर चलने के समान होगा।

आप अपने शेल में कुछ इस तरह की कोशिश कर सकते हैं n=0; while :; do touch $n; let n=n+1; done

बस इसे वर्चुअल मशीन में चलाना सुनिश्चित करें या आप बहुत तेजी से इनोड से बाहर हो जाएंगे।


वह आज्ञा क्या कर रहा है?
ल्यूकोनाचो

यह तब शुरू होता है जब सही अनंत लूप जो हर मोड़ में एक फ़ाइल नाम बनाता है जो 0 से शुरू होता है एक पूर्णांक होता है तब 1 2 3 ... यह अंततः फाइल सिस्टम के सभी इनोड्स का उपयोग करने के लिए पर्याप्त फाइलें बनाएगा।
in1t3r

1
यदि यह कमांड आपके / होम विभाजन पर चलती है यदि यह स्वतंत्र है तो / विभाजन से आपको वह समस्या नहीं होगी जो आप अभी अपने / होम विभाजन में नहीं लिख सकते हैं। मेरा सुझाव है कि इनोडेटेस्ट सीडी नाम की एक निर्देशिका बनाई जाए और फिर कमांड को चलाने के बाद आप उन त्रुटियों को देखें जिन्हें आप अब फाइल सिस्टम में फाइल नहीं बना सकते हैं ctrl + C और rm -fr inodetestउन सभी खाली फाइलों से छुटकारा पाने के लिए दौड़ें और सामान्य रूप से फिर से काम करें। :)
in1t3r

0

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

(बार्ड कोपरपुड द्वारा एक जवाब-में-एक टिप्पणी)


यकीन नहीं कि हमें एक और जवाब चाहिए जो एक ही बात कहे ?
जेफ स्कालर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.