Ext2文件系统

来源:互联网 发布:php系统案例 编辑:程序博客网 时间:2024/06/08 18:36

Ext2文件系统的总体布局,如下图。
这里写图片描述


1文件系统的最小存储单元是块(block),块的大小一般为512Bytes,或者是它的整数倍,块的大小是在格式化是所确定的。不能修改除非重新格式化。上图中显示了文件系统的总体布局,由一个Boot Block和对个Block Group组成,每个Block Group内部还有其他结构组成。

  • Boot Block:启动块,大小为1KB,它的大小是由PC标准规定的,用来存储磁盘分区信息和启动信息,任何文件系统都不可以使用启动块。
  • Super Block:描述整个分区的文件系统信息,例如块大小、文件系统版本号、上次mount的时间等等。超级块在每个块组的开头都有一份拷贝。
  • 块组描述符表(GDT,Group Descriptor Table):由很多块组描述符组成,整个分区有多少个快租就对应有多少个块组描述符。每个块组描述符存储了一个块组的描述信息,包括这个块组是从哪开始是inode表,从哪里开始是数据块,空闲的inode和数据块还有多少个等等。和Super Block相似,块组描述符表在每个块组的开头都有一个拷贝,这么做的原因是因为这些信息十分重要。一旦Super Block意外损坏就会丢失整个分区的数据,一旦GDT意外损坏就会丢失整个块组的数据。
  • Block Bitmap:块位图的目的是为了让文件系统知道,那些块是空闲的,那些块已经存储了数据。块位图本身会占用一个块,其中的每个bit代表组中的一个块,1表示已用,0表示为空。
  • inode Bitmap:它的作用和Block Bitmap相似,本身占用一个块,其中每个bit表示一个inode是否为空闲可用。
  • inode Table:在Linux中,一个文件处理数据本身需要存储外,还需要存储一些描述信息,例如文件类型(常规、目录、符号链接等)、权限、文件大小,创建/修改/访问时间等。也就是我们用ls命令所看到的那些信息,这些信息存储在与文件相关联的inode中。每个文件都有一个inode,一个块组中所有的inode组成了inode Table。当然inode表占据多少个块是在格式化时所决定的,mke2fs工具的根据一个块组有多少个8KB就分配多少个inode,当然用户也可以自定义。
  • Data Block:数据块对于不同的文件类型会有不同的情况:对于常规文件,文件的数据存储在数据块中;对于目录,该目录下的所有文件名和目录名都存储在数据块中,注意文件名保存在它所在目录的数据块,而文件的其它信息则保存在该文件的inode中;对于符号链接,如果目标路径名较短则直接保存在inode中以便更快查找,如果较长则分配到一个数据块中保存;设备文件、FIFO和socket等特殊文件没有数据块,设备文件的主设备号和次设备号保存在inode中。

现在我们通过一些示例来理解上面的内容
1在我的home目录下执行ls -l:

total 48drwxr-xr-x  2 black black 4096 34 18:49 Desktopdrwxr-xr-x  9 black black 4096 38 11:56 Documentsdrwxr-xr-x 12 black black 4096 38 10:08 Downloads-rw-r--r--  1 black black 8980 1216 08:15 examples.desktopdrwxrwxr-x  3 black black 4096 115 15:13 Microsoftdrwxr-xr-x  3 black black 4096 210 15:44 Musicdrwxr-xr-x  3 black black 4096 38 19:39 Picturesdrwxr-xr-x  2 black black 4096 1216 22:50 Publicdrwxr-xr-x  2 black black 4096 1216 22:50 Templatesdrwxr-xr-x  2 black black 4096 1216 22:50 Videos

可以看到目录文件的大小都是4096或它的整数倍(新建的文件夹也是如此),这是因为这个分区的块大小为4096。

$ls -l /devcrw-rw-rw-  1 root root      1,   5 38 17:44 zero

文件zero的类型为c,表示它是一个字符设备文件,它代表内核中的一个设备驱动程序,也没有数据块,原本应该写文件大小的地方却写了1,5这两个数字,表示主设备号和次设备号,访问该文件时,内核根据设备号找到相应的驱动程序。

$touch file$ln -s file files-rw-rw-r-- 1 black black 0 3月   8 20:49 filelrwxrwxrwx 1 black black 4 38 20:49 files -> file

k可以看到文件file为新创建的所以大小问0,但是为什么file的软链接files却有4个字节呢?那是因为这个数字4表示的就是“file”这个四个字符,符号链接文件就保存着这样一个路径名。再来看看硬链接:

$ln file file2$ls -llrwxrwxrwx 1 black black 4 38 20:49 files -> file-rw-rw-r-- 2 black black 0 38 20:49 file-rw-rw-r-- 2 black black 0 38 20:49 file2

file和file2除了名字以外其它属性都一模一样,你会看到第二栏的数字原本是1,但是现在变成了2,那是因为file和file2是同一个文件在文件系统中的两个名字,这个数字2表示硬链接数,也就是一个文件有多少个别名。

0 0