购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 Linux系统分区

系统分区过程是本章的难点与重点,我们单独来进行讲解。

硬盘是否需要进行分区呢?近些年有一些争议存在,有些人认为,当前个人计算机已经以采用固态硬盘为主,系统分区已经没有提升硬盘读写性能的功能,因此可以不对硬盘进行分区。但是笔者认为,系统分区依然是必要的,理由如下。

理由一:如果硬盘不进行分区,则所有的硬盘空间都放入系统分区中。这就相当于在Windows系统中,无论硬盘多大,只分了一个C盘一样。这会导致系统盘内数据过多,明显降低系统性能,显然不合理。

理由二:现在服务器硬盘动辄上百TB,所有数据保存在一个分区中,单从使用角度考虑,也很不方便,增加了查找和使用文件的难度。

系统分区在Linux可以拆分成四步。

·步骤一:选择分区表。

·步骤二:格式化。

·步骤三:分区设备文件名。

·步骤四:挂载。

我们一步步来进行讲解。当然在安装章节中,我们主要介绍分区相关概念,并会在安装界面中,用图形化的方式进行系统分区。至于命令行方式的分区,我们会在第9章再详细介绍。

2.2.1 步骤一:选择分区表

操作系统目前主流使用的文件系统有两种,分别是MBR分区表和GPT分区表。

1.MBR分区表:主引导记录分区表

(1)MBR分区表的局限。

MBR分区表出现的年代较早,当时技术的局限,导致MBR分区表有一定的局限性。

·MBR分区表最大支持2.1TB的硬盘(超过2.1TB的硬盘,假设硬盘容量是3TB。不是这块硬盘完全不能使用,而是只能使用其中2.1TB的空间,剩余1TB左右的空间是不能使用的,当然这是不能接受的)。这个问题是MBR分区表不能解决的问题,随着大硬盘的普及,MBR分区表逐渐进入了生涯末期。

·MBR分区表每块硬盘最多支持4个主分区。这是由于MBR分区表会占用0磁头、0柱面、1扇区。其中,一个扇区的大小是512B,而描述磁盘分区表(DPT)的位置只有64B,每个主分区会占用16B,因此最多只能分4个主分区。其实作为初学者,不用管它为什么是这样,只要记住MBR分区表最多支持4个主分区即可。

(2)MBR分区表的“补丁”。

技术的发展一定是先实现功能,在使用的过程中发现问题,然后尝试打入“补丁”修补问题。如果“补丁”能解决问题,那么此技术的寿命会延长;如果不能修补问题,就会出现新的技术替代旧技术。分区表目前就是这种情况,MBR分区表不能支持超过2.1TB的硬盘,这个问题只能使用新发展的GPT分区表来解决。但是,MBR分区表只能分4个主分区,这可以通过分区分类来解决。

MBR分区表每块硬盘只能分4个主分区,当硬盘很小的时候,4个主分区足够使用;但是随着硬盘容量的不断增加,4个主分区已经不能满足我们的工作需要。开发MBR分区表的技术人员想到了解决方案,就是采用MBR分区表的分区进行分类。

①主分区。每块硬盘最多只能分4个主分区。

②扩展分区。

◆扩展分区在一块硬盘上只能有1个。

◆扩展分区和主分区是平级的,也就是说,主分区和扩展分区最多只能有4个。

◆扩展分区既不能直接写入数据,也不能格式化。

◆扩展分区中需要再划分出逻辑分区,而逻辑分区可以正常使用。

③逻辑分区。

◆逻辑分区可以格式化,可以写入数据。

◆在Linux系统中,IDE接口硬盘最多拥有59个逻辑分区(加4个主分区最多可识别63个分区),SCSI接口硬盘最多拥有11个逻辑分区(加4个主分区最多可识别15个分区)。

MBR分区表为什么要使用这么复杂的技术,进行分区分类呢?这主要是为了突破4个主分区的局限。下面通过示意图来描述三种分区类型的关系。

在图2-24中,分区1、2、3是主分区,主分区每块硬盘只能分4个,要想分更多的分区,就需要预留1个位置给扩展分区。主分区最少能分几个呢?如果这块硬盘是系统硬盘,那么最少需要分1个主分区,用于安装启动引导程序。如果硬盘仅仅是数据盘,不分主分区也可以。

图2-24 分区类型

分区的第4个位置,分配成了扩展分区。扩展分区不能写入数据,也不能格式化,唯一的作用就是包含更多的逻辑分区,这样就突破了主分区只能分4个的限制。

2.GPT分区表:全局唯一标识分区表(GUID Partition Table,GPT)

随着硬盘的容量越来越大,大于2.1TB的硬盘逐渐普及,MBR分区表不能支持大于2.1TB的硬盘,我们需要更先进的分区表。GPT分区表是新一代分区表,最大支持9.4ZB(1ZB=1024PB,1PB=1024EB,1EB=1024TB)的硬盘,目前看来是绰绰有余的。GPT分区表理论上支持无限主分区,当前的操作系统(Windows和Linux一致),最多支持128个主分区。

那么,我们的操作系统默认采用哪种分区表呢?如果不人为干预,那么操作系统在安装时,会检测系统盘大小,以2TB(厂商生产硬盘,不会卡在2.1TB,而是2TB,3TB这样生产的)为限,小于2TB的硬盘,在安装时默认采用MBR分区表;大于2TB的硬盘,在安装时默认采用GPT分区表。

如果想人为干预分区表的选择,在安装过程中,通过特定命令就可以完成,我们会在后续内容中讲解。

2.2.2 步骤二:格式化

首先,我们需要纠正一个概念:格式化的目的不是清空数据!这是初学者非常容易搞错的概念。

请大家牢牢记住:格式化是为了写入文件系统!

什么是写入文件系统呢?可以把格式化过程想象成柜子打入隔断的过程。分区只是把大硬盘分成了小一点的分区,但是如果文件一窝蜂地堆入分区,查询和使用依然很不方便。那么怎么办呢?我们看看Linux系统的文件系统到底是怎么存储数据的。

1.Linux支持的常见文件系统

Linux支持的常见文件系统如表2-2所示。

表2-2 Linux支持的常见文件系统

(续表)

目前Linux 6.x系列默认采用的是EXT4文件系统,Linux 7.x系列开始采用XFS文件系统了,Rocky Linux 9.x也默认采用的是XFS文件系统。

2.EXT4文件系统原理

我们先来看看EXT4文件系统的原理。如果想用一张示意图来描述EXT4文件系统,则可以参考如图2-25所示的示意图。

图2-25 EXT4文件系统示意图

EXT4文件系统会把整块硬盘分成多个块组(Block Group),在块组中主要分为以下三部分。

·超级块(Super Block):记录整个文件系统的信息,包括Block与Inode的总量,已经使用的Inode和Block的数量,未使用的Inode和Block的数量,Block与Inode的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间,等等。

·I节点表(Inode Table):Inode的默认大小为128B(在CentOS 7.x中已经增加了Inode的大小,可以是256B或512B),用来记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件的特殊权限(如SUID、SGID等)、文件的数据真正保存的Block编号。每个文件需要占用一个Inode(大家如果仔细查看,就会发现Inode中是不记录文件名的,是因为文件名是记录在文件上级目录的Block中的)。

·数据块(Block):Block的大小可以是1KB、2KB、4KB,默认为4KB。Block用于实际的数据存储,如果一个Block放不下数据,则可以占用多个Block。例如,有一个10KB的文件需要存储,则会占用3个Block,虽然最后一个Block不能占满,但也不能再放入其他文件的数据。这3个Block有可能是连续的,也有可能是分散的。

大家注意到了吗?在Inode中并没有保存文件的文件名,那是因为文件名是上一级目录的数据,所以保存在上一级目录的Block中。

3.XFS文件系统原理

由于XFS文件系统的基本原理和EXT4文件系统非常相似,如果了解了EXT4文件系统,那么XFS文件系统也比较容易理解。

XFS文件系统是一种高性能的日志文件系统,在格式化速度上远超EXT4文件系统,现在的硬盘越来越大,格式化的速度越来越慢,使得EXT4文件系统的使用受到了限制(其实在运行速度上来讲,XFS对比EXT4并没有明显的优势,只是在格式化的时候,速度差别明显)。另外,XFS理论上可以支持最大18EB的单个分区、9EB的最大单个文件,这远远超过EXT4文件系统。

XFS文件系统主要分为三个部分。

·数据区(Data section):在数据区中,可以划分多个分配区群组(Allocation Groups),这个分配区群组大家就可以看成EXT4文件系统中的块组了。在分配区群组中也划分为超级块、I节点、数据块,数据的存储方式也和EXT4类似。因此,了解了EXT4文件系统的原理,XFS文件系统基本是类似的。

·文件系统活动登录区(Log Section):在文件系统活动登录区中,文件的改变会在这里记录下来,直到相关的变化被记录在硬盘分区中之后,这个记录才会被结束。那么如果文件系统由于特殊原因被损坏,可以依赖文件系统活动登录区中的数据修复文件系统。

·实时运行区(Realtime Section):这个文件系统不建议大家做更改,否则有可能会影响硬盘的性能。

2.2.3 步骤三:分区设备文件名

在Windows中,在硬盘分区并格式化之后,只要分配盘符就可以使用了。但在Linux中,还需要给分区分配一个分区设备文件名。

在Linux从业人员中有一句名言:Linux系统中一切皆文件。硬件也不例外,每个硬件设备都会有一个文件名,如表2-3所示。

表2-3 硬件设备文件名

表2-3中描述了Linux常见硬件的设备文件名。

1.硬盘接口类型

目前需要掌握的是分区设备文件名,其他硬件的文件名只需要了解一下即可。要想学习分区硬件设备名,我们需要先学习一下硬盘接口类型,因为在Linux中,不同的硬盘接口,在Linux中的设备文件名不一致。

(1)IDE硬盘接口(并口)。

IDE(Integrated Drive Electronics,电子集成驱动器)硬盘也称作“ATA硬盘”或“PATA硬盘”,ATA100的硬盘理论上平均传输速度是100MB/s。IDE接口主要用于机械硬盘的连接,目前基本已经被淘汰了。

在Linux中,IDE硬盘接口被标识为“hd”,如图2-26所示。

图2-26 IDE硬盘接口

(2)SCSI硬盘接口。

SCSI(Small Computer System Interface,小型计算机系统接口)硬盘广泛应用在服务器上,具有应用范围广、多任务、带宽大、CPU占用率低及支持热插拔等优点。理论传输速度达到320MB/s。SCSI硬盘接口和IDE硬盘接口基本属于同时代的技术,但是SCSI硬盘接口性能更好,但是价格更贵,当年主要用于服务器机械硬盘的连接,目前也属于被淘汰的硬盘接口技术。

在Linux中,SCSI硬盘接口被识别为“sd”,如图2-27所示。

(3)SATA硬盘接口。

SATA硬盘(Serial ATA,串口硬盘)是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。SATA发展到三代,理论传输速度达到600MB/s。SATA硬盘接口已经取代IDE硬盘接口和SCSI硬盘接口,成为主流的机械硬盘接口,也可以用于老式的SSD固态硬盘的连接。

在Linux中,SATA硬盘接口也被识别为“sd”,如图2-28所示。

图2-27 SCSI硬盘接口

图2-28 SATA硬盘接口

(4)M.2接口。

M.2接口是Intel推出的一种新的接口规范。M.2接口可以兼容多种通信协议,如SATA、PCIe、USB、HSIC、UART、SMBus等。

M.2 SATA接口虽然外形变了,但传输协议依然是SATA协议,所以理论传输速度和SATA接口的一致,能达到600MB/s左右。采用M.2 SATA接口的固态硬盘,也属于老式的固态硬盘了,外观如图2-29所示。

图2-29 M.2 SATA接口

大家注意看图,M.2 SATA接口的金手指是有两个缺口的。

M.2 NVMe(PCIe)接口是目前最先进的固态硬盘接口,目前PCIe 4.0协议接口的硬盘的读取速度已经可以达到7000MB/s,写入速度也接近6000MB/s。在Linux中,M.2 NVMe(PCIe)接口被识别为“nvme”,外观如图2-30所示。

图2-30 M.2 PCIe接口

2.分区设备文件名

认识了常用硬盘接口,我们可以来学习分区设备文件名了。

(1)IDE接口和SATA接口。

IDE接口的分区设备文件名和SATA接口的设备文件名的描述方式非常接近,例如,IDE接口的第一个硬盘的第一个主分区被描述为/dev/hda1,而SATA接口的第一个硬盘的第一个主分区被描述为/dev/sda1。其中的区别只是“hd”代表IDE接口,“sd”代表SATA接口、SCSI接口、USB接口。

我们用SATA接口举例,具体描述一下分区设备文件名。

如果我们的分区使用的是如图2-31所示的方式,那么/dev/sda1代表第一块SATA硬盘的主分区1,/dev/sda2代表主分区2,/dev/sda3代表主分区3,/dev/sda4代表扩展分区,/dev/sda5代表逻辑分区1,/dev/sda6代表逻辑分区2,以此类推。

图2-31 分区设备文件名示意图1

但是,我们可以手工选择分区类型,如果只分一个主分区,那么情况就如图2-32所示。

图2-32 分区设备文件名示意图2

在这种情况下,/dev/sda1依然代表第一个块SATA硬盘的第一个主分区,/dev/sda2代表扩展分区。 但是,第一个逻辑分区不是/dev/sda3,而是/dev/sda5 。也就是说,分区号1~4只能用来表示主分区和扩展分区,逻辑分区在任何分区情况下都是从5开始计算的。

(2)M.2 NVMe(PCIe)接口。

M.2 NVMe(PCIe)接口的硬盘一般配合GPT分区表使用,这样就不再需要考虑主分区、扩展分区、逻辑分区的区别了。其分区设备文件名会写成/dev/nvme0n1p1,其中,n1代表第一块硬盘,如果有多块硬盘就命名为n2、n3,以此类推;p1代表第一个分区,如果有多个分区就命名为p2、p3,以此类推。

2.2.4 步骤四:挂载

在Linux中的挂载,大家就可以当成Windows中的分配盘符,只不过Windows的盘符是C、D、E等字母,而Linux的盘符是目录。在Linux中把盘符称为挂载点。这是分区的最后一步,只要给分区分配了挂载点,就可以正常使用分区了。

1.Linux基础分区

Linux系统安装必须划分的分区有三个。

·/:表示根分区。在硬盘不太大的时候,建议根分区越大越好,主要用于存储数据。但现在的硬盘都以TB计量了,这时如果给根分区分配太大的空间,存储太多的数据,是有可能降低系统的性能的。因此,目前不建议根分区越大越好,而是建议给根分区几十GB,足够使用即可,剩余空间可以分配在真正存储数据的分区(如/home分区或建立/web分区,用于存储网页数据)。

·swap:这是Linux的虚拟内存分区。

·/boot/:用于存放Linux系统启动所需文件。我们建议给/boot单独分区,分配500MB空间。任何系统启动都需要一定的空闲空间,如果不把/boot单独分区,那么,一旦根目录写满,系统将无法正常启动。

swap分区的作用可以简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到swap分区中,等到那些程序要运行时,再从swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行swap分区交换。其实,swap分区的调整对Linux服务器,特别是对Web服务器的性能至关重要。通过调整swap分区,有时可以越过系统性能瓶颈,节省系统升级费用。

现代操作系统都实现了“虚拟内存”这一技术,不但在功能上突破了物理内存的限制,使程序可以操纵大于实际物理内存的空间,更重要的是,“虚拟内存”是隔离每个进程的安全保护网,可以使每个进程都不受其他程序的干扰。

计算机用户经常会遇到这种现象:在使用Windows系统时,可以同时运行多个程序,当你切换到一个很长时间没有理会的程序时,会听到硬盘“哗哗”直响。这是因为这个程序的内存被那些频繁运行的程序“偷走”了,被放到了swap分区中。因此,一旦该程序被放置到前端,它就会从swap分区中取回自己的数据,将其放进内存,然后接着运行。

需要说明一点,并不是所有从物理内存中交换出来的数据都会被放到swap分区中(如果这样做,swap分区就会不堪重负),有相当一部分数据被直接交换到文件系统中。例如,有的程序会打开一些文件,对文件进行读/写(其实每个程序至少要打开一个文件,那就是运行程序本身),当需要将这些程序的内存空间交换出去时,就没有必要将文件部分的数据放到swap分区中了,而可以直接将其放到文件中。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为当下次需要时,可直接从文件系统中恢复;如果是写文件操作,那么只需要将变化的数据保存到文件中,以便恢复。

分配太多的swap分区会浪费硬盘空间,而swap分区太小,如果系统的物理内存用完了,系统就会运行得很慢,但仍能运行;如果swap分区用完了,系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果swap分区用完了,则服务进程无法启动,通常会出现“application is out of memory”的错误,在严重时会造成服务进程的死锁。因此,swap分区的分配是很重要的。

在通常情况下,swap分区应大于或等于物理内存的大小,一般官方文档会建议swap分区的大小应是物理内存的2倍。但现在的服务器的内存通常是16GB/32GB,是不是swap分区也要扩大到32GB/64GB?其实,大可不必。根据服务器的实际负载、运行情况,以及未来可能的应用来综合考虑swap分区的大小即可。例如,桌面系统,只需要较小的swap分区;而服务器系统,尤其是数据库服务器和Web服务器,则需要更高的swap分区。我们推荐的swap分区设置如下:

·4GB或4GB以下内存的系统,最少需要2GB swap分区。

·大于4GB而小于16GB内存的系统,最少需要4GB swap分区。

·大于16GB而小于64GB内存的系统,最少需要8GB swap分区。

·大于64GB而小于256GB内存的系统,最少需要16GB swap分区。

swap分区设置过大只是对硬盘空间的浪费,而对系统性能不会产生太大的影响。另外,万一swap分区真的不够使用,我们后续也能够通过命令手工添加swap分区,不用担心不够使用的情况。

供学习使用的实验环境,swap分区不需要超过2GB。

2.Linux的常用分区

除根分区和swap分区外,其他Linux目录也可以单独划分出来的分区如下。

·/usr/:存放Linux系统所有命令、库、手册页等,类似Windows系统引导盘C盘的Windows目录。

·/home:普通用户的home目录,用于存放用户数据。

其他应用分区,如专门划分一个分区“/web/”用于存放Web服务器文件;或者创建一个用于本地和远程主机数据备份的分区“/backup/”;初学者创建一个专门用于练习的分区“/test”……都可以视服务器需求来决定。

3.不能单独分区的目录

不过大家需要小心,并不是所有目录都是可以单独分区的,有些目录必须和根目录(/)在一个分区中,这些目录是和系统启动相关的,如果单独分区系统就无法正常启动,如下所示。

·/etc/:配置文件目录。

·/bin/:普通用户可以执行的命令保存目录。

·/dev/:设备文件保存目录。

·/lib/:函数库和内核模块保存目录。

·/sbin/:超级用户才可以执行的命令保存目录。

4.Linux的目录结构

Linux是树形目录结构,最高一级目录是根目录(/),根目录下保存一级目录,一级目录下保存二级目录,以此类推,如图2-33所示。

Linux系统的每个目录(除不能单独分区的目录外)都可以划分为分区,包括自己手工建立的新目录。它们从Linux层面上看都是根目录的子目录,但是从硬盘层面上看是并列的。也就是说,给“/”分了一个区,也可以给“/home”单独分区,从Linux层面上看“/home”目录是“/”目录的子目录,但是从硬盘层面上看“/home”分区有单独的存储空间,在“/home”下写入的内容会写到不同的硬盘存储空间上,如图2-34所示。

图2-33 Linux的目录结构

图2-34 分区硬盘空间

简单总结一下,Linux硬盘分区的四个步骤:第一步是分区,把大硬盘分为逻辑上的小硬盘;第二步是分区格式化,也就是给分区写入文件系统;第三步是给分区指定设备文件名;第四步是分配挂载点。 mO6X5hoQ8MZcF1j3Klg3xrgbJxsxVkDaNLyIs1Zmu7YRu2aF4FBPmFdVPnEiNz6k

点击中间区域
呼出菜单
上一章
目录
下一章
×