एक निर्देशिका का आकार हमेशा यूनिक्स में 4096 बाइट्स क्यों होता है?


26

मुझे यकीन है कि एक निर्देशिका फ़ाइल में 4096 बाइट्स की तुलना में बहुत कम जानकारी है। मुझे पता है कि सेक्टर का आकार 4096 बाइट्स है। लेकिन सामान्य फ़ाइलें इससे छोटी होती हैं।

यूनिक्स प्रत्येक फ़ोल्डर के लिए 4096 बाइट्स क्यों आरक्षित करता है?

जवाबों:


30

यह उस डायरेक्टरी (नाम सहित) में मौजूद फाइलों के बारे में मेटा-डेटा स्टोर करने के लिए आवश्यक प्रारंभिक आकार है। प्रारंभिक आवंटन एक क्षेत्र के आकार के बराबर होता है, लेकिन यदि आवश्यक हो तो इससे ऊपर भी बढ़ सकता है। एक बार आवंटित करने के बाद, विखंडन को कम करने के लिए, फ़ाइलों को हटा दिए जाने पर स्थान को मुक्त नहीं किया जाता है।

उदाहरण के लिए:

$ mkdir testdir
$ cd testdir
$ ls -ld .
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:28 ./
$ for ((i=0; i<1000; i++)); do touch some_longish_file_name_$i; done
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ rm some_longish_file_name_*
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ cd ..
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 testdir/
$ rmdir testdir ; mkdir testdir
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:29 testdir/

स्रोत


3
"स्थान खाली नहीं किया जाता है, अगर फ़ाइलों को हटा दिया जाता है" भाग के लिए धन्यवाद। मैंने एक बैकअप बहाल किया और मुझे यकीन नहीं था कि दो अन्यथा समान निर्देशिकाओं के अलग-अलग आकार क्यों थे।
टॉमस ज़ीलिस्की

11

कभी-कभी 4096 बाइट्स कुछ फाइल सिस्टम के लिए सबसे छोटी आवंटन इकाई होती है। इसीलिए निर्देशिका 4096 है।

यही बात फाइलों पर लागू होती है। भले ही कुछ फाइलें 4096 से कम की रिपोर्ट करें, लेकिन वे वास्तव में डिस्क से कम से कम 4096 स्टोरेज ले रहे हैं।


4
यप, जैसा कि पाब्लो ने कहा। फ़ाइल के साथ आप जो आकार देख रहे हैं, वह फ़ाइल सामग्री आकार है, न कि डिस्क आकार की फ़ाइलें। उन छोटी फाइलों की डिस्क का आकार वास्तव में 4096 है, निर्देशिका की तरह, क्योंकि यह केवल उस आकार के ब्लॉक में डिस्क स्थान आवंटित कर सकती है
दान मैकग्राथ

1
इसका सवाल से कोई लेना-देना नहीं है।
२०'१०

यह गलत है। स्वीकृत उत्तर देखें।
डंकन एक्स सिम्पसन

गलत? क्या यह दोनों उत्तरों का संयोजन नहीं है? 4096 पृष्ठ का आकार है, अधिक जानकारी के लिए मेमोरी पेजिंग सिस्टम देखें।
हरिकेल

5

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


3

यह फाइलसिस्टम पर निर्भर करता है। Ext2 / 3/4 पर यह "4096" है। रीसेरफ़्स पर यह 9608 (मेरा $HOME) 1032 ( /tmp) या 48 (कुछ dir में /tmp) हो सकता है।

डिफ़ॉल्ट रूप से ext2 / 3/4 ब्लॉक पर 4096 है - और फ़ाइल उससे कम नहीं ले सकती है। यदि फ़ाइल छोटी है तो यह वैसे भी पूरे ब्लॉक लेती है। जैसा कि निर्देशिका के तार्किक आकार के बारे में पूछना व्यर्थ है और यह जानकारी शायद वैसे भी डिस्क पर नहीं है और इसे कुछ रिपोर्ट करना है यह ब्लॉक के आकार की संख्या को ले जाता है जो ब्लॉक किए गए अर्थात भौतिक स्थान की संख्या को लिया गया है।


मुझे यकीन है कि फ़ाइल का आकार भी फ़ाइलों के साथ संग्रहीत नहीं है। आवश्यकता पड़ने पर इसकी गणना की जाती है। लेकिन फ़ाइलों के लिए, यह actualफ़ाइल आकार की रिपोर्ट करता है ।
लेज़र

1
फ़ाइल आकार इनोड के साथ संगृहीत है। निश्चित रूप से ext2 इनोड के अंदर बाइट्स में आकार होता है। अन्यथा यह खोजना असंभव होगा कि \0बाइनरी फ़ाइलों में कानूनी चरित्र के रूप में फ़ाइल कहाँ समाप्त होती है। पुनश्च। एफएस बनाना संभव है जो इसे स्टोर न करें - लेकिन बस फैली फैली नहीं है (और शायद कोई अन्य लोकप्रिय नहीं)।
मैकीज पीचोटका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.