文件系统 为什么每个目录的大小为 4096字节( 4 K )?

分享于 

4分钟阅读

ubuntu

  繁體

问题

我想知道为什么每个目录的大小都等于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




答案1

  • 可以将目录想象成一个"链接",列出目录"包含的文件列表"
  • ls显示该链接的大小,而不是目录内容占用的总空间
  • 文件或目录项/链接必须占用的最小的块,在大多数ext3/4文件系统上通常是4096字节/4K

  • 答案2

    要理解这一点,最好了解以下(文件系统)的一些基本知识:

  • inode (包含文件属性,文件元数据,指针结构)
  • file (可以认为是一个包含2列,filename及它inode的表,inode指向块设备上的原始数据块)
  • 目录(只是一个特殊的文件,其他文件名的容器,它包含每个文件名的文件名和inode号的数组,还描述了父母与子女之间的关系。 )
  • 符号链接与硬链接
  • dentry (目录项)
  • 在典型的ext4文件系统上,默认的inode大小为256字节,块大小为4096字节。

    目录只是一个特殊的文件,其中包含一个文件名和inode号数组,创建目录时,文件系统使用"文件名"将1个inode分配给目录,inode指向一个数据块(最小开销),它是4096字节,这就是在使用 ls K时看到4096/4.0 K的原因。

    可以使用tune2fs & dumpe2fs获取详细信息。

    例子

    
    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
    
    
    
    


    文件  files  DIR  尺寸  字节  bytes