每种操作系统能够使用的文件系统不一样:windows98以前的为FAT,windows2000以后的为NTFS,而Linux的文件系统为Ext2(Linux second extended file system,ext3fs)。
1. 文件系统特性
文件数据包括文件的实际内容和文件的权限与属性两部分。文件系统通常将这两部分数据分别存放在不同的区块:权限与属性放置到inode中,实际数据放置到data bolck区块中。此外,还有一个super block用于记录整个文件系统的整体信息。
- super block:记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;
- block:实际记录文件的内容,若文件太大时,会占用多个block。
这种数据存取方法称为索引式文件系统。
如下图所示,文件系统先格式化出inode与block的区块,假设某一个文件的属性与权限数据是放置到inode4号,而这个inode记录了文件数据的实际放置点为2,7,13,15这四个block号码。那么操作系统就能够据此来排列磁盘的阅读顺序,可以一口气将四个block内容读出来。
2. EXT2文件系统介绍
EXT2系统是以inode为基础的文件系统。inode记录文件的权限与相关属性,而block区块记录文件的实际内容。
EXT2文件系统格式化时将磁盘区分为多个区块群组(block group),每个区块群组都有独立的inode/block/superblock系统。
启动扇区(boot sector)
启动扇区内安装开机管理程序,通过启动扇区能够将不同的开机管理程序安装到个别的文件系统最前端,从而不用覆盖整个磁盘唯一的MBR。
data block
data block用于防止文件内容数据。
Ext2文件系统的block基本限制如下:
- block的大小与数量在格式化完成之后就不能再改变了,除非重新格式化;
- 每个block内最多只能放置一个文件的数据;
- 承上,如果文件大于block的大小,则一个文件会占用多个block数量;
- 承上,如果文件小于block,则该block的剩余容量就不能够再使用了(磁盘空间会浪费)。
inode table(inode表格)
如前所述,inode的内容记录了文件的属性以及该文件实际数据block序号。
系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能开始实际读取block的内容。
- inode结构:
inode本身大小为128bytes,里面有12个直接指向block号码的直接区域,此外还有一个间接区域、一个双间接区域、一个三间接区域。其中,间接区域指定的block并没有存储数据的实际内容,而是将这个block也作为记录block号码的记录区。同理,双间接区域指定的block仅指出下一个记录编号的block在哪里,实际记录的在第二个block中。以此类推,三间接就是利用第三层block来记录编号。
superblock(超级区块)
superblock是记录整个filesystem相关信息的地方,其记录的信息有:
- block与inode的总量;
- 未使用与已使用的inode/block数量;
- block与inode的大小;
- filesystem的挂载时间、最近一次写入数据的时间、最近一次检验磁盘的时间等文件系统的相关信息;
- 一个valid bit数值,若次文件系统已被挂载,则valid为0,若未被挂载则为1。
Filesystem Description(文件系统描述说明)
这个区段可以描述每个block group的开始与结束的block号码,以及说明每个区段分别介于哪一个block号码之间。
block bitmap(区块对照表)
区块对照表用于记录哪些block是空的,哪些block是已占用的。
inode bitmap(inode对照表)
与区块对照表类似,用于记录使用与未使用的inode号码。