第1章Linux简介与安装第1章Linux简介与安装  了解Linux的起源、特点、内核版本和发行版本的区别。  了解硬盘分区、MBR和GPT。  理解系统引导工具GRUB/GRUB2。  理解RHEL 8的启动流程。  熟练掌握RHEL 8的安装。  熟练掌握系统引导工具GRUB/GRUB2的设置及使用。Linux是一种优秀的操作系统,被广泛应用在多种计算平台。本章简要介绍Linux的起源、特点、内核版本和发行版本的区别,详细介绍Red Hat Enterprise Linux 8(以下简称RHEL 8)的安装过程、系统引导工具GRUB2的使用方法、RHEL 8的启动流程。 1.1Linux简介 Linux是一款诞生于网络、成长于网络并且成熟于网络的操作系统,是一套免费使用和自由传播的类UNIX操作系统,它主要运行在基于Intel x86系列CPU的计算机上。Linux是由世界各地的成千上万的程序员设计和实现的,其目的是建立一个不受任何商品化软件版权制约的、全世界都能自由使用的UNIX兼容产品。Linux是一个自由的、遵循GNU通用公共许可证(GPL)的类UNIX操作系统。 Linux最早由一位名叫Linus Torvalds的芬兰赫尔辛基大学计算机科学系的学生开发,他的目的是设计一个代替Minix的操作系统,这个操作系统可用于386、486或奔腾处理器的个人计算机上,并且具有UNIX操作系统的全部功能。 Linux以它的高效性和灵活性著称,能够在个人计算机上实现全部的UNIX特性,具有多用户、多任务的能力。Linux可在GNU(GNUs Not UNIX)公共许可权限下免费获得,是一个符合POSIX标准的操作系统。 注意: Linux读音及音标介绍如下。根据Linus Torvalds本人的发音应该是“哩呐克斯”,音标是['li:nэks]。目前,常见的读法有['linju:ks]、['li:nэks]、[li'n^ks]、['liniks]。哪种发音读的人多就作为标准吧,大家约定俗成即可。 Linux之所以受到广大计算机爱好者的喜爱,主要原因: 第一,由于Linux是一套自由软件,用户可以无偿地得到它及其源代码,可以无偿地获得大量的应用程序,而且可以任意修改和补充它们,这对用户学习、了解UNIX操作系统非常有益。第二,它具有UNIX的全部功能,任何使用UNIX操作系统或想要学习UNIX操作系统的人都可以从Linux中获益。 Linux不仅为用户提供了强大的操作系统内核功能,还提供了丰富的应用软件。用户不但可以从Internet上下载Linux及其源代码,而且可以从Internet上下载许多Linux的应用程序。可以说,Linux本身包含的应用程序以及移植到Linux上的应用程序包罗万象,任何一位用户都能从有关Linux的网站上找到符合自己特殊需要的应用程序及其源代码,这样,用户就可以根据自己的需要修改和扩充操作系统或应用程序的功能。 Linux的开放性也给我国操作系统软件开发商带来一个良好的机会,开发具有自主知识产权的操作系统,打破国外厂商在计算机操作系统上的垄断。我国有多家软件公司致力于开发基于Linux内核的操作系统平台,并且有产品成功地应用在很多领域。 1.1.1Linux的起源 在20世纪70年代,UNIX操作系统的源程序大多是可以任意传播的。互联网的基础协议TCP/IP就是产生于那个年代。在那个时期,人们在创作各自的程序中享受着从事科学探索、创新活动所特有的那种激情和成就感。那时的程序员,并不依靠软件的知识产权向用户收取版权费。 在1979年,AT&T宣布了UNIX的商业化计划,随之出现了各种二进制的商业UNIX版本。于是就兴起了基于二进制机读代码的“版权产业”(Copyright Industry),使软件业成为一种版权专有式的产业,围绕程序开发的那种创新活动被局限在某些骨干企业的小圈子里,源程序被视为核心“商业机密”。这种做法,一方面,产生了大批的商业软件,极大地推动了软件业的发展,诞生了一批软件巨人;另一方面,由于封闭式的开发模式,也阻碍了软件业的进一步深化和提高。由此,人们为商业软件的BUG缺陷付出了巨大的代价。 在1983年,Richard Stallman面对程序开发的封闭模式,发起了一项国际性的源代码开放的所谓“牛羚(GNU)”计划,力图重返20世纪70年代的基于源码开放来从事创作的美好时光。他为保护源代码开放的程序库不会再度受到商业性的封闭式利用,制定了一项GPL条款,称为Copyleft版权模式。Copyleft带有标准的Copyright声明,确认作者的所有权和标志。但它放弃了标准Copyright中的某些限制。它声明: 任何人不仅可以自由分发该成果,还可以自由修改它,但你不能声明你做了原始的工作,或声明是由他人做的。最终,所有派生的成果必须遵循这一条款(相当于继承关系)。GPL有一个法定的版权声明,但附带(在技术上去除了某些限制)在该条款中,允许对某项成果以及由它派生的其余成果的重用,修改和复制对所有人都是自由的。 注意: GNU(GNUs Not UNIX)计划是由Richard Stallman在1983年9月27日公开发起的,由自由软件基金(Free Software Foundation,FSF)支持,目标是创建一套完全自由的操作系统。GPL是指GNU通用公共许可证(General Public License,GPL)。大家常说的Linux准确来讲应该称为GNU/Linux。Linux这个词本身只表示Linux内核,但实际上人们已经习惯用Linux来表示整个基于GNU/Linux内核且使用GPL软件的操作系统。 在1987年6月,Richard Stallman完成了11万行源代码开放的“编译器”(GNU gcc),获得了一项重大突破,做出了极大的贡献。 在1989年11月,M.Tiemann以6000美元开始创业,创造了专注于经营开放源代码CygnusSupport(天鹅座支持公司)源代码开放计划(注意,Cygnus中隐含着gnu三个字母)。Cygnus是世界上第一家也是最终获得成功的一家专营源代码程序的商业公司。Cygnus的“编译器”是最优秀的,它的客户有许多是一流的IT企业,包括世界上最大的微处理器公司。 在1991年9月,Linus Torvalds公布了Linux 0.0.1版内核,该版本的Linux内核被芬兰赫尔辛基大学FTP服务器管理员Ari Lemmke发布在Internet上,最初Torvalds将其命名为Freax,是自由(free)和奇异(freak)的结合,并且附上X字母,以配合所谓的UNIXlike(类UNIX)操作系统。但是FTP服务器管理员觉得Freax不好听,因此将其命名为Linux,这完全是一个偶然事件。但是,Linux刚一出现在互联网上,便受到广大的“牛羚”计划追随者们的喜欢,他们将Linux加工成了一个功能完备的操作系统,叫做GNU Linux。 在1995年1月,Bob Young创办了Red Hat公司,以GNU Linux为核心,集成了400多个源代码开放的程序模块,搞出了一种冠以品牌的Linux,即Red Hat Linux,称为Linux发行版本,在市场上出售。这在经营模式上是一种创举。Bob Young称: 我们从不想拥有自己的“版权专有”技术,我们卖的是“方便”(给用户提供支持和服务),而不是自己的“专有技术”。源代码开放程序促进了各种品牌发行版本的出现,极大地推动了Linux的普及和应用。 在1998年2月,以Eric Raymond为首的一批年轻的“老牛羚骨干分子”终于认识到GNU Linux体系的产业化道路的本质并非是什么自由哲学,而是市场竞争的驱动,因此创办了Open Source Intiative(开放源代码促进会),在互联网世界里展开了一场历史性的Linux产业化运动。在IBM和Intel为首的一大批国际重量级IT企业对Linux产品及其经营模式的投资并提供全球性技术支持的大力推动下,催生了一个正在兴起的基于源代码开放模式的Linux产业,也有人称为开放源代码(OpenSource)现象。 在2001年1月,Linux 2.4发布,进一步地提升了SMP系统的扩展性,同时它也集成了很多用于支持桌面系统的特性: 对USB、PC卡(PCMCIA)的支持,内置的即插即用等功能。 在2003年12月,Linux 2.6版内核发布。相对于2.4版内核,2.6版在对系统的支持上有很大的变化。这些变化包括: (1) 更好地支持大型多处理器服务器,特别是采用NUMA设计的服务器。 (2) 更好地支持嵌入式设备,如手机、网络路由器或者视频录像机等。 (3) 对鼠标和键盘指令等用户行为反应更加迅速。 (4) 块设备驱动程序做了彻底更新,如与硬盘和CD光驱通信的软件模块。 Linux发展的重要里程碑如下。 1991年9月,Linus Torvalds公布了Linux 0.0.1版内核。 1994年3月,Linux 1.0版发行,Linux转向GPL版权协议。 1996年6月,Linux 2.0版内核发布。 1999年1月,Linux 2.2版内核发布;Linux的简体中文发行版本相继问世。 2001年1月,Linux 2.4版内核发布。 2003年12月,Linux 2.6版内核发布,与2.4内核版本相比,它在很多方面进行了改进,如支持多处理器配置和64位计算,它还支持实现高效率线和处理的本机POSIX线程库(NPTL)。实际上,性能、安全性和驱动程序的改进是整个2.6.x内核的关键。 2009年12月,Linux 2.6.32版内核发布,长期(2009—2014)支持版,RHEL 6使用该内核。 2011年5月,Linux 2.6.39版内核发布。 2011年7月,Linux 3.0版内核发布,长期(2011.7—2013.10)支持版(Linus Torvalds坦言: Linux内核3.0并没有巨大变化,只是在Linux诞生20周年之际将2.6.40提升为3.0而已)。 2012年1月,Linux 3.2版内核发布。 2013年6月,Linux 3.10版内核发布,长期(2013.6—2015.9)支持版,RHEL 7使用该内核。 2014年8月,Linux 3.16版内核发布,长期(2014.8—2020.4)支持版。 2016年1月,Linux 4.4版内核发布,长期(2016.1—2022.2)支持版。 2018年8月,Linux 4.18版内核发布,RHEL 8使用该内核。 2019年3月,Linux 5.0版内核发布。 提示: 内核下载网址为https: //www.kernel.org/。 1.1.2Linux的特点 Linux操作系统在短短的几年之内得到了非常迅猛的发展,这与Linux具有的良好特性是分不开的。Linux包含了UNIX的全部功能和特性。简单地说,Linux具有以下主要特性: 遵循GNU/GPL、开放性、多用户、多任务、良好的用户界面、设备独立性、丰富的网络功能、可靠的系统安全、良好的可移植性。 Linux可以运行在多种硬件平台上,如x86、x64、ARM、SPARC和Alpha等处理器的平台。此外,Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月发布的Linux 2.4版内核已经能够完全支持Intel 64位芯片架构。同时Linux也支持多处理器技术,多个处理器同时工作,使系统性能大大提高。 1.1.3Linux的版本 Linux的版本号分为两部分: 内核版本和发行版本。 1. Linux的内核版本 对于Linux的初学者来说,最初会经常分不清内核版本与发行版本之间的关系。实际上,操作系统的内核版本是指在Linus Torvalds领导下的开发小组开发出的系统内核的版本号,通常由3个数字组成: x.y.z。 x: 目前发布的内核主版本。 y: 偶数表示是稳定的版本,如2.6.39;奇数表示是开发中的版本,有一些新的东西加入,是不稳定的测试版本,如2.5.6。 z: 错误修补的次数。 注意: 2.x规则在3.x已经不适用了。比如,3.1内核是稳定版本。 Linux操作系统的核心就是它的内核,Linus Torvalds和他的小组在不断地开发和推出新内核。内核的主要作用包括进程调度、内存管理、配置管理虚拟文件系统、提供网络接口以及支持进程间通信。像所有软件一样,Linux的内核也在不断升级。 另外,在发行版本中常见的内核版本号表示方式为major.minor.patchbuild.desc,如2.6.32220.2.1.el6。  major: 表示主版本号,有结构性变化时才变更。  minor: 表示次版本号,新增功能时才发生变化。一般奇数表示测试版本,偶数表示生产版本。  patch: 表示对次版本的修订次数或补丁包数。  build: 表示编译的次数,每次编译可能对少量程序做优化或修改,但一般没有大的功能变化。  desc: 用来描述当前的版本特殊信息。其信息由编译时指定,具有较大的随意性,但也有一些描述标识是常用的,举例如下。  rc(有时也用一个字母r): 表示候选版本(release candidate),rc后的数字表示该正式版本的第几个候选版本。多数情况下,各候选版本之间数字越大越接近正式版本。  smp: 表示对称多处理器(Symmetrical MultiProcessing)。  pp: 在Red Hat Linux中常用来表示测试版本(prepatch)。  EL: 在Red Hat Linux中用来表示企业版Linux(Enterprise Linux)。  mm: 表示专门用来测试新的技术或新功能的版本。  fc: 在Red Hat Linux中表示Fedora Core。 在服务器上,最好不要安装小版本号是奇数的内核。同样,prepatch的内核版本也不建议安装在服务器上。 2. Linux的发行版本 一个完整的操作系统不仅只有内核,还包括一系列为用户提供各种服务的外围程序,所以,许多个人、组织和企业开发了基于GNU/Linux的Linux发行版本,他们将Linux操作系统的内核与外围应用软件和文档包装起来,并提供一些系统安装界面和系统设置与管理工具, 这样就构成了一个发行版本(distribution)。实际上,Linux的发行版本就是Linux内核再加上外围实用程序组成的一个大软件包而已。相对于操作系统内核版本,发行版本的版本号是随发布者的不同而不同。与Linux操作系统内核的版本号是相对独立的,例如,Red Hat Enterprise Linux 8的内核是vmlinuz4.18.032.el8.x86_64,采用的内核版本是kernel 4.18,该版本是长期支持版(Long Term Support,LTS),支持5级分页能力,处理器转换线性地址从48位提升到57位,从而使得物理内存限制从64TB提升到4PB,可管理的虚拟地址高达128PB。 Linux的发行版本大体可以分为两类,一类是商业公司维护的发行版本;另一类是社区组织维护的发行版本。前者以著名的Red Hat Linux为代表,后者以Debian为代表。 注意: Red Hat是全球最大的开源技术厂家,其产品Red Hat Linux也是全世界应用最广泛的Linux。红帽公司总部位于美国北卡罗来纳州。Red Hat的培训及认证被认为是Linux认证的标准。RHCE(Red Hat认证工程师)认证被公认为总体质量最高的国际IT认证。 另外,2018年10月,IBM以340亿美元收购Red Hat,Red Hat成为IBM混合云分部的一个部门。 下面简要介绍一些目前比较知名的Linux发行版本。 (1) Red Hat系列。Red Hat Linux是最成熟的一种Linux发行版本,无论在销售还是装机数量上都是市场上的第一。中国老一辈Linux爱好者中大多数都是Red Hat Linux的使用者。 目前Red Hat系列的Linux操作系统包括RHEL、Fedora、CentOS、OEL和SL。 ① RHEL(Red Hat Enterprise Linux,Red Hat的企业版)。Red Hat Linux 9.0是Red Hat公司于2003年发布的最后一个稳定版桌面Linux,以后Red Hat公司就不再开发和发布桌面版Linux,而是将桌面版Linux项目和Fedora开源社区合作,改名叫Fedora Project。Fedora Project将会由Red Hat公司赞助,新发行的桌面版Linux改名为Fedora Core。以后Red Hat公司专门开发和维护Red Hat Enterprise Linux。Red Hat公司对Red Hat Enterprise Linux提供收费技术支持和更新。Red Hat公司于2019年5月7日发布了RHEL 8。 ② Fedora。Fedora的前身是Red Hat Linux。2003年9月,Red Hat公司宣布不再推出桌面版Linux,而是将桌面版Linux的开发计划和Fedora计划整合成一个新的Fedora Project。Fedora Project由Red Hat公司赞助,以Red Hat Linux 9.0为范本加以改进,原来的桌面版Linux开发团队将继续参与Fedora的开发计划,由Fedora社区开发和维护。Fedora使用最新的内核,提供最新的软件包,是一个开放、创新、前瞻性的操作系统和平台。 ③ CentOS(Community Enterprise Operating System,社区企业版)。CentOS是RHEL的社区克隆版,国内外许多企业或网络公司选择CentOS作为服务器。2019年9月25日CentOS 8正式发布。 ④ OEL(Oracle Enterprise Linux)。OEL基于RHEL并与之完全兼容。 ⑤ SL(Scientific Linux)。这是重新编译的Red Hat Enterprise Linux,由美国国家加速器实验室、欧洲核研究组织以及世界各地的大学和实验室共同开发。 (2) SUSE。SUSE是德国最著名的Linux发行版本,在全世界范围内也享有较高的声誉。SUSE自主开发的软件包管理系统YaST也大受好评。SUSE于2003年年末被Novell收购。 (3) Debian。Debian系列包括Debian和Ubuntu。Debian由Ian Murdock于1993年创建,是迄今为止最遵循GNU规范的Linux操作系统,是100%非商业化的社区类Linux发行版本,由黑客自愿者开发和维护。多数用户喜欢Debian的一个原因在于aptget/dpkg包管理方式。dpkg是Debian系列特有的软件包管理工具,它被誉为是所有Linux软件包管理工具中最强大的,配合aptget,在Debian上安装、升级、删除和管理软件变得很容易。 (4) Ubuntu。Ubuntu(乌班图)由开源厂商Canonical公司开发和维护。Ubuntu严格来说不能算一个独立的发行版本,Ubuntu是基于Debian的不稳定版本并加强而来,拥有Debian所有的优点。 (5) RedFlag/Deepin/中标麒麟。RedFlag是北京中科红旗软件技术有限公司开发,该公司于2014年8月被五甲万京信息产业集团收购,收购后的中科红旗公司保持原有的业务和发展模式。Deepin、中标麒麟也是由我国国内公司研制的Linux发行版本。 (6) Slackware。由Patrick Volkerding创建于1992年,是历史最悠久的Linux发行版本。 (7) Gentoo。Gentoo最初由Daniel Robbins创建。2002年发布首个稳定的版本,是Linux世界中最年轻的发行版本。Gentoo的出名在于它高度的自定制性,Gentoo适合比较有Linux使用经验的老手使用。 (8) Mandriva。Mandriva的原名是Mandrake,最早由Gal Duval创建并在1998年7月发布。早期的Mandrake是基于Red Hat进行开发的。 (9) Android。Android是一种基于Linux的自由及开源的操作系统,主要用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟(Open Handset Alliance)领导开发。 1.2硬盘分区 Linux的安装是一个比较复杂的过程,它和Windows操作系统的不同之处在于,它们的文件组织形式不同。安装Linux过程的重点和难点在于怎样进行硬盘分区。 在安装RHEL的过程中可以对硬盘进行分区操作,不过笔者建议读者在安装RHEL之前使用专门的分区工具(比如Linux中可以使用gparted、gdisk、fdisk,Windows中可以使用DiskGenius、AOMEI分区助手等)对硬盘进行分区。 硬盘有两种分区格式: MBR(Master Boot Record,主引导记录)和GPT(Globally unique identifier Partition Table,全局唯一标识磁盘分区表)。 MBR和GPT的区别: ①MBR分区表最多只能识别2.2TB大小的硬盘空间,大于2.2TB的硬盘空间将无法识别;GPT分区表能够识别2.2TB以上的硬盘空间。②MBR分区表最多支持4个主分区或3个主分区+1个扩展分区(扩展分区中的逻辑分区个数不限);默认情况GPT分区表最多支持128个主分区。③MBR分区表的大小是固定的;在GPT分区表头中可自定义分区数量的最大值,也就是说GPT分区表的大小不是固定的。 1.2.1MBR分区 MBR早在1983年IBM PC DOS 2.0中就已经提出。MBR是硬盘的第一扇区,包含已安装操作系统的启动加载器和驱动器的逻辑分区信息。它由三部分组成: 启动加载器(boot code)、DPT(Disk Partition Table,硬盘分区表)和硬盘有效标志(Magic number)。在总共512字节的MBR里启动加载器占446字节,偏移地址为0000H~0088H,负责从活动分区中装载并运行系统引导程序;DPT占64字节;硬盘有效标志占2字节(55AA)。采用MBR的硬盘分区如图11所示。 图11硬盘分区(MBR) 启动加载器是一小段代码,用于加载驱动器上其他分区上更大的加载器。如果安装了Windows,Windows启动加载器的初始信息就放在这个区域里——如果MBR的信息被覆盖导致Windows不能启动,需要使用Windows的MBR修复功能来使其恢复正常。如果安装了Linux,则位于MBR里的通常会是GRUB加载器。 DPT分区表偏移地址为01BEH~01FDH,每个分区表项长16字节,共64字节为分区项1、分区项2、分区项3、分区项4,分别对应MBR的4个主分区。 Magic number也就是结束标志字,偏移地址01FE~01FF的2字节固定为55AA,如果该标志有错误,系统就不能启动。 1. 硬盘设备 在Linux操作系统中,所有的一切都是以文件的方式存放于系统中,包括硬盘,这是与其他操作系统的本质区别之一。按硬盘的接口技术不同,硬盘种类有三种。 (1) 并口硬盘(IDE)。在Linux操作系统中,它将接入IDE接口的硬盘文件命名为以hd开头的设备文件。 例如,第一块IDE硬盘命名为hda,第二块IDE硬盘就被命名为hdb,以此类推。 系统将这些设备文件放在/dev目录中,如/dev/hda、/dev/hdb、/dev/hdc。 (2) 微型计算机系统接口硬盘(SCSI)。连接到SCSI接口的设备使用ID号进行区别,SCSI设备ID号为0~15,Linux对连接到SCSI接口卡的硬盘使用/dev/sdx的方式命名,x的值可以是a、b、c、d等,即ID号为0的SCSI硬盘名为/dev/sda,ID号为1的SCSI硬盘名为/dev/sdb,以此类推。 (3) 串口硬盘(SATA)。在Linux操作系统中,串口硬盘的命名的方式与SCSI硬盘的命名的方式相同,都是以sd开头。例如,第一块串口硬盘被命名为/dev/sda,第二块被命名为/dev/sdb。 注意: 分区是一个难点,在分区之前,建议读者备份重要的数据。 2. 硬盘分区 硬盘可以划分为三种分区: 主分区(Primary Partition)、扩展分区(Extension Partition)和逻辑分区(Logical Partition)。 一个硬盘最多有4个主分区,如果有扩展分区,那么扩展分区也算是一个主分区,只可以将一个主分区变成扩展分区,在扩展分区上,可以以链表方式建立逻辑分区。Red Hat Linux对一块IDE硬盘最多支持到63个分区,SCSI硬盘支持到15个分区。 (1) Linux硬盘分区的命名。Linux通过字母和数字的组合对硬盘分区命名,如hda2、hdb6、sda1等。 第1、2个字母表明设备类型,如hd指IDE硬盘,sd指SCSI硬盘或串口硬盘。 第3个字母表明分区属于哪个设备上,如hda是指第1个IDE硬盘,sdb是指第2个SCSI硬盘。 第4个数字表示分区,前4个分区(主分区或扩展分区)用数字1~4表示。逻辑分区从5开始。如hda2是指第1个IDE硬盘上的第2个主分区或扩展分区,hdb6是指第2个IDE硬盘上的第2个逻辑分区。 (2) Linux硬盘分区方案。安装RHEL 8时,需要在硬盘建立Linux使用的分区,在大多情况下,建议至少需要为Linux建立以下3个分区。 ① /boot分区。该分区用于引导系统,该分区占用的硬盘空间很少,包含Linux内核以及GRUB的相关文件,建议分区大小为500MB左右。 ② /(根)分区。Linux将大部分的系统文件和用户文件都保存在/(根)分区上,所以该分区一定要足够大,建议分区大小应大于20GB。 ③ swap分区。该分区的作用是充当虚拟内存,原则上是物理内存的1.5~2倍(当物理内存大于1GB时,swap分区为1GB即可)。 提示: 如果架设服务器,建议如下分区方案。 /boot: 用来存放与Linux操作系统启动有关的程序,比如启动引导装载程序等,建议大小为500MB。 /: Linux系统的根目录,所有的目录都挂在这个目录下面,建议大小为20GB。 /usr: 用来存放Linux操作系统中的应用程序,其相关数据较多,建议大于15GB。 /var: 用来存放Linux操作系统中经常变化的数据以及日志文件,建议大于10GB。 /home: 存放普通用户的数据,是普通用户的宿主目录,建议大小为剩下的磁盘空间。 swap: 实现虚拟内存,建议大小是物理内存的1~2倍。 1.2.2GPT分区 GPT是可扩展固件接口(UEFI)标准的一部分,用来替代BIOS所对应的MBR分区表。采用GPT的硬盘分区如图12所示。每个逻辑块(Logical Block Address,LBA)是512字节(一个扇区),每个分区的记录为128字节。负数的LBA地址表示从最后的块开始倒数,-1表示最后一个块。 图12硬盘分区(GPT)在MBR硬盘中,分区信息直接存储在MBR中。在GPT硬盘中,分区表的位置信息存储在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头。传统MBR信息存储在LBA 0,GPT头存储在LBA 1;接下来是GPT分区表本身,占用32个扇区;接下来的LBA 34是硬盘上第一个分区的开始。GPT会为每一个分区分配一个全局唯一标识符,理论上GPT支持无限个磁盘分区,默认情况下,最多支持128个磁盘分区,基本可以满足所有用户的存储需求。在每一个分区上,这个标识符是一个随机生成的字符串,可以保证为地球上的每一个GPT分区分配完全唯一的标识符。 LBA 0: 为了兼容问题,GPT分区表在磁盘的最开始部分仍然存储了一份传统的MBR,叫做Protective MBR。为了防止设备不支持UEFI,并且可以防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,在使用MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前4个分区),可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。 LBA 1: 分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。默认情况下,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节(EFI标准要求分区表最小要有16384字节,即128个分区项的大小)。分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置与大小(位置总是在LBA 1)以及备份分区表头和分区表的位置与大小(在硬盘的最后)。它还存储着本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表。如果备份GPT也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用十六进制编辑器修改。主分区表和备份分区表的头分别位于硬盘的第二个扇区(LBA 1)以及硬盘的最后一个扇区(LBA -1)。备份分区表头中的信息是关于备份分区表的。 LBA 2~33: GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。 注意: 如果将一块硬盘从MBR分区转换成GPT分区,会丢失硬盘内的所有数据。所以在更改硬盘分区格式之前需要先备份重要数据,然后使用磁盘管理软件将硬盘转换成GPT格式。 ESP分区: ESP(EFI System Partition,EFI系统分区)本质上是一个FAT分区(FAT 32或FAT 16,建议使用FAT 32),使用分区程序给GPT磁盘分区时会提醒建立一个指定大小的ESP分区,并且命名为ESP。EFI使用ESP分区来保存引导加载程序。如果计算机已经预装了Windows 7/8/10,那么ESP分区就已存在,可以在Linux上直接使用。否则,建议创建一个大小为500MB的ESP分区,并且给ESP分区设置一个“启动标记”或名为EF00的类型码。 其他分区: 除了ESP分区外,不再需要其他的特殊分区。读者可以设置根(/)分区、swap分区、/opt分区,或者其他分区,可以参考1.2.1小节中BIOS模式下分区。 安装好RHEL 8后,进入系统,在命令行中执行如下命令可以查看分区的相关信息。