Skip to content

Latest commit

 

History

History
80 lines (56 loc) · 4.15 KB

02、磁盘格式与引导.md

File metadata and controls

80 lines (56 loc) · 4.15 KB

02 磁盘格式与引导

Linux 设备挂载位置

设备类型 设备名称
SCSI / SATA / USBDrive /dev/sd[a-p]
USB 接口的打印机 /dev/usb/lp[0-15]
鼠标 /dev/input/mouse[0-15]
CDROM / DVDROM /dev/scd[0-1]
当前 CDROM/DVDROM /dev/cdrom

其他默认的设备名称:major number - Kernel.org

磁盘分割原理

  1. 盘面
  2. 磁道 track :每个磁盘上的同心圆
  3. 磁柱 cylinder :若有多块盘面组成磁盘,则同一垂直位置上的磁道组成磁柱
  4. 磁道扇区 sector :每个磁道上的最小分区单元
  5. cluster :数个扇区组成一个最小的逻辑单元
  • MBR 分区中,每个 sector 固定为 512byte 大小
  • GPT 分区中,每个 sector 的大小可以为 4kbyte 大小

每块磁盘的 第一个扇区 记录了磁盘的重要信息
在以 MBR(Master Boot Record) 作为分区形式的磁盘,第一扇区记录了中记录了 启动信息磁盘分区表
其中启动信息占用 446 bytes,磁盘分区表占用 64 bytes

MBR 的磁盘第一个扇区的分区表可以记录 4 个分区表,每个分区表都记录了各自的 起始磁柱的编号结束磁柱的编号
在 MBR 磁盘中,可以使用 EBR(Extended Boot Record) 来增加 逻辑分区 以拓展分区数量
EBR 信息被记录在每个逻辑分区的分区头部 一般来说,受到操作系统的限制,一块硬盘只能有一个扩展分区

在 Linux 中,对于 MBR 类型的硬盘

/dev/sd[a-p][1-4] 是保留给主分区的
/dev/sd[a-p][5-] 是给逻辑分区使用的

GPT(GUID partition table)

为了兼容 512 bytes 和 4 kbytes 大小的硬盘,GPT 分区表使用 LBA(Logical Block Address) 来定义磁盘的位置

  1. LBA 从 0 开始编号,即 LBA[0-]
  2. LBA 默认将扇区分作 512 bytes 大小
  3. LBA 使用硬盘的 头部 34 块区块 来说记录分区
    同时使用硬盘的 最后 33 块区块 来备份分区表
  • LBA 0 作为 MBR 磁盘的兼容区块(Rpotective MBR) 而存在,首先是放入了 引导程序,接着在后面放入了 GPT 磁盘的标记
    如果引导程序不识别GPT磁盘标记,就不会接着执行下面的命令
  • LBA 1 记录了硬盘的可用空间、分区表自身的大小、分区表备份的位置、分区表的校验码,如果分区表的的校验值与校验码不一致,就会从备份区恢复分区表
  • LBA [2-33] 记录了实际的分区位置,默认情况下,每个 LBA 区块可以记录 4 个分区位置
    每个分区记录占用128byte,其中有64byte用来记录开始与结束的扇区号

计算机启动流程

  • Legacy BIOS 搭配 MBR

    1. BIOS 识别硬件设备与启动硬盘
    2. 从启动硬盘的第一个扇区读取启动程序(boot loader
    3. 从 boot loader 中启动引导菜单、引导系统核心文件或者启动其他启动器
  • Legacy BIOS搭配GPT

    1. BIOS 识别硬件设备与启动硬盘
    2. 从启动硬盘的 LBA 0 读取启动程序(boot loader)
    3. 从 boot loader 中启动引导菜单、引导系统核心文件或者启动其他启动器

boot loader 的引导菜单将会指向 扇区内的引导文件下一个系统的引导扇区,再从应道扇区指向对应的引导文件

对于 MBR 磁盘而言,每个分区都具有一个 Boot Sector

  • UEFI BIOS搭配GPT
    与Legacy BIOS搭配GPT类似

    注意部分UEFI BIOS会开启secure boot来保证引导的系统被 Microsoft 签名 过的,会导致部分 Linux 系统不能正确引导,需要关闭后才能正常使用

磁盘文件的获取——挂载(mount

挂载就是将某一个磁盘分区制定到一个路径下面,这样这个路径就是用户访问这个磁盘分区上的文件的顶层目录

在 Linux 中,必须有一个分区挂载到 根目录 / 下,如果有其它的分区,则这些分区需要被分别挂在至不同的文件夹中