一、文件系统特性
文件系统运作方式
这与操作系统的文件数据有关。较新的操作系统的文件数据除了文件实际内容,通常会含有非常多的属性,例如Linux操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。文件系统通常会将这两部分的数据存放在不同的区块,权限与属性放置到inode,实际数据放在data block区块中。此外,还有一个超级区别会记录文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。
- inode:记录文件的属性,一个文件占用1个inode,同时记录此文件的数据所在的block号码
- block:实际记录文件的内容,若文件较大,则会占用多个block
inode存放block号码的好处:磁盘能够在较短时间内读取出全部的数据,读写效率高
这种数据存取的方法称为索引式文件系统
碎片出现的原因:文件写入的block太过离散,使得文件读取的效能将变得很差。FAT文件系统需要碎片整理,而Ext2索引式文件系统基本不用。
FAT这种格式的文件系统没有inode,所以没办法一下子读取出来,每个block号码都记录在前一个block当中。若记录分散,则需要多次转磁盘,读取效率差。
二、Linux的EXT2文件系统(inode)
文件系统一开始就将inode与block
规划好了,但是若文件系统GB,则将所有的inode与block放在一起是不明智的,为此将文件系统格式化为多个区块
data block(数据块)
原则上,block的大小与数量在格式化完就不能再改变了(除非重新格式化)
每个block内自多只能放置一个文件的数据
如果文件大于block,则一个文件用多个block块
若文件小于block,则block剩余容量不能再被使用(磁盘空间浪费)
inode table(inode 表格)
inode数量与大小在格式化时已经固定
每个inode大小固定为128bytes
每个文件都仅会占用一个inode而已
文件系统能建立的文件数目与inode数量有关
系统读取文件时,先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能开始实际读取block的内容
每个inode是128bytes,记录一个block用掉4byte
每个inode是128bytes,里面有12个直接指向block号码的对照,能直接取得block号码。
间接是再拿一个block来当作记录block号码的记录区,若文件太大,则用间接的block来记录编号。
inode剩余部分
- block bitmap(区块对照表):比如新增文件用到block,需要知道哪些block是空的
- inode bitmap:与上类似
- superblock:记录此filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及档案系统的格式与相关信息等;
- Filesystem Description:每个区组的开始、结束的block号码以及每个区段(superblock、bitmap、inodemap、data block)分别介于哪一个block号码之间。
目录
创建目录,文件系统会分配一个inode与至少一块block给该目录。其中,inode记录该目录的相关权限与属性,并可记录分配到的block号码;block则记录在该目录下的文件名占用的inode号码数据。所以,inode并没有记录文件名:
inode并不记录文件名,文件名记录在目录的block中。所以新增/删除/更改文件名与目录的w权限有关。
因为文件名记录在目录的block块中,因此当我们要读取某个文件时,就必会经过目录的inode与block,然后才能找到待读取的inode号码,最终才会读到正确的文件的block内的数据。
EXT2/EXT3/EXT4文件的存取与日志式文件系统的功能
新建文件或目录