鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第二章 主机规划与磁盘分区

2.1 Linux与硬件的搭配

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

在Linux系统中,每个设备都被当成一个文件。例如,SATA接口的硬盘的文件名称即为/dev/sd[a-d],其中, 括号内的字母为a-d当中的任意一个, 亦即有/dev/sda, /dev/sdb, /dev/sdc, 及 /dev/sdd这四个文件的意思。
在这里插入图片描述
由于 IDE 界面的磁盘机几乎已经被淘汰,因此现在连 IDE 界面的磁盘文件名也都被仿真成 /dev/sd[a-p] 了。此外, 如果机器使用的是跟网际网络供应商 (ISP) 申请使用的云端机器,这时可能会得到的是虚拟机。为了加速,虚拟机内的磁盘是使用仿真器产生, 该仿真器产生的磁盘文件名为 /dev/vd[a-p] 系列的文件名。

2.2 磁盘分区

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

使用的机器很可能就是虚拟机,这些虚拟机使用的“虚拟磁盘”并不是正规的磁盘界面,正常的实体机器大概使用的都是 /dev/sd[a-] 的磁盘文件名,至于虚拟机环境下 面,为了加速,可能就会使用 /dev/vd[a-p] 这种设备文件名。

假设主机为虚拟机,里面仅有一颗VirtIO接口的磁盘,请问在Linux操作系统里面的设备文件名为何?
答:参考 2.1.3 小节的介绍,虚拟机使用 VirtIO 界面时,磁盘文件名应该 是 /dev/vda 。

对于SATA接口,由于SATA/USB/SAS等磁盘接口都是使用SCSI模块来驱动的, 因此这些接口的磁盘设备文件名都是/dev/sd[a-p]的格式。 所以SATA/USB接口的磁盘根本就没有一 定的顺序,要根据Linux核心侦测到磁盘的顺序了。

如果PC上面有两个SATA磁盘以及一个USB磁盘,而主板上面有六个SATA的插槽。这两个SATA磁盘分别安插在主板上的SATA1, SATA5插槽上, 请问这三个磁盘在Linux中 的设备文件名为何?
答:由于是使用侦测到的顺序来决定设备文件名,并非与实际插槽代号 有关,因此设备的文件名如下:
 - SATA1插槽上的文件名:/dev/sda 
 - SATA5插槽上的文件名:/dev/sdb 
 - USB磁盘(开机完成后才被系统捉到):/dev/sdc

磁盘第一个扇区里面含有的重要信息称为MBR (Master Boot Record) 格式,但是由于近年来磁盘的容量不断扩大,造成读写上的一些困扰, 甚至有些大 于 2TB 以上的磁盘分区已经让某些操作系统无法存取。因此后来又多了一个新的磁盘分区格 式,称为 GPT (GUID partition table)。

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

在这里插入图片描述

  • MSDOS (MBR) 分区表格式与限制
    早期的 Linux 系统为了相容于 Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分区表。开机管理程序纪录区与分区表则放在磁盘的第一个扇区( 512Bytes),第一个扇区会有两个数据:
    • 主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446 Bytes;
    • 分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes
      分区表所在区块最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码。 若将硬盘以长条形来看,然后将柱面以直条图来看,那么那64 Bytes的记录区段有点像下面的图示:

在这里插入图片描述
假设上面的硬盘设备文件名为/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);
- 当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理

为了使硬盘更多的分区,延伸分区出现。
在这里插入图片描述
硬盘的四个分区记录区仅使用到两个,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用。
MBR 主要分区、延伸分区与逻辑分区的特性简单的定义:

  • 主要分区与延伸分区最多可以有四笔(硬盘的限制);
  • 延伸分区最多只能有一个(操作系统的限制);
  • 逻辑分区是由延伸分区持续切割出来的分区;
  • 能够被格式化后,作为数据存取的分区为主要分区与逻辑分区。延伸分区无法格式化;
  • 逻辑分区的数量依操作系统而不同,在Linux系统中SATA硬盘已经可以突破63个以上的分区限制;
    在这里插入图片描述
    例题:在Windows操作系统当中,如果你想要将D与E盘整合成为一个新的分区,而如果有两 种分区的情况如下图所示, 图中的特殊颜色区块为D与E盘的示意,请问这两种方式是否均可将D与E整合成为一个新的分区?
  • 上图可以整合:因为上图的D与E同属于延伸分区内的逻辑分区,因此只要将两个分区删 除,然后再重新创建一个新的分区, 就能够在不影响其他分区的情况下,将两个分区的 容量整合成为一个。
  • 下图不可整合:因为D与E分属主分区与逻辑分区,两者不能够整合在一起。除非将延伸分区破坏掉后再重新分区。 但如此一来会影响到所有的逻辑分区,要注意的是:如果延伸分区被破坏,所有逻辑分区将会被删除。 因为逻辑分区的信息都记录在延伸分区里面 嘛!

考虑到磁盘的连续性,一般建议将Extended的柱面号码分配在最后面的柱面内。
在过去 MBR 分区表的限制中 经常可以发现如下的问题:

  • 操作系统无法抓取到 2.2T 以上的磁盘容量
  • MBR 仅有一个区块,若被破坏后,经常无法或很难救援
  • MBR 内的存放开机管理程序的区块仅 446Bytes,无法容纳较多的程序码。

GUID partition table, GPT 磁盘分区表
因为过去一个扇区大小就是 512Bytes 而已,不过目前已经有 4K 的扇区设计出现。为了相容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical Block Address, LBA)来处理。GPT 将磁盘所有区块以此 LBA(默认为 512Bytes) 来规划, 而第一个LBA 称为 LBA0 (从 0 开始编号)。
与 MBR 仅使用第一个 512Bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时, GPT 除了前面 34 个 LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份,详细的结构有点像下面的模样:
在这里插入图片描述

  • LBA0 (MBR 相容区块)
    与 MBR 模式相似的,这个相容区块也分为两个部份,一个就是跟之前 446 Bytes 相似的 区块,储存了第一阶段的开机管理程序! 而在原本的分区表的纪录区内,这个相容模式 仅放入一个特殊标志的分区,用来表示此磁盘为 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 分区默认可以提供多达 128 笔纪录,而在 Linux 本身的核心设备纪录中,针对单一 磁盘来说,虽然过去最多只能到达 15 个分区,不过由于 Linux kernel 通过 udev 等方式的处 理,现在 Linux 也已经没有这个限制。 此外,GPT 分区已经没有所谓的主、延伸、逻辑 分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区,即每一个分区都 可以拿来格式化使用。

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

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

BIOS 搭配 MBR/GPT 的开机流程

CMOS是记录各项硬件参数且嵌入在主板上面的储存器,BIOS则是一个写入到主板上的一个固件(固件就是写入到硬件上的一个软件程序)。BIOS是在开机的时候,计算机系统会主动执行的第一个程序。接下来BIOS会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS会依据使用者的设置去取得能够开机的硬盘, 并且到该硬盘里面去读取第一个扇区的MBR位置。 MBR这个仅 有446 Bytes的硬盘容量里面会放置最基本的开机管理程序, 此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了。
简单的说,整个开机流程到操作系统之前的动作应该是这样的:

  1. BIOS:开机主动执行的固件,会认识第一个可开机的设备;
  2. MBR:第一个可开机设备的第一个扇区内的主要开机记录区块,内含开机管理程序;
  3. 开机管理程序(boot loader):一支可读取核心文件来执行的软件;
  4. 核心文件:开始操作系统的功能…

注意,如果分区表为 GPT 格式的话,那么 BIOS 也能够从 LBA0 的 MBR 相容区块读取第一阶段的开机管理程序码, 如果开机管理程序能够认识 GPT 的话,那么使用 BIOS 同样可以读取到正确的操作系统核心;如果开机管理程序不懂 GPT ,例如 Windows XP 的环境,那自然就无法读取核心文件,开机就失败了。
由于 LBA0 仅提供第一阶段的开机管理程序码,因此如果你使用类似 grub 的开机管理程 序的话,那么就得要额外分区出一个“ BIOS boot ”的分区, 这个分区才能够放置其他开机过程所需的程序码!在 CentOS 当中,这个分区通常占用 2MB 左右而已。
BIOS与MBR都是硬件本身会支持的功能,至于Boot loader则是操 作系统安装在MBR上面的一套软件了。
boot loader的主要任务:

  • 提供菜单:使用者可以选择不同的开机项目,这也是多重开机的重要功能
  • 载入核心文件:直接指向可开机的程序区段来开始操作系统
  • 转交其他loader:将开机管理功能转交给其他loader负责(开机管理程序除了可以安装在MBR之外, 还可以安装在每个分区的开机扇区(boot sector))
多重开机工作系统

假设计算机只有一个硬盘,里面切成四个分区,其中第一、 二分区分别安装了Windows及Linux, 假设MBR内安装的是可同时认识Windows/Linux操作系统的开机管理程序:
在这里插入图片描述
MBR的开机管理程序提供两个菜单,菜单一(M1)可以直接载入 Windows的核心文件来开机; 菜单二(M2)则是将开机管理工作交给第二个分区的开机扇区 (boot sector)。当使用者在开机的时候选择菜单二时, 那么整个开机管理工作就会交给第二分区的开机管理程序了。 当第二个开机管理程序启动后,该开机管理程序内(上图中)仅有一个开机菜单,因此就能够使用Linux的核心文件来开机。

  • 每个分区都拥有自己的开机扇区(boot sector)
  • 图中的系统盘为第一及第二分区
  • 实际可开机的核心文件是放置到各分区内
  • loader只会认识自己的系统盘内的可开机核心文件,以及其他loader而已
  • loader可直接指向或者是间接将管理权转交给另一个管理程序
    双系统一般先安装windows原因:Linux在安装的时候,你可以选择将开机管理程序安装在MBR或各别分区的开机扇区, 而且Linux的loader可以手动设置菜单(就是上图的M1, M2…),所以可以在Linux的boot loader里面加入Windows开机的选项; Windows在安装的时候,他的安装程序会主动的覆盖掉MBR以及自己所在分区的开机扇 区,你没有选择的机会, 而且他没有让我们自己选择菜单的功能,所以需要处理MBR内容。

UEFI BIOS 搭配 GPT 开机的流程

BIOS 其实要通过 GPT 提供相容模式才能够读写这个磁盘设备,而且BIOS仅为16位的程序,在与现阶段新的操作系统接轨方面较弱, 为了解决这 个问题,因此就有了 UEFI (Unified Extensible Firmware Interface) 这个统一可延伸固件界面的产生。我们也称 UEFI 为 UEFI BIOS。UEFI 使用 C 程序语言,比起使用组合语言的传统 BIOS 要更容易开发。如果开发者够厉害,可以在 UEFI 开机阶段就让该系统了解 TCP/IP 而直接上网,根本不需要进入操作系统。
在这里插入图片描述
与传统的 BIOS 不同,UEFI 就像是一个低阶的操作系统,甚至于连主板上面的硬件资源的管理, 也跟操作系统相当类似,只需要载入驱动程序即可控制操 作。同时由于程控得宜,一般来说,使用 UEFI 接口的主机,在开机的速度上要比 BIOS 来的快上许多。
UEFI 当初在发展的时候,就制定一些控制在里头,包括硬件资源的管理使用轮询 (polling) 的方式来管理,与 BIOS 直接了解 CPU 以中断的方式来管理比较, 这种 polling 的效率是稍微慢一些的,另外,UEFI 并不能提供完整的高速缓存功能,因此执行效率也没有办法提升。 不过由于载入所有的 UEFI 驱动程序之后, 系统会打开一个类似操作系统的 shell 环境,使用者可以此环境中执行任意的 UEFI 应用程序,而且效果比 MSDOS 更好。由于效果多但是性能差,UEFI不会发展为一个操作系统。
过去 cracker 经常借由 BIOS 开机阶段来破坏系统,并取得系统的控制权,因此UEFI 加入了一个所谓的安全启动 (secure boot) 机制, 这个机制代表着即将开机的操作系统必须要被 UEFI 所验证,否则就无法顺利开机。
与 BIOS 模式相比,虽然 UEFI 可以直接取得 GPT 的分区表,不过最好依旧拥有 BIOS boot 的分区支持, 同时,为了与 windows 相容,并且提供其他第三方厂商所使用的 UEFI 应用程序储存的空间,必须要格式化一个 vfat 的文件系统, 大约提供 512MB 到1G左右的容量,以让其他 UEFI 执行较为方便。
由于 UEFI 已经克服了 BIOS 的1024柱面的问题,因此开机管理程序与核心可以放 置在磁盘开始的前 2TB 位置内即可。加上之前提到的 BIOS boot 以及 UEFI 支持的分区,基本上你的 /boot 目录几乎都是 /dev/sda3 之后的号码了。

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

在 windows 系统重灌之前,可能都会事先考虑, C 盘 D 盘又要给多大容量等等, 然后实际安装的时候,会发现到其实 C 盘之前会有个 100MB 的分区被独立出来,所以实际上你就会有三个分区就是了。

  • 目录树结构 (directory tree)
    目录树架构(directory tree)就是以根目录为主,然 后向下呈现分支状的目录结构的一种文件架构。在这里插入图片描述
    上图中长方形为目录, 波浪形则为文件。挂载(mount)结合目录树的架构与磁盘内的数据。
  • 文件系统与目录树的关系(挂载)
    “挂载”就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下; 意思是,进入该目录就可以读取该分区的意思。这个动作称为“挂载”,那个进入点的目录称为“挂载点”。
    在这里插入图片描述
    光盘内的数据:
    在Windows里面使 用的是“光驱”的代号方式处理(假设为E盘时),Linux默认的情况下是将光驱的数据放置到/media/cdrom里头去的。

2.3 安装Linux前的规划

2.3.2 主机的服务规划与硬件的关系

在一般小型企业或学校单位中, 常见的某些服务与你的硬件关系:

  • NAT(达成IP分享器的功能)
  • SAMBA(加入Windows网络上的芳邻)
  • Mail(邮件客户服务)
  • Web(WWW服务器)
  • DHCP(提供用户端自动取得IP的功能)
  • FTP
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值