Linux基础知识 ·

Linux磁盘基础

[隐藏]

磁盘组成

  • 机械硬盘为圆形盘片;
  • 盘片转动与机械手臂带动磁头读写数据;
  • 盘片每条同心圆划分为磁道;
  • 磁道分割的扇形区为扇面;
  • 扇面上的一段磁道为扇区,扇区为最小物理存储单位(512bytes);
  • 第一块扇区存储硬盘主引导记录(MasterBootRecord,MBR【446bytes】)及分区表(panrtition table【64bytes】);
  • 由于操作系统无法对数目众多的扇区进行寻址,所以操作系统就将相邻的扇区组合在一起,形成一个簇,然后再对簇进行管理。每个簇可以包括2、4、8、16、32或64个扇区。

MBR标准

硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和分区有效标志。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为0xAA55或0x55AA,这取决于处理器类型[2]  ,如果是小端模式处理器(如Intel系列),则该值为0xAA55;如果是大端模式处理器(如Motorola6800),则该值为0x55AA。

  • 由于MBR标准的分区表只有64字节,因此只能记录四条分区记录,则主分区与扩展分区最多可以有4个;
  • 扩展分区至多一个(操作系统限制);
  • 逻辑分区是由扩展分区划分出来的
  • 扩展分区只记录逻辑分区分区表无法格式化

GPT标准

由于MBR标准限制,硬盘最大识别容量为2TB,并且主分区加扩展分区不能超过4个,由此带来硬盘标准的升级。

  • 在GPT硬盘中,分区表的位置信息储存在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头。
  • 传统MBR信息存储于LBA 0,GPT头存储于LBA 1,接下来才是分区表本身。64位Linux操作系统使用16,384字节(或32扇区)作为GPT分区表,接下来的LBA 34是硬盘上第一个分区的开始。
  • 为了减少分区表损坏的风险,GPT在硬盘最后保存了一份分区表的副本。
  • 分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。在使用64位Linux的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)

文件系统基础

硬盘分区后一般并不能直接存储数据,计算机能够识别的只有0和1转换的电磁信号,而我们很难通过二进制来识别数据,因此为了方便使用,我们需要通过文件系统作为中间层来管理数据的存储与读取,文件系统经过多年的演变与进化衍生出了很多版本。

文件系统通常会将文件的权限与文件的属性放于iNode中,为实际数据存放于数据块中,而超级块(superblock)则记录文件系统的整体信息,包括iNode与block的使用量等等。

  • super block:文件系统整体信息,iNode/block的总量、使用量、剩余量、文件系统格式与相关信息等。
  • iNode(128bytes):文件属性,一个文件占一个iNode,同时记录存储文件数据的block号码。若文件过大iNode会用block记录block号码。
  • block(1K|2K|4K):实际存储文件数据内容,若文件过大会占用多个,文件系统规划分配。(磁盘碎片整理便是将分散的block内容汇聚一起,提高文件访问速度。)

而且为了数据的安全,现在大多数的文件系统都会支持日志系统,在数据修改时记录其信息,异常终止后便于数据修复。

磁盘每个分区都需要分配一个编号,在Linux中SCSI、SATA、USB等设备在系统中是以sd[a-z]方式命名。

分区写入文件系统后还不能使用,每个文件系统都记录的有各自的iNode等信息,我们需要将文件系统链接的目录才能够提供使用,而文件系统链接到目录的动作,我们则称为挂载。

参与评论