2008-09-02 21 views
32

क्या एक निर्देशिका में अधिकतम संख्या में इनोड हैं?निर्देशिका में अधिकतम संख्या में इनोड्स?

मेरे पास 2 मिलियन से अधिक फाइलों की निर्देशिका है और ls कमांड उस निर्देशिका के विरुद्ध काम करने के लिए नहीं मिल सकता है। तो अब मैं सोच रहा हूं कि क्या मैंने लिनक्स में इनोड्स पर सीमा पार कर ली है। क्या 2^64 संख्यात्मक सीमा से पहले कोई सीमा है?

+0

आप एक ही निर्देशिका में प्रविष्टियों की अधिकतम संख्या मतलब है, सही: यहाँ एक लेख जिसमें यह काफी अच्छी तरह से बताते हैं है?आखिरकार, आप एक ही फाइल में एक ही फाइल में 2 मिलियन हार्डलिंक्स बना सकते हैं, और इससे एक ही समस्या होगी। –

उत्तर

0

क्या आप फ़ाइलों की संख्या की वास्तविक गणना प्राप्त कर सकते हैं? क्या यह 2^एन सीमा के बहुत करीब आता है? क्या आप बस सभी फाइल नामों को पकड़ने के लिए रैम से बाहर हो सकते हैं?

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

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

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

10

नहीं। इनोड सीमा प्रति-फाइल सिस्टम हैं, और फाइल सिस्टम निर्माण समय पर निर्णय लिया है। आप एक और सीमा मार सकते हैं, या शायद 'एलएस' बस इतना अच्छा प्रदर्शन नहीं करता है।

इस प्रयास करें:

tune2fs -l /dev/DEVICE | grep -i inode 

यह आप inode संबंधित जानकारी के सभी प्रकार में बताना चाहिए।

0

जब तक आपको कोई त्रुटि संदेश नहीं मिल रहा है, तो ls काम कर रहा है लेकिन बहुत धीरे-धीरे। आप इस तरह सिर्फ पहले दस फाइलों को देखने का प्रयास कर सकते हैं:

ls -f | head -10

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

ls > ~/lots-of-files.txt

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

ls | xargs -I thefilename mv thefilename ~/some/other/directory

आप जोड़ सकता है कि सिर के साथ फ़ाइलों की एक छोटी संख्या को स्थानांतरित करने के।

ls | head -10000 | xargs -I x mv x /first/ten/thousand/files/go/here

आप शायद कि करने के लिए एक खोल स्क्रिप्ट में ls | head गठबंधन प्रत्येक में फ़ाइलों की एक प्रबंधनीय संख्या के साथ निर्देशिकाओं का एक समूह में फ़ाइलों को विभाजित कर सकते हैं।

+1

एलएस | हेड -10 तत्काल परिणाम प्राप्त करने के लिए काम नहीं करता है, क्योंकि एलएस सॉर्टिंग कर रहा है - इसलिए इसे प्रिंट करने से पहले इसे सबकुछ पढ़ने की जरूरत है। –

+0

उस स्थिति में, कोशिश करें: ls -f | हेड -10 –

48

df -i आपको फ़ाइल सिस्टम पर उपयोग किए जाने वाले इनोडों की संख्या और मुफ्त में बताना चाहिए।

17

ls -U या ls -f आज़माएं।

ls, डिफ़ॉल्ट रूप से, फ़ाइलों को वर्णानुक्रम में टाइप करता है। यदि आपके पास 2 मिलियन फाइलें हैं, तो इस तरह का समय लंबा हो सकता है। यदि ls -U (या शायद ls -f), तो फ़ाइल नाम तुरंत मुद्रित किए जाएंगे।

3

अधिकतम निर्देशिका आकार फ़ाइल सिस्टम-निर्भर है, और इस प्रकार सटीक सीमा भिन्न होती है। हालांकि, बहुत बड़ी निर्देशिकाएं एक बुरी आदत है।

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

 
${topdir}/aa/aardvark 
${topdir}/ai/airplane 

यह विशेष रूप से अच्छी तरह से UUID, GUIDs या सामग्री हैश मान का उपयोग कर यदि नामकरण के लिए काम करता है।

1

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

यह रूप में अच्छी तरह अन्य नेटवर्क फाइल सिस्टम के लिए सच हो सकता है।

एक निर्देशिका में प्रविष्टियों की संख्या की कोई सीमा नहीं है enforced है, यह अच्छी आदत है प्रविष्टियों आप अनुमान लगाने के लिए कुछ सीमा है।

0

NetBackup के लिए, बाइनरी कि ग्राहकों में निर्देशिका का विश्लेषण लिस्टिंग के कुछ प्रकार है कि हर फ़ोल्डर (फ़ोल्डर प्रति, एसएपी काम निर्देशिका बारे में एक लाख) में फ़ाइलों की भारी मात्रा द्वारा टाइमआउट प्रदर्शन करते हैं।

मेरे समाधान था (इस सूत्र में चार्ल्स डफी लिखने के रूप में), कम अभिलेखागार के साथ उप-फ़ोल्डर में फ़ोल्डर पुनर्निर्माण।

-1

एक अन्य विकल्प find है:

find . -name * -exec somcommands {} \;

{} पूर्ण filepath है।

लाभ/नुकसान यह है कि फ़ाइलों को एक दूसरे के बाद एक कार्रवाई की जाती है है।

find . -name * > ls.txt

ls.txt

find . -name * -exec ls -l {} \; > ls.txt

में सभी फ़ाइल नाम प्रिंट में ls.txt

+0

यदि आप शेल द्वारा इसे विस्तारित नहीं करना चाहते हैं तो आपको वन्यचर को सिंगल कोट्स में शामिल करना होगा (यदि 122 फाइलें हैं तो यह काफी लंबा हो सकता है!) –

+1

आपको 'xargs' के बारे में जानना चाहिए आदेश। यह खोज कमांड के -exec विकल्प से कहीं अधिक कुशल है। –

+2

@Didier Trosset, POSIX मानक समर्थन के नए संस्करण 'ढूंढें ... -exec {} + '(' -exec {}; ') की बजाय, जिसमें xargs के समान दक्षता है। –

संबंधित मुद्दे