# 外存

:外部存储器。

  • 与内存相比,通常外存的读写速度更慢,但可以在计算机断电后继续保存数据。

# 磁盘

:Disk ,泛指基于磁记录技术存储数据的设备。

  • 按存储介质对磁盘分类:
    • 软磁盘(Soft Disk):是计算机早期的磁盘介质,存储容量小,目前已淘汰,不再使用。因此目前说到磁盘时,一般是指硬盘。
    • 硬磁盘(Hard Disk):简称为硬盘,比如机械硬盘。

# 机械硬盘

:HDD(Hard Disk Drive),简称为硬盘。结构如下:

  • 机械硬盘由多个磁碟组成,磁碟的结构如下图:

    • 磁碟的表面涂有磁性颗粒,通过磁极的方向表示二进制的 0、1 。
    • 磁碟的两面通常都可读写数据,每面各有一个磁头(Head)。
      • 磁头可以转动到磁碟某个位置,根据磁感应,获取此处磁性颗粒的磁极方向,或者改变其方向。
    • 每个磁碟上有多个同心圆,根据半径线分成多个弧道,称为磁区、扇区(Sector)。
      • 每个扇区存储 512Bytes 的数据。
      • 实际上外圈的磁区容量较大,浪费了一些空间。
    • 同一圈的扇区组成一条磁轨、磁道(Track)。
    • 如果有多个磁碟叠在一起,则所有碟上的相同位置的磁轨组成一个磁柱、扇面(Cylinder)。
    • BIOS 会自动检测硬盘,计算出 总容量 = Head 数 × Cylinder 数 × Sector 数 × 512 Bytes
      • BIOS 采用十进制计算容量,因此它的 1KB = 1000B 。

# 固态硬盘

:SSD(Solid State Disk),是基于 DRAM 或 NAND Flash 存储数据。

  • 不是采用磁性颗粒存储数据,严格来说不属于磁盘,只是通常当作磁盘使用。
  • SSD 相比 HDD 的优点:
    • SSD 的读写速度快多倍。
    • SSD 的硬件体积更小。
    • SSD 更能抵抗物理碰撞。
    • SSD 运行安静。而 HDD 的磁头机械运动,会产生一些噪音。
    • HDD 写入一个文件时,如果存储到多块地址不连续的空间,则称为几块文件碎片。有的软件提供了整理文件碎片的功能,可以将碎片化的文件重新写入磁盘,保存到一组地址连续的空间,从而能顺序读写,提高读写速度。
      • 而 SSD 写入一个文件时,可以存储到任意空闲的 block 空间,因此不存在文件碎片的问题。

# 磁盘速度

  • 磁盘的读写速度,主要受以下因素影响:

    • 存储介质
      • 比如固态硬盘比机械硬盘快,内存比固态硬盘快。
    • 寻址方式
      • 顺序寻址:指访问一组地址连续的存储空间。
        • 主要的性能指标是 MBPS :读写一个几 GB 的大文件时,每秒读写的字节量。
      • 随机寻址:指访问一组地址不连续的存储空间。
        • 主要的性能指标是 IOPS :读写大量 4KB 的小文件时,每秒读写的文件数量。
  • 磁盘的读写速度大概为以下数量级:

    - HDD SSD
    顺序读写 100 MB/s 300 MB/s
    随机读写 0.5 MB/s 30 MB/s
    • 在顺序读写时,HDD 比 SSD 慢几倍。在随机读写时,HDD 比 SSD 慢两个数量级。
    • HDD 的随机读写很慢,比顺序读写慢了两个数量级。因为每处理一个文件,都需要磁头移动寻址。
    • SSD 不需要磁头移动寻址,而是对 NAND 芯片直接寻址。不过随机读写依然比顺序读写慢一个数量级,因为每处理一个文件,都需要调用磁盘接口、寻址。

# 磁盘接口

  • IDE(Integrated Device Electronics ,集成设备电路)
    • IO 速度可达 100 MB/s 。
    • 采用并口排线,容易受干扰,不支持热插拔。
  • SATA(Serial ATA)
    • 采用串口排线,抗干扰,支持热插拔。
    • IDE 是并口 ATA ,而 SATA 是串口 ATA 。
    • SATA 3.0 标准的 IO 速度可达 600 MB/s 。
    • SATA 接口可以接收多个读写磁盘的任务,放在队列中排队处理。
      • HHD 的每面磁碟只有一个磁头,因此处理多个文件时只能串行读写。
      • SSD 支持同时访问多个 NAND 芯片,因此可以从 SATA 接口获取多个任务,并行读写。
  • SCSI(Small Computer System Interface ,小型计算机系统接口)
    • 性能较好,价格较贵。
  • SAS(Serial Attached SCSI)
    • 新一代的 SCSI 技术,向下兼容 SATA 接口,但反之不兼容。
    • IO 速度可达 6 GB/s 。

# 主引导扇区

:每块硬盘的第一个扇区又称为主引导扇区,它不属于任何分区,不会被格式化分区的命令影响。

  • 主引导扇区的大小为 512 Bytes ,前 446 Bytes 存储一段代码,称为主引导记录;后面的 64 Bytes 存储硬盘分区表。

  • 主引导记录(Master Boot Record ,MBR)

    • :又称为启动引导程序(Bootloader)。
    • 用于在开机时,从硬盘读取 Linux kernel 文件,运行它。
  • 硬盘分区表(Disk Partition Table ,DPT)

    • :用于存储硬盘的物理分区信息。
    • 比如记录第四个分区是从第 301 号磁柱到第 400 号磁柱,挂载到目录 /dev/hda4 。
    • 将硬盘分区后,不同分区的内容互不影响,可以分别管理,而且磁头读取数据时的搜寻范围变小了。

# BIOS

:基本输入输出系统(Basic Input Output System)

  • 负责在计算机开机时初始化硬件设备、引导操作系统。
  • 是一组固化在 ROM 中的程序,包括基本输入输出程序、开机后自检程序、系统自启动程序等。

BIOS 常见的启动模式:

  • Legacy

    • :传统的 BIOS 启动模式。
    • 使用 MBR 扇区存储 Bootloader 。
    • 采用 DPT 分区表,这是上世纪 80 年代微软 MS-DOS 的磁盘方案,现在逐渐被 GPT 取代。
      • 最多只能存储 4 个分区的信息,每个分区的最大容量为 2TB 。
      • 通常将前三个分区用作主分区,将第 4 个分区 /dev/hda4 用作扩展分区,存储额外的分区信息,从而可以分出无数个逻辑分区(编号从 5 开始)。
      • 因此,磁盘总容量 = 主分区容量 + 扩展分区容量,扩展分区容量 = 所有逻辑分区容量之和 。
  • UEFI(Unified Extensible Firmware Interface)

    • :目前流行的 BIOS 启动模式,只支持 64 位的系统。
    • 使用 ESP 扇区(EFI system partition)存储 Bootloader 。
    • 采用 GPT 分区表(Globally Unique Identifier Partition Table)。
      • 分区信息存储为 efi 文件。
      • 支持划分无数个分区,每个分区的最大容量为 18EB 。
    • 计算机开机时不需要进行自检,而是直接读取 Bootloader ,因此开机速度更快。

# RAID

:独立冗余磁盘阵列技术(Redundant Array of Independent Disks),将多个磁盘设备组合成一个磁盘阵列使用。

常见的 RAID 方案:

  • RAID 0
    • :将数据拆成几份,分别写入 n 个磁盘设备。
    • 这样读写速度提升到 n 倍,但不能备份数据,只要有一个磁盘受损,数据就会无法恢复。
  • RAID 1
    • :将数据拷贝几份,分别写入 n 个磁盘。
    • 这样能备份 n 份数据。但读写速度不变,增加了 CPU 写数据时的工作量,增加了磁盘成本。
  • RAID 5
    • :将数据的奇偶校验信息保存到其它磁盘设备中。当当前磁盘受损时,可以尝试用奇偶校验信息来恢复数据。
  • RAID 10
    • :按 RAID 0 技术部署一组磁盘,并给每个 RAID 0 磁盘部署一个 RAID 1 磁盘做备份。
    • 这样兼容了 RAID 0 和 RAID 1 的优点,能提升读写速度,备份 1 份数据,性价比较好。

# CD

:光盘(Compact Disc),一种用激光存储数据的设备。

  • 光盘技术的发展。
    • CD :80 年代开始流行,取代了传统的黑胶唱片、软盘。
    • VCD(Video Compact Disc):一种存储视频信息的光盘。
    • DVD(Digital Video Disc):一种存储数字视频的光盘,容量更大,
    • BD(Blue-ray Disc):蓝光光盘,一种用蓝色激光存储数据的大容量光盘。
  • 根据是否可擦写分类:
    • 不可擦写光盘:只能写入一次数据,写入后只能读取,比如 CD-ROM、DVD-ROM 。
    • 可擦写光盘:比如 CD-RW、DVD-RAM 。