磁盘构造和磁盘分区


PC 机的软盘控制子系统有软盘片和软盘驱动器组成。由于软盘可以存储程序和数据并且携带方便,因此长期以来软盘驱动器是 PC 机上的标准配置之一。
linux磁盘 硬盘也是由盘片和驱动器组成,但是通常硬盘的金属盘片固定在驱动器中,不可拆卸。
​由于硬盘具有很大的存储容量,并且读写速度很快,因此它是 PC机中最大容量的外部存储设备,通常也被称为外存。
软盘和硬盘都是都是利用磁性介质保存信息,具有类似的存储工作方式。因此这里我们以硬盘为例简要说明它们的工作原理。
在盘片上存储数据的基本方式是利用盘片表面的一层磁性介质在磁化后的剩磁状态。软盘通常使用聚脂薄膜作基片,而硬盘片通常使用金属铝合金作基片。
一张软盘中含有一张聚脂薄膜圆盘片,使用上下两个磁头在盘片两面读写数据,盘片旋转速率大约在 300 转/分钟。硬盘中通常起码包括 2 张或者更多张金属片,因此具有多个读写磁头。例如,对于包含 2 个盘片的硬盘中就具有 4 个物理磁头,含有 4 个盘片的硬盘中有 8 个读写磁头。如下图所示,硬盘旋转速率很快,通常在 4500 转/分钟到 10000 转/分钟,因此硬盘数据的传输速度通常可达几十兆/秒。
位于磁盘表面的磁头上分别有一个读线圈和写线圈。在读数据操作过程中,磁头首先移动到旋转着的磁盘某个位置上。由于磁盘在旋转,磁介质相对磁头作匀速运动, 因此磁头实际上在切割磁介质上的磁力线。从而在读线圈中因感应而产生电流。根据磁盘表面剩磁状态方向的不同,在线圈中感应产生的电流方向也不同,因此磁盘上记录着的 0 和 1 数据就被读出,从而可从磁盘上顺序读出比特数据流。 linux磁盘组成

​由于磁头读取的每个磁道上都有存放信息的特定格式,因此通过识别所读比特数据流中的格式,磁盘电路就可以区分并读取磁道上各扇区中的数据,如下图所示。 其中,GAP 是间隔字段,用于起隔离作用。通常 GAP 是 12 字节的 0。每个扇区地址场的地址字段存放着相关扇区的柱面号、磁头号(面号)和扇区号,因此通过读取地址场中的地址信息就可以唯一确定一个扇区。 硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。 盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。 如下图: linux磁盘组成

磁盘内部结构实物如下图所示: linux磁盘组成

下图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。 扇区是磁盘的最小组成单元,通常是512字节。(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是4096字节) linux磁盘组成

硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。
磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。
如下图: linux磁盘组成

磁盘容量计算

存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
上图中磁盘是一个 3个圆盘6个磁头,7个柱面(每个盘片7个磁道) 的磁盘,每条磁道有12个扇区,所以此磁盘的容量为:
存储容量 6 * 7 * 12 * 512 = 258048
每个磁道的扇区数一样是说的老的硬盘,外圈的密度小,内圈的密度大,每圈可存储的数据量是一样的。新的硬盘数据的密度都一致,这样磁道的周长越长,扇区就越多,存储的数据量就越大。

磁盘读取响应时间

读写一次磁盘信息所需的时间可分解为:寻道时间、延迟时间、传输时间。
寻道时间:磁头从开始移动到数据所在磁道所需要的时间,寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms,一般都在10ms左右。
旋转延迟:盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间,旋转延迟取决于磁盘转速。普通硬盘一般都是7200rpm,慢的5400rpm。
数据传输时间:完成传输所请求的数据所需要的时间。
为提高磁盘传输效率,软件应着重考虑减少寻道时间和延迟时间。我们最关心的应该只有两个:寻道时间;旋转延迟。

块/簇

磁盘块/簇(虚拟出来的)。 块是操作系统中最小的逻辑存储单位。操作系统与磁盘打交道的最小单位是磁盘块。 通俗的来讲,在Windows下如NTFS等文件系统中叫做簇;在Linux下如Ext4等文件系统中叫做块(block)。每个簇或者块可以包括2、4、8、16、32、64…2的n次方个扇区。
为什么存在磁盘块?
读取方便:由于扇区的数量比较小,数目众多在寻址时比较困难,所以操作系统就将相邻的扇区组合在一起,形成一个块,再对块进行整体的操作。
分离对底层的依赖:操作系统忽略对底层物理存储结构的设计。通过虚拟出来磁盘块的概念,在系统中认为块是最小的单位。

页page

操作系统经常与内存和硬盘这两种存储设备进行通信,类似于“块”的概念,都需要一种虚拟的基本单位。所以,与内存操作,是虚拟一个页的概念来作为最小单位。 与硬盘打交道,就是以块为最小单位。

扇区、块/簇、page的关系

扇区: 硬盘的最小读写单元
块/簇: 是操作系统针对硬盘读写的最小单元
page: 是内存与操作系统之间操作的最小单元。
扇区 <= 块/簇 <=page

一.磁盘结构与分区

我们在 磁盘构造和磁盘分区 一文中已经详解介绍了磁盘的组成结构与分区的概念。 这里再总结一下磁盘结构和分区的相关内容。
传统的机械磁盘的物理组成结构包括:
磁盘物理结构:
- 磁头(Head):代表有多少层盘面
- 磁道(Track)
- 柱面(Cylinder):每一个盘面上有多少圈磁道
- 扇区(Sector):一圈磁道上有很多扇区,每个扇区有512字节,第一个扇区称为引导扇区。
- fdisk 可以看到每一块盘上述结构的数量。fdisk 看到磁盘的大小 = (盘面 * 柱面 * 扇区 * 512bytes)
圆形的磁盘片,用来存储数据;
机械手臂上的读写磁头,用来读取磁盘中的数据,或者将数据写入磁盘;
主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据。
扇区(Sector)为最小的物理储存单位,且依据磁盘设计的不同,目前主要有 512bytes 与 4K 两种格式;
将扇区组成一个圆,那就是磁柱(Cylinder);
早期的分区主要以磁柱为最小分区单位,现在的分区通常使用扇区为最小分区单位(每个扇区都有其号码喔,就好像座位一样);
磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表。
MBR 分区表中,第一个扇区最重要,里面有:(1)主要开机区(Master boot record, MBR)及分区表(partition table), 其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。
GPT 分区表除了分区数量扩充较多之外,支持的磁盘容量也可以超过 2TB。
我们知道linux中的设备都被抽象为设备文件,所以磁盘在linux中也有对应的设备文件, 一般磁盘的设备文件为/dev/sd[a-p],例如第一个磁盘的设备文件名为/dev/sda,第二个磁盘的设备文件名为/dev/sdb。 而磁盘中的分区也被抽象为设备文件,磁盘分区的设备文件名通常为/dev/sda[1-128],也就是在磁盘设备文件名的基础上加上数字。
1.分区结构
磁盘通过分区,可以实现多个文件系统,多个操作系统,快速的IO。物理上分区是通过柱面来进行分割的。目前最为广泛的还是MBR分区,但是 MBR 最大只支持2T 磁盘,且只支持4个主分区,所以未来将逐渐使用 GPT 分区。 MBR 分区
MBR (Master Boot Record) 是指磁盘第一个扇区,包括引导程序、MBR分区表、MBR结束标志3部分构成,一共占用512个字节。
主引导程序(bootloader),446字节,有grub(linux),LILO,BOOTMGR等,提供给用户可以启动的操作系统,每一个分区开头也有一个引导程序部分, 通过主引导找到分区上的引导程序可以实现多系统。
分区表,64字节,每一个分区需要16个字节。MBR 只能有4个主分区,或者3+1扩展分区。
每一个分区表16字节中有4个字节来记录扇区号,每个分区最大支持2T,2^(4*8)*512byte=2T,通过4K大小的扇区可以解决。
结束标志2字节,55aa = (0101 0101 1010 1010 )
GPT 分区
GPT 分区(GUID Partition Table)全称全局唯一标识分区表,是EFI标准一部分,用来代替bios以及MBR。GPT分区使用64bit记录逻辑地址,8 ZiB个扇区大小的磁盘。
- GPT 使用逻辑区块地址(LBA 512字节一个,一个扇区大小)取代了早期的CHS寻址方式。在非传统硬盘上,例如SSD 有可能LBA 是2K/4K。
- 传统 MBR 信息存储于LBA 0,引导启动程序也在这里,GPT 头存储于LBA 1,接下来才是分区表本身。
- GPT 分区表大小不是固定的,64位Windows操作系统使用16,384字节(或32扇区)作为GPT分区表(最多128个分区=16,384/128),
- 接下来的LBA 34是硬盘上第一个分区的开始。

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读