Linux文件数据除了文件实际内容外,还含有很多的属性,比如操作权限rwx与文件属性(所有者,群组和时间参数等)
其中权限与属性会放在iNode中,而实际数据则放在data block中,另外还有一个超级块会记录整个文件系统的整体信息,包括inode和data block的使用量等
inode中有文件数据防止的block号码,如果找到文件的inode的话,自然就知道这个文件所放置的数据的block号码,当然就可以读出文件的实际数据了。
这数据该访问的方法称之为索引式文件系统 indexed allocation
其他常用的文件系统有FAT的文件系统,常用于U盘,这种格式的文件系统没有inode的存在,因此,fat没办法将文件的所有block在一开始全部读出,每个block号码都记录在前一个block中。如果一个文件的数据写入block较为分散,那么磁盘磁头将无法再磁盘转一圈能够读到所有数据,因此磁盘会多转几圈才能完整的读取这个文件的内容。
所谓的“碎片整理”,就是文件写入block太过于离散,因此文件读取的性能将会变得很差,可以通过碎片整理景同一个文件的block汇合在一起,FAT系统需要经常碎片整理。而ext2系统格式索引式文件系统不需要。
Linux的ex2文件系统
在格式化的时候去区分为多个块组,每个块组都有独立的inode/block/superrblock系统
data block
在ext2系统中支持的block大小有1KB,2KB,4KB三种。在格式化的时候block的大小已经固定好了。
且,每个block最多只能防止一个文件的数据;若文件大于一个block,一个文件会占用多个block,而文件小于一个block,则block的剩余空间不能够被使用。也就是浪费了。
因此大的block会造成浪费,而过小的block会导致过多的block,而inode也会记录更多的block号码,导致读写性能下降。
因此在进行文件系统格式化时,要想好文件系统的使用情况。
inode
固定大小为128bytes
每个文件只能占用一个inode
如果block特别多,inode怎么储存,因为inode记录一个block号码要花掉4bytes。
系统将inode记录block号码的区域定义为12个直接,一个间接,一个双间接,一个三间接记录区。
间接就是再拿一个block当做记录block号码的记录区,双间接和三间接同理。
这样一来,如果以较小的1kb的block来说,一个inode可以指定16GB的block大小,也就是16GB的文件大小
superblock
记录整个文件系统相关信息的地方,包括有
block和inode的总量
未使用和已使用的inode,block数量
block和inode的大小等