Tại sao mọi thư mục có kích thước 4096 byte (4 K)?


33

Như chủ đề nói; Tôi muốn biết tại sao mọi thư mục có kích thước bằng 4K ngay cả khi chúng chứa các tệp có kích thước lớn hơn 4K.

Xin hãy xem những điều sau: -

$ 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: Tôi biết về du -shtiện ích dòng lệnh.

Chỉnh sửa: Tôi giả sử thư mục là một thùng chứa cho các tập tin.


Nó là siêu dữ liệu của thư mục
Tachyons

Câu trả lời:


34
  • Không cần quá kỹ thuật, hãy nghĩ về một mục nhập thư mục chỉ đơn giản là một "liên kết" đến danh sách các tệp mà thư mục "chứa."
  • Sau đó, như với mọi thứ, lshiển thị cho bạn kích thước của liên kết đó , không phải toàn bộ không gian bị chiếm bởi nội dung của thư mục.
  • Kích thước tối thiểu mà một mục nhập / liên kết tệp hoặc thư mục phải chiếm là một khối, thường là 4096 byte / 4K trên hầu hết các hệ thống tệp ext3 / 4.

7
Bạn nói rằng "Kích thước tối thiểu mà một mục nhập / liên kết thư mục phải chiếm là một khối" nhưng tôi chắc chắn rằng tôi đã thấy kích thước tệp nhỏ hơn 4K.
Lakshay Garg ngày 13/8/2016

1
@LakshayGarg mặc dù tệp có thể nhỏ hơn 4K, nhưng nó sẽ gây ra cái gọi là "phân mảnh nội bộ", trong đó chỉ một vài byte của khối đã được sử dụng để lưu trữ tệp nhỏ.
phyloflash

@phyloflash một số hệ thống tệp (ví dụ NTFS) lưu trữ các tệp nhỏ trong chính các mục nhập tệp (đối với NTFS, nó nằm trong mục MFT). Bằng cách này, nội dung của chúng chiếm các khối phân bổ bằng không, và sự phân mảnh bên trong bị giảm.
Ruslan

26

Để hiểu điều này, tốt hơn bạn nên có một số kiến ​​thức cơ bản về những điều sau đây (hệ thống tệp):

  • inode (chứa thuộc tính tệp, siêu dữ liệu của tệp, cấu trúc con trỏ)
  • tệp (có thể được coi là một bảng có 2 cột, tên tệp và inode của nó, inode trỏ đến các khối dữ liệu thô trên thiết bị khối)
  • thư mục (chỉ là một tệp đặc biệt, vùng chứa cho tên tệp khác. Nó chứa một mảng tên tệp và số inode cho mỗi tên tệp. Ngoài ra, nó mô tả mối quan hệ giữa cha mẹ và con cái.)
  • liên kết tượng trưng VS liên kết cứng
  • nha (mục thư mục)
  • ...

Trên ext4hệ thống tệp thông thường (hầu hết mọi người sử dụng), inodekích thước mặc định là 256 byte, kích thước khối là 4096 byte.

Một thư mục chỉ là một tập tin đặc biệt chứa một loạt tên tệp và số inode. Khi thư mục được tạo, hệ thống tệp được cấp 1 inode cho thư mục có "tên tệp" (tên thư thực tế). Inode trỏ đến một khối dữ liệu duy nhất (chi phí tối thiểu), là 4096 byte. Đó là lý do tại sao bạn thấy 4096 / 4.0K khi sử dụng ls.

Bạn có thể nhận được các chi tiết bằng cách sử dụng tune2fs& dumpe2fs.

Thí dụ

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

Nếu một tệp chứa bất kỳ dữ liệu nào (thậm chí là một byte), nó sẽ chiếm một khối trên đĩa (thường là 4k những ngày này). Một khối không thể được chia sẻ giữa các tập tin. Điều này có nghĩa là không gian của toàn bộ khối đó sẽ không có sẵn cho các tệp khác, vì vậy nó được coi là "được sử dụng".

Nguồn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.