ด้วยเหตุผลบางอย่างเมื่อฉันสร้างไฟล์ข้อความใน OS X จะเป็นอย่างน้อย 4kB เสมอเว้นแต่ว่าจะว่างเปล่า ทำไมนี้ มีข้อมูลเมตา 4,000 ไบต์ประมาณ 1 ไบต์ของข้อความธรรมดาหรือไม่?
:P
ด้วยเหตุผลบางอย่างเมื่อฉันสร้างไฟล์ข้อความใน OS X จะเป็นอย่างน้อย 4kB เสมอเว้นแต่ว่าจะว่างเปล่า ทำไมนี้ มีข้อมูลเมตา 4,000 ไบต์ประมาณ 1 ไบต์ของข้อความธรรมดาหรือไม่?
:P
คำตอบ:
ขนาดบล็อกของระบบไฟล์ต้องเป็น 4 kB เมื่อข้อมูลถูกเขียนไปยังไฟล์ที่มีอยู่ในระบบไฟล์ระบบปฏิบัติการจะต้องจัดสรรบล็อกของหน่วยเก็บเพื่อให้มีข้อมูลที่จะถูกเขียนลงในไฟล์
โดยทั่วไปเมื่อระบบไฟล์ถูกสร้างที่เก็บข้อมูลที่มีอยู่ในระบบไฟล์นั้นจะถูกแบ่งเป็นบล็อกขนาดคงที่ บทความ Wikipedia นี้อธิบายกระบวนการนี้โดยย่อ
ขนาดบล็อกพื้นฐานของระบบไฟล์สำหรับไฟล์นี้ต้องมีขนาดบล็อก 4K ไฟล์นี้ใช้ 1 บล็อก 4K และมีหนึ่งไบต์ภายในบล็อกนั้นเท่านั้นที่มีข้อมูลจริง
ระบบไฟล์ทั้งหมดมีขนาดคลัสเตอร์หรือบล็อกหรือจำนวนพื้นที่ดิสก์ที่เล็กที่สุดที่สามารถจัดสรรให้เก็บไฟล์ได้ แม้ว่าขนาดไฟล์จริงจะเล็กกว่าขนาดคลัสเตอร์ / บล็อกก็จะยังคงใช้คลัสเตอร์หนึ่งหรือ 4K ในระบบไฟล์ของคุณ ขนาดคลัสเตอร์ขึ้นอยู่กับระบบไฟล์และตัวเลือกระบบไฟล์
ถ้ามันมีศูนย์ไบต์ตามที่Gilles ชี้เอาไว้มันจะใช้บล็อก / กลุ่มเป็นศูนย์ แต่หนึ่ง inode บนระบบไฟล์ * nix ทั่วไปซึ่งตอบได้ดีกว่า caveat "ยกเว้นว่ามันว่างเปล่า"
การทดลองเล็กน้อยเพื่อช่วยอธิบายสิ่งนี้:
ก่อนอื่นมาดูว่าขนาดบล็อกจริงของพาร์ติชั่น root 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) ตามที่คาดไว้ ทีนี้มาสร้างสามไฟล์: อันแรกคือ zero bytes, อันที่สองคือหนึ่งไบต์และอันที่สามคือ 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
ทำไดเรกทอรี เราใช้-s
ตัวเลือกเพื่อดูขนาดที่จัดสรร (คอลัมน์ซ้ายสุด) ในจำนวน 1024- ไบต์ "บล็อก"
(แอลเอไม่ทราบขนาดของบล็อกที่แท้จริงคือ 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
สามารถสังเกตได้สองสิ่งที่นี่:
ไฟล์ที่กระจัดกระจายเป็นไฟล์ที่มีศูนย์ขนาดใหญ่ เนื่องจากข้อมูลทราบว่าเป็นศูนย์ทั้งหมดจึงไม่มีจุดในการจัดเก็บไว้ในดิสก์ ด้วยวิธีนี้ขนาดที่ชัดเจนของไฟล์อาจใหญ่กว่าขนาดบนดิสก์
โปรดทราบว่าระบบไฟล์บางไฟล์อนุญาตให้มีเนื้อหาที่มีขนาดเล็กมากที่จะถูกเก็บไว้ในinodeตัวเอง ดูเป็นไปได้หรือไม่ที่จะเก็บข้อมูลไว้ใน inode บนระบบไฟล์ Unix / Linux โดยตรง? .