早期没有文件系统存在时,每个文件存在一块连续的扇区上,一个字节的文件也要占用扇区的整数倍,假设一个扇区512字节,文件大小513,那么也需要占2个完整的扇区来存放文件。
上层应用根据文件与扇区目录,向磁头发送读取数据的指令,获取相应文件数据。
后来为了适配不同厂家不同硬盘(每个厂家的扇区大小可能不同),保证兼容性,对存储介质进行了抽象,文件系统产生:
扇区:是磁盘的最小读写单元
块(block):linux下文件系统的最小读写逻辑单元,一个文件最小占用尺寸(一个块大小是扇区的2,4,6,8…倍)
**文件系统映射层:**块与扇区大小的映射关系。
假设linux下的一个块大小为4k:
A厂家扇区大小:512,形成一个块需要8个扇区(映射关系),期间的转换由文件系统映射层完成,用户不需要关系怎么去转换
B厂家扇区大小:2k,形成一个块需要2个扇区(映射关系),期间的转换由文件系统映射层完成,用户不需要关系怎么去转换
块划分太大,一个大小为1字节的文件,却占用了一个一个块的大小,资源浪费,硬件i资源利用率低
块划分太小,一个超大的文件,占用了好多的块,需要读取多个扇区,性能损失,一般往往选择比较折中的方式设置块的大小。
最终使用块(下右)而不使用扇区(下左),就是因为不同厂家的扇区大小可能不同,使用块作为逻辑读写单元,屏蔽了下层硬盘的实现不同,统一了上层读写逻辑接口。