ทำไมไฟล์ข้อความ 4kB?


47

ด้วยเหตุผลบางอย่างเมื่อฉันสร้างไฟล์ข้อความใน OS X จะเป็นอย่างน้อย 4kB เสมอเว้นแต่ว่าจะว่างเปล่า ทำไมนี้ มีข้อมูลเมตา 4,000 ไบต์ประมาณ 1 ไบต์ของข้อความธรรมดาหรือไม่?

ป้อนคำอธิบายรูปภาพที่นี่


16
4096 ไบต์ไม่ใช่ 4000
หอยทากเชิงกล

8
@ Mechanicalsnail 4095 คุณลืมข้อมูลหนึ่งไบต์จริง ๆ
Tobias Kienzler

5
@ Mechanicalsnail ปีอธิกสุรทินใช่มั้ย xkcd.com/394 :P
tkbx

คำตอบ:


52

ขนาดบล็อกของระบบไฟล์ต้องเป็น 4 kB เมื่อข้อมูลถูกเขียนไปยังไฟล์ที่มีอยู่ในระบบไฟล์ระบบปฏิบัติการจะต้องจัดสรรบล็อกของหน่วยเก็บเพื่อให้มีข้อมูลที่จะถูกเขียนลงในไฟล์

โดยทั่วไปเมื่อระบบไฟล์ถูกสร้างที่เก็บข้อมูลที่มีอยู่ในระบบไฟล์นั้นจะถูกแบ่งเป็นบล็อกขนาดคงที่ บทความ Wikipedia นี้อธิบายกระบวนการนี้โดยย่อ

ขนาดบล็อกพื้นฐานของระบบไฟล์สำหรับไฟล์นี้ต้องมีขนาดบล็อก 4K ไฟล์นี้ใช้ 1 บล็อก 4K และมีหนึ่งไบต์ภายในบล็อกนั้นเท่านั้นที่มีข้อมูลจริง


10
ความคิดเห็น: ใน Windows ขนาดไฟล์จริงจะปรากฏตามค่าเริ่มต้นและขนาดของดิสก์จะปรากฏในบานหน้าต่างตัวเลือก
Joe Z.

บล็อกสามารถรองรับไฟล์ที่แตกต่างกันได้หรือไม่
sudeepdino008

@ sudeepdino008 ไม่หนึ่งบล็อก (อย่างน้อย) สำหรับแต่ละไฟล์ (ระบบไฟล์ ext ของ Linux มี / มี (?) ตัวเลือกสำหรับการวางหลายไฟล์ในหนึ่งบล็อก แต่นั่นเป็นข้อยกเว้นกฎ)
Ro-ee

13

ระบบไฟล์ทั้งหมดมีขนาดคลัสเตอร์หรือบล็อกหรือจำนวนพื้นที่ดิสก์ที่เล็กที่สุดที่สามารถจัดสรรให้เก็บไฟล์ได้ แม้ว่าขนาดไฟล์จริงจะเล็กกว่าขนาดคลัสเตอร์ / บล็อกก็จะยังคงใช้คลัสเตอร์หนึ่งหรือ 4K ในระบบไฟล์ของคุณ ขนาดคลัสเตอร์ขึ้นอยู่กับระบบไฟล์และตัวเลือกระบบไฟล์

ถ้ามันมีศูนย์ไบต์ตามที่Gilles ชี้เอาไว้มันจะใช้บล็อก / กลุ่มเป็นศูนย์ แต่หนึ่ง inode บนระบบไฟล์ * nix ทั่วไปซึ่งตอบได้ดีกว่า caveat "ยกเว้นว่ามันว่างเปล่า"


6
“ แม้ว่าขนาดไฟล์จะเป็นศูนย์ไบต์มันก็จะยังคงใช้คลัสเตอร์เดียว” จริงๆแล้วไม่มี: บนระบบไฟล์ยูนิกซ์ทั่วไปไฟล์เปล่าจะใช้ไอโหนดเดียวและบล็อกศูนย์และไม่มีแนวคิดของคลัสเตอร์ที่แตกต่างจากบล็อก
Gilles 'หยุดความชั่วร้าย'

8

การทดลองเล็กน้อยเพื่อช่วยอธิบายสิ่งนี้:

ก่อนอื่นมาดูว่าขนาดบล็อกจริงของพาร์ติชั่น 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

สามารถสังเกตได้สองสิ่งที่นี่:

  • แฟ้มไบต์ศูนย์จะขึ้นเป็นศูนย์บล็อกในระบบแฟ้มยืนยันสิ่งที่ไจลส์กล่าว
  • แม้ว่าไฟล์อีกสองไฟล์จะมีขนาดไฟล์แตกต่างกัน แต่ทั้งคู่ใช้ขนาด 4 * 1024 = หนึ่งบล็อก 4KiB ext4

ไฟล์กระจัดกระจาย

ไฟล์ที่กระจัดกระจายเป็นไฟล์ที่มีศูนย์ขนาดใหญ่ เนื่องจากข้อมูลทราบว่าเป็นศูนย์ทั้งหมดจึงไม่มีจุดในการจัดเก็บไว้ในดิสก์ ด้วยวิธีนี้ขนาดที่ชัดเจนของไฟล์อาจใหญ่กว่าขนาดบนดิสก์

ข้อมูลแบบอินไลน์

โปรดทราบว่าระบบไฟล์บางไฟล์อนุญาตให้มีเนื้อหาที่มีขนาดเล็กมากที่จะถูกเก็บไว้ในinodeตัวเอง ดูเป็นไปได้หรือไม่ที่จะเก็บข้อมูลไว้ใน inode บนระบบไฟล์ Unix / Linux โดยตรง? .


ใช่คุณค่อนข้างถูกต้องขนาด 4k คือขนาดที่ระบบไฟล์ใช้เพื่อเก็บข้อมูลเกี่ยวกับพื้นที่จัดเก็บไฟล์ภายในระบบไฟล์ สิ่งต่าง ๆ เช่นดัชนีของไฟล์จากจุดเริ่มต้นของบล็อกดัชนีของบล็อกและขนาดของหน่วยความจำที่ใช้โดยไฟล์จะถูกเก็บไว้ซึ่งกินขึ้น 4k ข้อมูลนี้ใช้เพื่ออ้างอิงไฟล์ข้อความจากระบบไฟล์
pvn

2
สิ่งนี้ไม่ถูกต้อง ข้อมูลเมตาของไฟล์อย่างที่คุณพูดถึงอย่า "กิน" 4KiB ใด ๆ โครงสร้างเหล่านั้นเป็นส่วนหนึ่งของระบบการจัดรูปแบบค่าใช้จ่าย ดูคำตอบของฉันข้างต้นเพื่อพิสูจน์ หากสิ่งที่คุณพูดนั้นเป็นจริงไฟล์ 4096- ไบต์ของฉันจะต้องมีมากกว่าหนึ่งบล็อก
Jonathon Reinhart

ตัวชี้ไปยังไฟล์ (เซกเมนต์หมายเลข, blk no) ในระบบไฟล์เป็นสิ่งที่ต้องจัดเก็บและต้องกำหนดหนึ่งบล็อก หากไฟล์ข้อความมีเนื้อหาน้อยกว่ามากซึ่งสามารถใส่ลงในบล็อกแรกที่กำหนดไว้แล้วไฟล์นั้นจะไม่ต้องการการจัดสรรบล็อกครั้งที่สอง ฉันยอมรับว่าทั้งหมดของ 4k ไม่ได้ใช้สำหรับข้อมูลเมตาและมีการกระจายตัวภายในบางอย่างเกิดขึ้น
pvn

2
ฉันกำลังบอกว่าไม่มีการใช้ขนาดบล็อก 4 KiB สำหรับข้อมูลเมตา ฉันคิดว่าตัวอย่างของฉันพิสูจน์ว่า
Jonathon Reinhart

2
@pvn: Jonathon ถูกต้อง ข้อมูลเมตาจะถูกเก็บไว้ใน inode สำหรับไฟล์ซึ่งแยกจากบล็อกที่ใช้ในการจัดเก็บข้อมูลไฟล์
หอยทากเครื่องกล
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.