किसी कारण से, जब मैं ओएस एक्स पर एक पाठ फ़ाइल बनाता हूं, तो यह हमेशा कम से कम 4kB होता है, जब तक कि यह खाली न हो। ऐसा क्यों है? क्या सादे पाठ के बारे में 1 बाइट के मेटाडेटा के 4,000 बाइट्स हो सकते हैं?
:P
किसी कारण से, जब मैं ओएस एक्स पर एक पाठ फ़ाइल बनाता हूं, तो यह हमेशा कम से कम 4kB होता है, जब तक कि यह खाली न हो। ऐसा क्यों है? क्या सादे पाठ के बारे में 1 बाइट के मेटाडेटा के 4,000 बाइट्स हो सकते हैं?
:P
जवाबों:
फाइल सिस्टम का ब्लॉक साइज 4 kB होना चाहिए। जब डेटा एक फ़ाइल के लिए लिखा जाता है जो एक फ़ाइल सिस्टम में निहित होता है, तो ऑपरेटिंग सिस्टम को उस डेटा को रखने के लिए भंडारण के ब्लॉक आवंटित करना चाहिए जो फ़ाइल को लिखा जाएगा।
आमतौर पर, जब एक फाइल सिस्टम बनाया जाता है, तो उस फाइल सिस्टम में निहित स्टोरेज को एक निश्चित आकार के ब्लॉक में विभाजित किया जाता है। यह विकिपीडिया लेख संक्षेप में इस प्रक्रिया की व्याख्या करता है।
इस फ़ाइल के लिए फ़ाइल सिस्टम के अंतर्निहित ब्लॉक आकार में 4K बाइट ब्लॉक आकार होना चाहिए। यह फ़ाइल 1 4K ब्लॉक का उपयोग कर रही है और उस ब्लॉक में केवल एक बाइट में वास्तविक डेटा है।
सभी फ़ाइल सिस्टम में एक क्लस्टर या ब्लॉक आकार होता है, या एक डिस्क रखने के लिए आवंटित किया जा सकने वाला डिस्क स्थान की सबसे छोटी राशि। भले ही वास्तविक फ़ाइल का आकार क्लस्टर / ब्लॉक आकार से छोटा हो, फिर भी यह आपके फ़ाइल सिस्टम पर एक क्लस्टर या 4K का उपभोग करेगा। क्लस्टर आकार फ़ाइल सिस्टम और फ़ाइल सिस्टम विकल्पों पर निर्भर करता है।
यदि इसमें शून्य बाइट्स होते हैं, जैसा कि गिल्स ने बताया है , तो यह शून्य ब्लॉक / क्लस्टर का उपयोग करता है, लेकिन ठेठ * निक्स फाइल सिस्टम पर एक इनोड, जो कैविटी का बेहतर जवाब देता है, "जब तक कि यह खाली न हो।"
इसे समझने में मदद करने के लिए एक छोटा सा प्रयोग:
सबसे पहले, आइए देखें कि मेरे मूल 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
यहाँ दो बातों पर ध्यान दिया जा सकता है:
विरल फाइलें शून्य के बड़े ब्लॉक वाली फाइलें हैं। क्योंकि डेटा को सभी शून्य माना जाता है, डिस्क पर इसे संग्रहीत करने का कोई मतलब नहीं है। इस तरह, एक फ़ाइल का स्पष्ट आकार वास्तव में ऑन-डिस्क आकार से बड़ा हो सकता है ।
ध्यान दें कि कुछ फाइल सिस्टम सामग्री को बहुत छोटी फ़ाइलों को इनोड में ही संग्रहीत करने की अनुमति देते हैं । देखें क्या यूनिक्स / लिनक्स फाइलसिस्टम पर इनोड के अंदर डेटा को सीधे स्टोर करना संभव है? ।