磁盘是数据存储的常见介质。本文整理 Linux 系统下磁盘相关的概念。
磁盘存储结构
磁盘结构
存储容量 = 磁头数 × 柱面数 × 每个磁道的扇区数 × 每扇区字节数 即:容量 = heads * cylinders * sectors * 512
需注意现代硬盘数据的密度都均匀一致,这样越是外圈的磁道(track)扇区数就越多,存储的数据量就越大。
磁盘寻址方式
- C/H/S(Cylinder/Head/Sector)
- 老式硬盘容量较小,每磁道扇区数相等,内外磁道扇区密度不同,造成空间浪费
- LBA(Logical Block Address)
- 把所有物理扇区按规则看做是一个线性编号的扇区
- 用一个序数,即 LBA 地址即可确定一个惟一的物理扇区
- 即 LBA 是逻辑地址,C/H/S 是物理地址
- 为了兼容老式 BIOS,由新式硬盘内部地址转换器实现 CHS 地址和 LBA 地址的转换
磁盘数据加载耗时
磁盘读取数据的耗时主要在以下各方面:
耗时原因 | 说明 |
---|---|
寻道时间 | 把磁头移动到数据所在磁道位置耗时 |
旋转延迟 | 移动具体磁道至磁头位置耗时,主要取决于转速 |
数据传输 | 完成数据传输所需时间 |
Linux 下的磁盘
Linux 操作系统基于一切都是文件的理念,对磁盘等硬件设备进行了抽象处理。
Linux 内核的设备抽象
Linux 内核将设备分为三类:
设备类型 | 说明 | 举例 |
---|---|---|
字符设备 | 1.顺序访问 2.以字符为基本单位 3.无缓存 | 常见的外设 |
块设备 | 1.随机访问 2.以块为存储的基本单位 3.有缓存 | 常见的存储设备 |
网络设备 | 将外通信抽象为设备机制,采用 socket 实现 | socket + 设备驱动 + 网络协议 |
每一个字符设备或块设备都在 /dev 目录下对应一个设备文件。通过设备文件(或称设备节点)来使用驱动程序操作字符设备和块设备。
存储概念
概念 | 说明 | 大小 |
---|---|---|
扇区 | sector,磁盘存储数据最小单元 | 512 bytes |
块/簇 | (widows/linux) 文件系统最小单元 | 4K bytes |
Page | 内存与操作系统交互的最小单元 |
注:因此一个实际大小为 1 字节的文件,在文件系统中却占用了 4K(4096) 字节的空间。