पाठ फ़ाइलें 4kB क्यों हैं?


47

किसी कारण से, जब मैं ओएस एक्स पर एक पाठ फ़ाइल बनाता हूं, तो यह हमेशा कम से कम 4kB होता है, जब तक कि यह खाली न हो। ऐसा क्यों है? क्या सादे पाठ के बारे में 1 बाइट के मेटाडेटा के 4,000 बाइट्स हो सकते हैं?

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


16
4096 बाइट्स, 4000 नहीं।
यांत्रिक घोंघा

8
@ मेकेनिस्सेल 4095। आप वास्तविक डेटा के एक बाइट को भूल गए
टोबियास किन्ज़लर

5
@ मेकैनिकलइल यह एक लीप वर्ष है, है ना? xkcd.com/394 :P
tkbx

जवाबों:


52

फाइल सिस्टम का ब्लॉक साइज 4 kB होना चाहिए। जब डेटा एक फ़ाइल के लिए लिखा जाता है जो एक फ़ाइल सिस्टम में निहित होता है, तो ऑपरेटिंग सिस्टम को उस डेटा को रखने के लिए भंडारण के ब्लॉक आवंटित करना चाहिए जो फ़ाइल को लिखा जाएगा।

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

इस फ़ाइल के लिए फ़ाइल सिस्टम के अंतर्निहित ब्लॉक आकार में 4K बाइट ब्लॉक आकार होना चाहिए। यह फ़ाइल 1 4K ब्लॉक का उपयोग कर रही है और उस ब्लॉक में केवल एक बाइट में वास्तविक डेटा है।


10
एक टिप्पणी: विंडोज में, वास्तविक फ़ाइल आकार डिफ़ॉल्ट रूप से प्रदर्शित होता है, और डिस्क पर आकार विकल्प फलक में प्रदर्शित होता है।
जो जेड

तो क्या कोई ब्लॉक विभिन्न फ़ाइलों को समायोजित कर सकता है?
सुदीपदीनो ०

@ sudeepdino008 नहीं, प्रत्येक फ़ाइल के लिए एक ब्लॉक (कम से कम) (लिनक्स 'एक्सट फाइल सिस्टम है / है?) (एक ब्लॉक में कई फाइलें डालने के लिए एक विकल्प, लेकिन यह नियम का एक अपवाद है)
Ro-ee

13

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

यदि इसमें शून्य बाइट्स होते हैं, जैसा कि गिल्स ने बताया है , तो यह शून्य ब्लॉक / क्लस्टर का उपयोग करता है, लेकिन ठेठ * निक्स फाइल सिस्टम पर एक इनोड, जो कैविटी का बेहतर जवाब देता है, "जब तक कि यह खाली न हो।"


6
"भले ही एक फ़ाइल का आकार शून्य बाइट्स हो, यह अभी भी एक क्लस्टर का उपभोग करेगा।"
गाइल्स का SO- बुराई से दूर रहना '

8

इसे समझने में मदद करने के लिए एक छोटा सा प्रयोग:

सबसे पहले, आइए देखें कि मेरे मूल ext4 (LVM) विभाजन का वास्तविक ब्लॉक आकार क्या है:

[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size:               4096

यह उम्मीद के मुताबिक 4096 (4 KiB) है। अब, तीन फाइलें बनाते हैं: पहला शून्य बाइट्स है, दूसरा सिर्फ एक बाइट है, और तीसरा 4 KiB (ब्लॉक आकार) है:

[root@fedora17 blocksize]# touch 0_bytes.bin
[root@fedora17 blocksize]# dd if=/dev/zero of=1_byte.bin bs=1 count=1
[root@fedora17 blocksize]# dd if=/dev/zero of=4096_bytes.bin bs=1 count=4096


अब, हम lsनिर्देशिका। हम 1024-बाइट "ब्लॉक" की संख्या में आवंटित आकार (बाएं-सबसे कॉलम) -sको देखने के लिए विकल्प का उपयोग करते हैं । (ls को पता नहीं है कि असली ब्लॉक का आकार 4096 है - हम निर्दिष्ट कर सकते हैं, लेकिन यह उस मूल्य से सब कुछ बताता है , और हम वास्तविक फ़ाइल आकार को बाइट्स में भी देखना चाहते हैं)
--block-size

[root@fedora17 blocksize]# ls -ls
total 8
0 -rw-r--r--. 1 root root    0 Jan 21 23:56 0_bytes.bin
4 -rw-r--r--. 1 root root    1 Jan 21 23:38 1_byte.bin
4 -rw-r--r--. 1 root root 4096 Jan 21 23:38 4096_bytes.bin

यहाँ दो बातों पर ध्यान दिया जा सकता है:

  • शून्य बाइट फ़ाइल को फाइलसिस्टम में शून्य ब्लॉक लेता है, जो पुष्टि करता है कि जाइल्स ने क्या कहा है
  • भले ही अन्य दो फ़ाइलों का फ़ाइल आकार अलग-अलग हो, फिर भी वे दोनों 4 * 1024 = एक 4KiB ext4 ब्लॉक लेते हैं।

विरल फाइलें

विरल फाइलें शून्य के बड़े ब्लॉक वाली फाइलें हैं। क्योंकि डेटा को सभी शून्य माना जाता है, डिस्क पर इसे संग्रहीत करने का कोई मतलब नहीं है। इस तरह, एक फ़ाइल का स्पष्ट आकार वास्तव में ऑन-डिस्क आकार से बड़ा हो सकता है ।

इनलाइन डाटा

ध्यान दें कि कुछ फाइल सिस्टम सामग्री को बहुत छोटी फ़ाइलों को इनोड में ही संग्रहीत करने की अनुमति देते हैं । देखें क्या यूनिक्स / लिनक्स फाइलसिस्टम पर इनोड के अंदर डेटा को सीधे स्टोर करना संभव है?


हाँ, आप काफी सही हैं 4k फ़ाइल सिस्टम के अंदर फ़ाइल को स्टोरेज ओडी के बारे में जानकारी संग्रहीत करने के लिए फ़ाइल सिस्टम का उपयोग करने का आकार है। ब्लॉक की शुरुआत से फाइल का इंडेक्स, ब्लॉक का इंडेक्स और फाइल द्वारा उपयोग की जाने वाली मेमोरी के आकार को स्टोर किया जाता है जो 4k तक खाते हैं। इस जानकारी का उपयोग फ़ाइल फ़ाइल को फ़ाइल सिस्टम से संदर्भित करने के लिए किया जाता है।
पवां

2
यह गलत है। फ़ाइल मेटाडेटा जैसा कि आप उल्लेख करते हैं, 4KIB में से किसी को "खाएं" नहीं। वे संरचनाएं ओवरहेड को स्वरूपित करने वाली फ़ाइल सिस्टम का हिस्सा हैं। सबूत के लिए ऊपर मेरा जवाब देखें। यदि आपने जो कहा वह सच था, तो मेरी 4096-बाइट फ़ाइल को एक से अधिक ब्लॉक की आवश्यकता होगी।
जोनाथन रेनहार्ट

फाइल सिस्टम में फाइल (सेगमेंट नं, ब्लेक नं) के संकेत वे चीजें हैं जिन्हें स्टोर करना होता है और एक ब्लॉक को असाइन करने की आवश्यकता होती है। यदि पाठ फ़ाइल में बहुत कम सामग्री है जो पहले से ही इसे सौंपे गए पहले ब्लॉक में फिट हो सकती है, तो उसे दूसरे ब्लॉक आवंटन की आवश्यकता नहीं होगी। मैं सहमत हूं कि पूरे 4k का उपयोग मेटाडेटा के लिए नहीं किया जाता है और कुछ आंतरिक विखंडन उत्पन्न होता है।
पवां

2
मैं कह रहा हूं कि मेटाडाटा के लिए 4 KiB ब्लॉक आकार में से कोई भी उपयोग नहीं किया जाता है। मुझे लगता है कि मेरा उदाहरण यह साबित करता है।
जोनाथन रेनहार्ट

2
@pvn: जोनाथन सही है। मेटाडेटा को फ़ाइल के लिए इनोड में संग्रहीत किया जाता है, जो फ़ाइल डेटा को संग्रहीत करने के लिए उपयोग किए गए ब्लॉक से अलग होता है।
मैकेनिकल घोंघा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.