Linux系统文件系统工作原理

时间:2022-03-17 03:56:35

            Linux文件系统通过为每个文件分配文件块的方式把数据存储在存储设备中。这样就要维护每一个文件的文件块的分配信息,而分配信息本身也要存在磁盘上。不同的文件系统用不同的方法分配和读取文件块。Linux下两种常用的文件系统的分配策略块分配(blockallocation)和扩展分配(extent allocation)。块分配当文件变大的时候每一次都为这个文件分配磁盘空间,而扩展分配则是当某个文件的磁盘空间不够的时候,一次性为它分配一连串连续的块。

             传统的Unix文件系统使用的块分配的机制提供了一个灵活而高效的文件块分配策略。磁盘上的文件块根据需要分配给文件,这样可以减少存储空间的浪费。当一个文件慢慢变大的时候,就会造成文件中文件块的不连续。这就导致了过多的磁盘寻道时间,当读取一个文件的时候有可能要随机而不是连续地读取文件块,这样的效率很低。可改善块分配策略,实现块的连续分配,来减少磁盘的寻道时间。但是,当整个文件系统的文件块的分配形成碎片的时候,就再也不可能连续分配了。

             采用块分配方式导致系统效率低下,因为每一次当文件扩展的时候,块分配的算法就要写入一些关于新分配的块所在位置的信息。如果每一次文件扩展的时候只增加一个块,那么就需要很多额外的磁盘I/O用来写入文件块的结构信息。文件块的结构信息也就是上面说的meta-data。meta-data总是一起同时地写入存储设备的,这就意味着改变文件大小的操作要等到所有的meta-data的操作都完成之后才能进行。因此,meta-data的操作会显著地降低整个文件系统的性能。

             对块分配而言,每一次文件增大时都要为该文件分配磁盘空间,而扩展分配则是当某个文件的磁盘空间不足时,一次性为它分配一连串连续的块。当文件被创建时,很多文件块同时被分配,当文件扩展时,也一次分配很多块。Meta-data在文件创建时写入,当文件的大小没有超过所有已分配文件块的大小时,就不用写入meta-data。扩展分配这种方式可以优化磁盘寻道的方式,可以成组地分配块,有利于一次写入一大批数据到存储设备中,从而减少了scsi设备写数据的时间。基于扩展分配的文件系统在读取顺序文件时具有较好的性能,因为文件块都是成组连续分配的。但如果I/O操作是随机的,则基于扩展分配的文件系统的优势就和块分配很类似了。