数据库的数据存储在文件系统中。
文件系统是操作系统用来明确存储设备或分区上的文件 的方法和数据结构(存储设备常见的是磁盘,也有基于NAND Flash的固态硬盘)
磁盘上数据必须用一个三维地址唯一标示:柱面号、盘面号、块号(磁道上的盘块)。
硬盘只是磁盘的一种,或说是经典代表,以下通过硬盘模型图讲解磁盘中的各个概念。
硬盘整体模型图
硬盘模型图
磁盘重点概念
- 盘片(platter):硬盘中承载数据存储的介质
- 硬盘一般由多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。
- 磁头(head):通过磁性原理读取磁性介质上数据的部件
- 磁道(track):当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道
- 扇区(sector):磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区,同一块硬盘上的扇区大小是一致的
- "每个磁道的扇区数一样的"说的是老的硬盘,外圈的密度小,内圈的密度大(简单理解就是,磁盘存储媒介为
- 磁性记忆材料,在内圈涂的密度高),故每圈可存储的数据量是一样的。新的硬盘数据的密度都一致,这样磁道的周长越长,扇区就越多,存储的数据量就越大。
- 柱面(cylinder):在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面
物理扇区与逻辑扇区
物理扇区(physical sector)与逻辑扇区(logical sector)
近年来,为了追求更高的硬盘容量,便出现了扇区存储容量为2048、4096等字节的硬盘,我们称这样的扇区为"物理扇区"。这样的大扇区会导致许多兼容性问题,有的系统或软件无法适应。为了解决这个问题,硬盘内部将物理扇区在逻辑上划分为多个扇区片段并将其作为普通的扇区(一般为512字节大小)报告给操作系统及应用软件。这样的扇区片段我们称之为“逻辑扇区”。实际读写时由硬盘内的程序(固件)负责在逻辑扇区与物理扇区之间进行转换,上层程序“感觉”不到物理扇区的存在。
逻辑扇区是硬盘可以接受读写指令的最小操作单元,是操作系统及应用程序可以访问的扇区,多数情况下其大小为512字节。我们通常所说的扇区一般就是指的逻辑扇区。物理扇区是硬盘底层硬件意义上的扇区,是实际执行读写操作的最小单元。是只能由硬盘直接访问的扇区,操作系统及应用程序一般无法直接访问物理扇区。当要读写某个逻辑扇区时,硬盘底层在实际操作时都会读写逻辑扇区所在的整个物理扇区。
磁盘容量的计算
- 旧式——非ZBR区位记录(不同磁道扇区数相同)
存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
比如上图最右边硬盘容量:6 * 7 * 12 * 512 = 258048 byte - 新式——ZBR区位记录(不同磁道扇区数不同)
块(Block)/簇(Cluster)
块/簇两者指的是同一个逻辑上的概念,只是在Linux与Windows中的称呼不同。
- 块/簇 是操作系统中最小的逻辑存储单位。操作系统与磁盘打交道的最小单位是块/簇。
- 在Windows下如NTFS等文件系统中叫做簇;在Unix和Linux下如Ext4等文件系统中叫做块(block)。
- 每个簇或者块可以包括2、4、8、16、32、64…2的n次方个扇区。
块/簇 用来干什么的
磁盘的最小单位是扇区,操作系统使用的是 块/簇 作为IO的基本单位。
- 读取方便:扇区容量小,数据多会加大寻址难度。操作系统将相邻的扇区组合一起形成块,再对块整体操作
- 分离对底层的依赖:操作系统忽略对底层物理存储结构的设计。通过虚拟出来磁盘块的概念,在系统中认为块是最小的单位
扇区是对硬盘而言,块是对文件系统而言,出于不同的需要。
查看块/簇的大小
不同文件系统中block的大小不一样。
Windows:(使用管理员命令提示行)
fsutil fsinfo ntfsinfo E:Linux:
stat /home | grep "IO Block"
如下所示,Windows下E盘的Cluster的大小为4Kb大小,如下所示:
页(Page)
操作系统经常与内存和硬盘这两种存储设备进行通信,类似于“块”的概念,都需要一种虚拟的基本单位。与内存操作,是虚拟一个页的概念来作为最小单位。与硬盘打交道,就是以块为最小单位。
扇区、块/簇、页的关系
- 扇区: 硬盘的最小读写单元
- 块/簇: 是操作系统针对硬盘读写的最小单元
- 页: 是内存与操作系统之间操作的最小单元。
- 扇区 <= 块/簇 <= 页