Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区

第一部分Linux的规则安装_第2章主机规划与磁盘分区

2.1Linux与硬件的搭配

与Windows系统完全不一样,各个组件或设备在Linux下都是一个文件,要摒弃之前对各种设备名称的概念

2.1.1 认识计算机的硬件设备

2.1.2 选择与Linux搭配的主机设备

2.1.3 各硬件设备在Linux中的文件名

设备 设备在Linux中的文件名
SCSI、SATA、USB磁盘驱动器 /dev/sd[a-p]
U盘 /dev/sd[a-p](与SATA相同)
Virto接口 /dev/vd[a-p](用于虚拟机内)
软盘驱动器 /dev//fd[0-7]
打印机 /dev/lp[0-2](25针打印机); /dev/usb/lp[0-15]
鼠标 /dev/input/mouse[0-15](通用); /dev/psaux(PS/2接口); /dev/mouse(当前鼠标)
CD-ROM、DVD-ROM /dev/scd[0-1](通用);/dev/sr[0-1](通用于CentOS);/dev/cdrom(当前CD-ROM)
磁带机 /dev/ht0(IDE接口);/dev/st0(SATA/SCSI接口);/dev/tape(当前磁带)
IDE磁盘驱动器 /dev/hd[a-d](旧式系统才有)
  1. 由于IDE接口的磁盘驱动器已被淘汰,所以IDE接口的磁盘文件名都被模拟为/dev/sd[a-p]

  2. 如果机器使用的是互联网服务提供商(ISP)申请使用的云端机器,这时可能得到的是虚拟机,为了加速,虚拟机内的磁盘是使用模拟器产生的,该模拟器产生的磁盘文件名可能为 /dev/vd[a-p]

2.1.4 使用虚拟机学习

2.2 磁盘分区

2.2.1 磁盘连接方式与设备文件名的关系

  1. SATA/SAS/IDE
    个人计算机常见的磁盘接口有两种:SATA/SAS,目前主流的是SATA接口,老旧的计算机上有可能有IDE接口,近年来,为了统一处理一般把IDE接口的磁盘文件名模拟成跟SATA一样

  2. SATA、USB、SAS等磁盘接口都是使用SCSI模块来驱动的,因此磁盘设备文件名都是 /dev/sd[a-p]那设备文件名
    的顺序又是什么决定的呢?

    要根据Linux内核检测到磁盘的顺序来命名:
    例题
    设PC上有两个SATA、一个USB磁盘,主板上有六个SATA插槽,这两个SATA磁盘分别安插在SATA1、SATA5插槽上,请问这三个磁盘的设备文件名是什么?
    SATA1上的文件名:/dev/sda
    SATA5上的文件名:/dev/sdb
    USB磁盘(系统启动完成后才被系统识别):/dev/sdc

2.2.2 MSDOS(MBR) 与 GPT 磁盘分区表(partition table)

  1. 利用参考对照柱面或扇区号码的方式作为分区单位
    磁盘有多个盘片,所有盘片的同一个磁道我们称为柱面 (Cylinder), 通常那是文件系统的最小单位, 也就是分区的最小单位。近来有 GPT 这个可达到 64bit 纪录功能的分区表, 现在我们甚至可以使用扇区 (sector) 号码来作为分区单位,也就是说,分区表其实目前有两种格式

  2. MSDOS (MBR) 分区表格式与限制
    早期的 Linux 系统使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分区表
    开机管理程序纪录区与分区表 放在磁盘的第一个扇区(512Bytes) 记录两个数据:
    主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446 Bytes
    分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes(最多能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码)最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码。 Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区
    假设上面的硬盘设备文件名为/dev/sda时,那么这四个分区在Linux系统中的设备文件名:
    P1:/dev/sda1
    P2:/dev/sda2
    P3:/dev/sda3
    P4:/dev/sda4
    :假设硬盘有400个柱面,共分区成为四个分区,第四个分区所在为第301到400号柱面的范围。Windows中,第一到第四个分区的代号应该就是C, D, E, F。当有数据要写入F盘时, 数据会被写入磁盘的 301~400号柱面之间。

由于分区表就只有64 Bytes而已,最多只能容纳四笔分区的记录, 这四个分区的记录被称为主要(Primary)或延伸 (Extended)分区。 根据上面的图示与说明,我们可以得到几个重点信息:

  • 其实所谓的“分区”只是针对那个64 Bytes的分区表进行设置
  • 硬盘默认的分区表仅能写入四组分区信息 这四组分区信息我们称为主要(Primary)或延伸(Extended)分区
  • 分区的最小单位“通常”为柱面(cylinder)
  • 当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理
  1. 为什么要分区?
  • 数据的安全性:
    每个分区的数据是分开的,当你需要将某个分区的数据重整时,例如你要将计算机中Windows的C 盘重新安装一次 系统时, 可以将其他重要数据移动到其他分区,例如将邮件、桌面数据移动到D 盘去,那么C 盘重装系统并不会影响到D 盘
  • 系统的性能考虑:
    分区将数据集中在某个柱面的区段,例如、第一个分区位于柱面号码1-100号,当要读取该分区数据时,磁盘只会搜寻前面1~100的柱面范围,由于数据集中了,将有助于数据读取的速度与性能
  1. 想要把磁盘分区大于四个?延伸分区
    Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区
    硬盘的四个分区记录区仅使用到两个:(P1主要分区;P2延伸分区)
    延伸分区的目的:使用额外的扇区来记录分区信息,延伸分区本身并不能被拿来格式化。
    通过延伸分区所指向的那个区块继续作分区的记录:
    延伸分区继续分区出五个分区, 这五个由延伸分区继续切出来的分区,就被称为逻辑分区(logical partition)。 逻辑分区是由延伸分区继续分区出来的,所以他可以使用的柱面范围就是延伸分区所设置的范围,也就是图中的101~400
    上述分区在Linux系统中的设备文件名分别如下:
    P1:/dev/sda1
    P2:/dev/sda2
    L1:/dev/sda5
    L2:/dev/sda6
    L3:/dev/sda7
    L4:/dev/sda8
    L5:/dev/sda9
    设备文件名没有/dev/sda3与/dev/sda4呢?
    前面四个号码都是保留给Primary或Extended用的,所以逻辑分区的设备名称号码由5号开始

  2. MBR 主要分区、延伸分区与逻辑分区的特性:

  • 主要分区与延伸分区最多四个(硬盘的限制)
  • 延伸分区最多只能有一个(操作系统的限制)
  • 逻辑分区是由延伸分区持续切割出来的分区;
  • 能够被格式化后,作为数据存取的分区为主要分区与逻辑分区。延伸分区无法格式化;
  • 逻辑分区的数量依操作系统而不同,在Linux系统中SATA硬盘已经可以突破63个以上的分区限制;

例题1
在Windows操作系统当中,如果你想要将D与E盘整合成为一个新的分区,而如果有两种分区的情况如下图所示, 图中的特殊颜色区块为D与E盘的示意,请问这两种方式是否均可将D与E整合成为一个新的分区?
Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区

  • 上图可以整合:因为上图的D与E同属于延伸分区内的逻辑分区,因此只要将两个分区删除,然后再重新创建一个新的分区, 就能够在不影响其他分区的情况下,将两个分区的容量整合成为一个。
  • 下图不可整合:因为D与E分属主分区与逻辑分区,两者不能够整合在一起。除非将延伸分区破坏掉后再重新分区。 但如此 一来会影响到所有的逻辑分区,要注意的是:如果延伸分区被破坏,所有逻辑分区将会被删除。 因为逻辑分区的信息都记录 在延伸分区里

例题2
如果我想将一颗大硬盘“暂时”分区成为四个partitions,同时还有其他的剩余容量可以让我在未来的时候进行规划, 我能不能分区出四个Primary?若不行,那么你建议该如何分区?

  • 由于Primary+Extended最多只能有四个,其中Extended最多只能有一个,这个例题想要分区出四个分区且还要预留剩余容 量, 因此P+P+P+P的分区方式是不适合的。因为如果使用到四个P,则即使硬盘还有剩余容量, 因为无法再继续分区,所 以剩余容量就被浪费掉了。
  • 假设你想要将所有的四笔记录都花光,那么P+P+P+E是比较适合的。所以可以用的四个partitions有3个主要及一个逻辑分区, 剩余的容量在延伸分区中。
  • 如果要分区超过4个时,必须要有Extended分区,而且必须将所有剩下的空间都分配给Extended, 然后再以logical的 分区来规划Extended的空间。 另外,考虑到磁盘的连续性,一般建议将Extended的柱面号码分配在最后面的柱面内

例题3
假如我的PC有两颗SATA硬盘,我想在第二颗硬盘分区出6个可用的分区(可以被格式化来存取数据之用), 那每个分区在Linux系统下的设备文件名为何?且分区类型各为何?至少写出两种不同的分区方式

由于P(primary)+E(extended)最多只能有四个,其中E最多只能有一个。要求6个可用的分区,不可能分出 四个P。 下面我们假设两种环境,一种是将前四号全部用完,一种是仅花费一个P及一个E的情况:

  • P+P+P+E的环境:

Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区
在这里插入图片描述可用的是/dev/sdb1, /dev/sdb2, /dev/sdb3, /dev/sdb5, /dev/sdb6, /dev/sdb7这六个,/dev/sdb4 前面四个号码都是保留给Primary或Extended用的

  • P+E的环境:
    Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区
    因为1~4号是保留给主要/延伸分区的,因此第一个逻辑分区一定是由5号开始的,所以/dev/sdb3, /dev/sdb4就会被保留下来没有用到
  1. MBR 分区表主要问题:
    每组分区表仅有 16Bytes 而已,因此可纪录的 信息真的相当有限
  • 操作系统无法抓取到 2.2T 以上的磁盘容量!
  • MBR 仅有一个区块,若被破坏后,经常无法或很难救援。
  • MBR 内的存放开机管理程序的区块仅 446Bytes,无法容纳较多的程序码。
  1. GUID partition table, GPT 磁盘分区表
    过去一个扇区大小就是 512Bytes ,目前已经有 4K 的扇区设计,为了相容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical Block Address, LBA)来处理。GPT 将磁盘所有区块以此 LBA(默认为 512Bytes) 来规划(从 0 开始编号)。
    MBR 仅使用第一个 512Bytes 区块来记录, GPT 使用 34 个 LBA 区块来纪录分区信息,同时MBR 仅有一的区块,无备份不安全,;GPT 使用前面 34 个 LBA 之外,最后 33 个 LBA 也拿来作为另一个备份

Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区

  • LBA0 (MBR 相容区块)
    与 MBR 模式相似,LAB0也分为两个部份:
    (1)跟之前 446 Bytes 相似的区块,储存了第一阶段的开 机管理程序,
    (2)在原本的分区表的纪录区内,这个相容模式仅放入一个特殊标志的分区,用来表示此磁盘为 GPT 格式之意。 不懂 GPT 分区表的磁盘管理程序, 就不会认识这颗磁盘,除非用户有特别要求要处理这颗磁盘,否则该管理软件不能修改此分区信息

  • LBA1 (GPT 表头纪录)
    这个部份记录了分区表本身的位置与大小,同时纪录了备份用的 GPT 分区 (就是前面谈到的在最后 34 个 LBA 区 块) 放置的位置, 同时放置了分区表的检验机制码 (CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。若有错误,还可以通过这个纪录区来取得备份的 GPT(磁盘最后的那个备份区块) 来恢复 GPT 的正常运行

  • LBA2-33 (实际纪录分区信息处)
    从 LBA2 区块开始,每个 LBA 都可以纪录4笔分区纪录,所以在默认的情况下,总共可以有 432 = 128 笔分区记录,因为每个 LBA 有 512Bytes,因此每笔记录用到 128 Bytes 的空间,除了每笔纪录所需要的识别码与相关的纪录之 外,GPT 在每笔纪录中分别提供了 64bits 来记载开始/结束的扇区号码,因此,GPT 分区表对於单一分区来说, 他的最大容 量限制就会在“ 264 * 512Bytes = 263 * 1KBytes = 233TB = 8 ZB ”,要注意 1ZB = 230TB

  • 优点
    GPT 分区已经没 有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区。每一个分区都可以拿来格式化使用。

  • 在磁盘管理工具上面, fdisk 不认识 GPT ,要使用 GPT 的话,得要操作类似 gdisk 或者是 parted 指令

  • 开机管理程序方面, grub 第一版并不认识 GPT 喔!得要 grub2 以后才会认识的

  • 并不是所有的操作系统都可以读取到 GPT 的磁盘分区格式,也不是所有的硬件都可以支持 GPT 格式是否能 够读写 GPT 格式又与开机的检测程序有关,开机的检测程序又分成BIOS 与 UEFI

2.2.3开机流程中的 BIOS 与 UEFI 开机检测程序

目前的主机系统在载入硬件驱动方面的程序,主要有早期的 BIOS 与新的 UEFI 两种机制

  1. BIOS 搭配 MBR的开机流程
    回顾: BIOS与CMOS: CMOS是记录各项硬件参数且嵌入在主板上面的储存器,BIOS则是一个写入到主板上的一个固件( 固件就是写入到硬件上的一个软件程序)。BIOS就是在开机的时 候,计算机系统会主动执行的第一个程序

接下来BIOS会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS会依据使用者的设置去取得能够开机的硬盘, 并且到该硬盘里面去读取第一个扇区的MBR位置。 MBR这个仅有446 Bytes的硬盘容量里面会放置最基本的开机管理程序, 此时 BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了。
开机管理程序的目的是在载入(load)核心文件, 由于开机管理程序是操作系统在安装的时候所提供的,所以他会认 识硬盘内的文件系统格式,因此就能够读取核心文件, 然后接下来就是核心文件的工作,开机管理程序与 BIOS 也功成圆满,之后的工作交给操作系统
整个开机流程到操作系统之前的动作:

  • BIOS:开机主动执行的固件,会认识第一个可开机的设备;
  • MBR:第一个可开机设备的第一个扇区内的主要开机记录区块,内含开机管理程序;
  • 开机管理程序(bootloader):一支可读取核心文件来执行的软件;
  • 核心文件:开始操作系统的功能…
    注1:如果分区表为 GPT 格式的话,那么 BIOS 也能够从 LBA0 的 MBR 相容区块读取第一阶段的开机管理 程序码, 如果开机管理程序能够认识 GPT 的话,那么使用 BIOS 同样可以读取到正确的操作系统核心喔!换句话说, 如果开 机管理程序不懂 GPT ,例如 Windows XP 的环境,那自然就无法读取核心文件,开机失败
    注2:由于 LBA0 仅提供第一阶段的开机管理程序码,因此如果使用类似 grub 的开机管理程序,那么就得要额外分区出一个“ BIOS boot ”的分区, 这个分区才能够放置其他开机过程所需的程序码!在 CentOS 当中,这个分区通常占用 2MB 左右

开机管理程序(boot loader)
BIOS与MBR都是硬件本身会支持的功能,开机管理程序(Boot loader)是操作系统安装在MBR上面的一套软件。MBR仅有446 Bytes,因此这个开机管理程序是非常小而高效。

boot loader的主要任务:

  • 提供菜单:使用者可以选择不同的开机项目,也是多重开机的重要功能!
  • 载入核心文件:直接指向可开机的程序区段来开始操作系统;
  • 转交其他loader:将开机管理功能转交给其他loader负责。

双系统启动流程
Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区
例题: 假设个人计算机只有一个硬盘,里面切成四个分区,其中第一、二分区分别安装了Windows及 Linux, 你要如何在开机的时候选择用Windows还是Linux开机呢?(假设MBR内安装的是可同时认识Windows/Linux操作系统的开机管 理程序)

MBR的开机管理程序提供两个菜单:

  • 菜单一(M1)可以直接载入Windows的核心文件来开机
  • 菜单二(M2)则是将开机管理工作交给第二个分区的开机扇区(boot sector)。
    多重开机
    当使用者在开机的时候选择菜单二时, 那么整个开机管理工作就会交给第二分区的开机管理程序了。 当第二个开机管理程序启动后,该开机管理程序内(上图中)仅有一个开机菜单,因此就能够使用Linux的核心文件来开机。 多重开机
    总结:
  • 每个分区都拥有自己的开机扇区(boot sector)
  • 图中的系统盘为第一及第二分区, 实际可开机的核心文件是放置到各分区内的!
  • loader只会认识自己的系统盘内的可开机核心文件,以及其他loader而已;
  • loader可直接指向或者是间接将管理权转交给另一个管理程序。

为什么如果要安装多重开机, 最好先安装Windows再安装Linux

  • Linux在安装的时候,你可以选择将开机管理程序安装在MBR或各别分区的开机扇区, 而且Linux的loader可以手动设置菜单(就是上图的M1, M2…),所以你可以在Linux的boot loader里面加入Windows开机的选项;
  • Windows在安装的时候,他的安装程序会主动的覆盖掉MBR以及自己所在分区的开机扇区,你没有选择的机会, 而且他没有让我们自己选择菜单的功能。
    如果先安装Linux再安装Windows的话,那MBR的开机管理程序就只会有Windows的项目,而不会有Linux的项目 (因为原本在MBR内的Linux的开机管理程序就会被覆盖掉)。
    那需要重新安装Linux一次吗?当然不需要,你只要用尽各种方法来 处理MBR的内容即可。 例如利用Linux的救援模式来挽救MBR
  1. UEFI BIOS 搭配 GPT 开机的流程
  • GPT 可以提供到 64bit 的寻址,也能够使用较大的区块来处理开机管理程序。但是 BIOS 其实不懂 GPT ,还得要通过 GPT 提供相容模式才能够读写这个磁盘设备
  • 而且 BIOS 仅为 16 位的程序,在与现阶段新的操作系统接轨方面有点弱,
    因此就有了 UEFI (Unified Extensible Firmware Interface) 这个统一可延伸固件界面的产生。
    差异
    Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区
    当载入操作系统后,一般来说,UEFI 就会停止工作,并将系统交给操作系统,这与早期的 BIOS 差异不大。
    某些操作系统无法找到特定设备时,UEFI 程序是可以部分继续执行的还是可以持续运行。

*注:过去黑客经常借由 BIOS 开机阶段来破坏系统,并取得系统的控制权,UEFI :安全启动 (secure boot) 机制, 这个机制代表着即将开机的操作系统必须要被 UEFI 所验证,否则就无法顺利开机!微软用了很多这样 的机制来管理硬件。 不过加入这个机制后,许多的操作系统,包括 Linux ,就很有可能无法顺利开机,某些时刻,要将 UEFI 的 secure boot 功能关闭, 才能够顺利的进入 Linux
另外,与 BIOS 模式相比,虽然 UEFI 可以直接取得 GPT 的分区表,不过最好依旧拥有 BIOS boot 的分区支持, 同时, 为了与 windows 相容,并且提供其他第三方厂商所使用的 UEFI 应用程序储存的空间,你必须要格式化一个 vfat 的文件系统, 大约 提供 512MB 到 1G 左右的容量,以让其他 UEFI 执行较为方便。

2.2.4 Linux安装模式下,磁盘分区的选择(极重要)

  1. 目录树结构(directory tree)
    整个目录树 架构最重要的就是那个根目录(root directory),这个根目录的表示方法为一条斜线“/”, 所有的文件都与目录树有关Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区

  2. 文件系统与目录树的关系(挂载)

Linux_鸟哥基础篇笔记_第一部分Linux的规则安装_第2章主机规划与磁盘分区

所谓的“挂载”就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下; 进入该目录就可以读取该分区的意思。这个动作我们称为“挂载”,那个进入点的目录我们称为“挂载点”。
上图中假设硬盘分为两个分区,partition 1是挂载到根目录,至于partition 2则是挂载到/home这个目录。当数据放置在/home内的各次目录时,数据是放置到partition 2的,如果不是放在/home下面的目录, 数据就会被放置 到partition 1

判断某个文件在哪个partition
通过反向追踪。以上图来说, 当我想要知道/home/vbird/test这个 文件在哪个partition时,由test --> vbird --> home --> /,看那个“进入点”先被查到那就是使用的进入点。 所以test使用的是/home这 个进入点而不是/。

上一篇:P2V conversion on Windows Server 2012 R2 failed


下一篇:Linux主机规划与磁盘分区