Linux文件系统

一、EXT2概述

  目前各种版本Linux,已经能够支持很多各种的文件系统,如Ext2,Ext3,Ext4,FAT32,NTFS等等,这里选择最基础Ext2文件系统来说明。在Linux系统中,每个文件包括了内容数据、属性,例如owner、group、other、atime、mtime、ctime等等属性。这些属性是必不可少,来确保用户数据的安全性,因为Linux是一个多用户、多任务的环境。在EXT2文件系统中,把文件分成属性和内容两部分来存储。

      基于Linux数据要求的考虑,所以设计出EXT2将一个文件的存储在inode和块区域,当然inode来存放属性,而块区域来存储文件内容。在一个分区格式化为EXT2后,就会存在inode表和块区域两部分,缺一不可,其作用不言而喻。

      块是硬盘存储文件的最小单位。上面提到的两个部分中,块是“记录文件内容数据”,而inode则是记录“文件的属性,还有那块是文件的内容的相关信息”,即inode在记录文件属性的同时,还记录一个指向内容块的指针。一下是在inode记录的属性(不止这些):

  • 文件的拥有者Owner和群组Group属性;
  • 文件权限属性Read、Write、Execute;
  • 文件类型Type;
  • 文件的三个时间:访问时间atime,修改时间mtime,创建时间ctime;
  • 文件大小;
  • 内容块的这真pointer。

二、EXT2文件系统读取

EXT2中一个inode为128字节,可以用dump2fs 来查看。那么在Linux下怎样读取一个文件或者目录的呢?

  • 目录

      在Linux的EXT2文件系统中,如果建立一个目录时,系统就会分配一个inode及至少一个块。在inode记录该目录的相关属性和块的指针,而在内容块中则是记录该目录下文件或者目录的相关信息,以保证能够快速正确找到关联文件或目录。

  • 文件

       同样,在Linux下,创建一个文件的时候,系统也会为其分配一个inode和能够承载它所有数据的块数。例如,当前Linux系统一个块的大小为4K,那么要存储的数据为10M,就需要为其分配2560个块。

注意:在文件的inode中指记录文件相关属性,并没有存储文件名,那文件名存放在哪里?答案是记录在上层目录的块内容中。

下面举例说明:下图就是读取/etc/crontab文件的过程

process

整个读取的流程:1、操作系统根据Linux根目录/的内容块中关联性内容找到/etc所在inode,读取/etc所有关联性内容;

                       2、根据/etc目录inode的数据,通过块指针找到记录相关性内容的块,读取其所有文件关联性内容;

                       3、通过/etc目录的块中记录的文件crontab的文件关联性内容,找到文件crontab文件的inode,读取读取块指针;

                       4、通过inode记录的块指针,找到文件crontab的内容块,读取文件内容。

在Linux下,具体的命令演示如下:

terry@ubuntu:~$ ls -lia /
total 100
      2 drwxr-xr-x  24 root    root     4096 2012-02-22 14:43 .
      2 drwxr-xr-x  24 root    root     4096 2012-02-22 14:43 ..
1048577 drwxr-xr-x 137 root    root    12288 2012-03-01 11:46 etc
#省略了部分目录,可以看到/etc目录的inode号为1048577
 
terry@ubuntu:~$ ls -liad /etc/crontab /etc/.
1048577 drwxr-xr-x 137 root root 12288 2012-03-01 11:46 /etc/.
1048724 -rw-r--r--   1 root root   724 2011-09-20 08:07 /etc/crontab
#看到/etc的inode确实为1048577,文件/etc/crontab的inode为1048724

你可能感兴趣的:(linux)