เหตุใดไดเรกทอรีทั้งหมดจึงมีขนาด 4096 ไบต์ (4 K)


32

ตามที่หัวเรื่องพูด ฉันต้องการทราบว่าทำไมทุกไดเรกทอรีที่มีขนาดเท่ากับ 4K แม้ว่าจะมีไฟล์ที่มีขนาดมากกว่า 4K

โปรดดูที่ต่อไปนี้: -

$ ls -lh
total 2.0M
drwxr-xr-x 4 ankit ankit 4.0K Sep 11 07:28 Desktop

$ ls -lrh Desktop/
-rw-rw-r-- 1 ankit ankit 9.1M Aug 4 11:15 sophosthreatsaurusaz.pdf
-rw------- 1 ankit ankit 107K Dec 27 2010 KP 3 0.pdf
drwxrwsr-x 9 ankit ankit 4.0K Sep 10 19:26 eclipse

PS: ฉันตระหนักถึงdu -shอรรถประโยชน์บรรทัดคำสั่ง

แก้ไข:ฉันสมมติว่าไดเรกทอรีเป็นที่เก็บไฟล์


มันเป็น meta-data ของสารบบ
Tachyons

คำตอบ:


33
  • โดยไม่ต้องมีความรู้ด้านเทคนิคมากเกินไปให้นึกถึงรายการไดเรกทอรีเป็นเพียง "ลิงก์" ไปยัง รายการไฟล์ที่ไดเรกทอรี "มีอยู่"
  • จากนั้นทุกอย่างlsจะแสดงขนาดของลิงก์นั้นไม่ใช่พื้นที่ทั้งหมดที่ครอบครองโดยเนื้อหาของไดเรกทอรี
  • ขนาดต่ำสุดที่ไฟล์หรือรายการไดเรกทอรี / ลิงค์ต้องมีคือหนึ่งบล็อกซึ่งโดยปกติแล้ว 4096 ไบต์ / 4K ในระบบไฟล์ ext3 / 4 ส่วนใหญ่

7
คุณบอกว่า "ขนาดเล็กสุดที่ไฟล์หรือรายการไดเรกทอรี / ลิงค์ต้องมีคือหนึ่งบล็อก" แต่ฉันแน่ใจว่าฉันได้เห็นขนาดไฟล์น้อยกว่า 4K
Lakshay Garg

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

@phyloflash ระบบไฟล์บางระบบ (เช่น NTFS) เก็บไฟล์ขนาดเล็กในรายการไฟล์ด้วยตนเอง (สำหรับ NTFS มันอยู่ในรายการ MFT) วิธีนี้เนื้อหาของพวกเขาครอบครองบล็อกการจัดสรรเป็นศูนย์และการกระจายตัวของภายในจะลดลง
Ruslan

26

เพื่อให้เข้าใจสิ่งนี้คุณควรมีความรู้พื้นฐานเกี่ยวกับสิ่งต่อไปนี้ (ระบบไฟล์):

  • inode (มีคุณสมบัติไฟล์, ข้อมูลเมตาของไฟล์, โครงสร้างตัวชี้)
  • ไฟล์ (ถือได้ว่าเป็นตารางที่มี 2 คอลัมน์ชื่อไฟล์และ inode ชี้ไปที่บล็อกข้อมูลดิบบนอุปกรณ์บล็อก)
  • ไดเรกทอรี (เพียงไฟล์พิเศษภาชนะสำหรับชื่อไฟล์อื่น ๆ มันมีอาร์เรย์ของชื่อไฟล์และหมายเลข inode สำหรับแต่ละชื่อไฟล์นอกจากนี้ยังอธิบายความสัมพันธ์ระหว่างผู้ปกครองและเด็ก ๆ )
  • ลิงก์สัญลักษณ์ VS ลิงก์หนัก
  • dentry (รายการไดเรกทอรี)
  • ...

บนext4ระบบไฟล์ทั่วไป(สิ่งที่คนส่วนใหญ่ใช้) inodeขนาดเริ่มต้นคือ 256 ไบต์ขนาดบล็อกคือ 4096 ไบต์

ไดเรกทอรีเป็นเพียงไฟล์พิเศษที่มีอาร์เรย์ชื่อไฟล์และหมายเลข inode เมื่อสร้างไดเร็กทอรีระบบไฟล์จะจัดสรร 1 inode ไปยังไดเร็กทอรีด้วย "filename" (ชื่อ dir จริง ๆ ) inode ชี้ไปที่บล็อกข้อมูลเดียว (โอเวอร์เฮดขั้นต่ำ) ซึ่งคือ 4096 ไบต์ นั่นเป็นเหตุผลที่คุณเห็น 4096 / 4.0K lsเมื่อใช้

คุณจะได้รับรายละเอียดโดยใช้&tune2fsdumpe2fs

ตัวอย่าง

root@ubuntu:~# tune2fs -l /dev/ubuntu/root 
tune2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          2fca4cbb-22f1-4328-ab13-cacedb360930
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              967680
Block count:              3931136
Reserved block count:     0
Free blocks:              2537341
Free inodes:              517736
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      416
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8064
Inode blocks per group:   504
RAID stride:              35637
Flex block group size:    16
Filesystem created:       Thu Mar 15 14:31:04 2012
Last mount time:          Sat Oct 20 20:28:04 2012
Last write time:          Sat Oct 20 20:23:32 2012
Mount count:              1
Maximum mount count:      -1
Last checked:             Sat Oct 20 20:22:57 2012
Check interval:           0 (<none>)
Lifetime writes:          54 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       272350
Default directory hash:   half_md4
Directory Hash Seed:      d582ad79-75a0-4964-9a48-33ddba04df5c
Journal backup:           inode blocks

7

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

แหล่ง

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