硬盘最底层的读写IO一次是一个扇区512字节 ,如果要读写大量文件,以扇区为单位肯定很慢很消耗性能,所以硬盘使用了一个称作 逻辑块 的概念。逻辑块是逻辑的,由 磁盘驱动器负责维护和 *** 作 ,它并非像扇区一样物理划分的。 一个逻辑块的大小可能包含一个或多个扇区 , 每个逻辑块都有唯一的地址,称为LBA 。有了逻辑块之后, 磁盘控制器对数据的 *** 作就以逻辑块为单位 ,一次读写一个逻辑块,磁盘控制器知道如何将逻辑块翻译成对应的扇区并读写数据。
Linux *** 作系统层次,通过 文件系统提供了一个也称为块的读写单元 ,文件系统数据块的大小一般为1024bytes(1K)或2048bytes(2K)或4096bytes(4K)。 文件系统数据块 也是逻辑概念,是 文件系统层次 维护的,而 磁盘上的逻辑数据块 是由 磁盘控制器 维护的,文件系统的IO管理器知道如何将它的数据块翻译成磁盘控制器维护的数据块地址LBA。
对于使用文件系统的IO *** 作来说,比如读写文件,这些IO的基本单元是文件系统上的数据块,一次读写一个文件系统数据块。比如需要读一个或多个块时,文件系统的IO管理器首先计算这些文件系统块对应在哪些磁盘数据块,也就是计算出LBA,然后通知磁盘控制器要读取哪些块的数据,硬盘控制器将这些块翻译成扇区地址,然后从扇区中读取数据,再通过硬盘控制器将这些扇区数据重组写入到内存中去。
文件系统block的出现使得在文件系统层面上读写性能大大提高,也大量减少了碎片。但是它的副作用是可能造成空间浪费。由于文件系统以block为读写单元,即使存储的文件只有1K大小也将占用一个block,剩余的空间完全是浪费的。在某些业务需求下可能大量存储小文件,这会浪费大量的空间。
尽管有缺点,但是其优点足够明显,在当下硬盘容量廉价且追求性能的时代,使用block是一定的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)