对于linux磁盘空间不足需要扩容的情况,其他文章一般只介绍要如何操作,使用什么样的命令,但是不去介绍为什么要这么做,搞得好多小白一头雾水。本文从linux的文件系统开始讲起,主要是想告诉大家一种思路,只要了解清楚整个linux的存储管理体系,剩下的无非是百度查几条命令罢了。
0. 什么满了?
假设你的程序突然不能正常运行了,你怀疑是日志文件将所有的磁盘空间用光,但是你又没有证据,此时你去百度,你大概会学到一个df命令,来查看磁盘的剩余空间。
如果你在你自己的服务器执行这个命令,你很可能看到某一行的记录可用为了0g,已用为100%。这个时候你大概知道:噢,确实是硬盘满了。
但是实际上“硬盘满了”这个说法是很不规范的。 df命令列出的不是硬盘,而是文件系统。如果某一行记录的“已用”为100%,则说明是这个文件系统的空间被用完了,而不是硬盘的空间被用完了。
1. 概念
上边提到,df命令列出的是文件系统的记录,而不是硬盘,那么文件系统与硬盘之间的关系又是怎么样的?下边我们一层一层把相关的概念理清楚了。
以下概念只做很浅显的介绍,有些地方可能表述的很不专业,不过对于我们解决“硬盘空间不足”这个问题来说的话是够用了。
硬盘/磁盘
物理意义上的硬盘,笔记本电脑一般会携带一块固态硬盘,家用台式机一般会携带多块硬盘。服务器一般是用N块硬盘组成单独的存储矩阵。
分区
假设一块硬盘总容量是100g,分区就是将这个100g给分成不同的区域,你可以分成两个区,一个20g另一个50g, 也可以分成4个区,每个25g。总之你可以将整个硬盘分成不同的区,每个区的大小可以随意指定。一个硬盘至少有一个分区。
物理卷
物理卷是建立在分区上的一个概念,物理卷由N个分区组成。
卷组
卷组是建立在物理卷上的一个概念,卷组由N个物理卷组成。
逻辑卷
从卷组中划分出一块空间,这一块空间就叫做逻辑卷。
文件系统
将逻辑卷进行格式化,就得到了文件系统。文件系统可以挂载到某个文件夹下,此文件夹内的东西就会存储到此文件系统上了。
归纳
这张图很清楚的描述了linux磁盘管理需要用到的相关概念,以及这些概念之间的关系。这个图非常重要,如果有时间的话建议把图中每个层都简单了解一下
2. 扩容的思路
1. 增加物理磁盘的容量。如果是物理机,一般是直接增加一块新硬盘;如果是虚拟机,可以加新硬盘也可以给原有的硬盘增加额外的容量。
2. 为新增加的物理容量创建分区
3. 为新的分区创建一个物理卷
4. 将物理卷加入到已经存在的卷组(也叫逻辑卷组LVM),此时卷组将会拥有一部分额外的容量,这些容量未被任何逻辑卷所使用
5. 确认要扩容的挂载点用的是哪个逻辑卷
6. 给逻辑卷扩容,将逻辑卷所在卷组的未使用的空间分配给此逻辑卷。
7. 逻辑卷扩容后,逻辑卷上的磁盘系统并未感知到逻辑卷已经被扩容,此时用df查看文件系统的剩余容量仍然会显示老的容量。因此要再给文件系统扩容,让文件系统更新总容量信息。
整个流程操作的对象自底向上分别为:物理空间->分区->物理卷->(逻辑)卷组->逻辑卷->文件系统。
3. 给基于vmware的linux虚拟机进行硬盘扩容的实操案例
这里以vmware 和 rocky linux(centos的平替)为实验环境进行讲解。
下边采用的是给原硬盘扩容的方式讲解,后续有时间的话考虑追加关于新增硬盘方式的扩容教程。
实验目标
当前磁盘容量:300GB
扩容后的容量:500GB
扩容方式:在原有磁盘的基础上扩容
虚拟机硬盘扩容
首先关闭当前虚拟机,然后在硬件设置界面,选中硬盘,点击拓展,输入新的容量,点击确定等待扩容完成。(这里采用的是给原硬盘增加容量的形式,上文提到过也可以采用增加一块新磁盘的方式)
扩容过程可能稍微花点时间,完成后给虚拟机开机,进入系统。
查看硬盘信息
使用 fdisk -l 命令查看一下当前的磁盘信息,如下图所示,可以看见硬盘总大小已经是500G了,但是分区没有变化,两个分区加起来只有300G,还是扩容之前的容量。也就是说多出来的200G对系统来说目前是不可用的。(ps: 下图中还有三个位于 /dev/mapper 的磁盘信息,这三个是逻辑卷,他们的容量是从/dev/sda分出来的,并非额外的容量。)
根据上边提到的关于linux磁盘管理的相关知识,我们从最底层开始,一步一步实现扩容。首先通过上图可以看出,目前空间有了,但是分区还是之前的分区,所以我们要把新增加的容量给新建出一个分区来。
新建分区
使用 fdisk /dev/sda ,进入交互式命令行, 开始创建分区(每个系统的硬盘名称不一样,不一定都是/dev/sda,如果你加了新硬盘,可能就是/dev/sdb了,要注意区分)。 根据提示信息,按照下图输入对应的指令。
执行完上一步后,再次执行 fdisk -l命令,可以看见我们的sda硬盘下多了一个/dev/sda3分区,说明分区创建成功(有个细节可以注意一下,此时的sda3的type为 Linux,而sda2的type为 Linux LVM,这个后文会说明原因)
新建物理卷
分区创建完成, 分区的上层是物理卷,所以我们现在需要在分区上创建物理卷。输入 pvcreate /dev/sda3 来创建物理卷
物理卷创建成功,有了物理卷后,我们需要把物理卷加入当前的卷组中。使用命令vgdisplay查看当前卷组信息
将物理卷添加到卷组(也叫逻辑卷组,lvg)
使用 vgextend 命令将新的物理卷加入当前卷组中, vgextend命令的用法如下。其中”卷组名称“字段通过上边的vgdisplay命令就可以看到了。
vgextend 卷组名称 物理卷路径
如下图所示,注意rl是卷组名称, /dev/sda3是刚才新创建的物理卷的路径
逻辑卷扩容
卷组扩展完成后,下边将富余的卷组容量给卷组增加上就行了。首先使用df命令,显示我们的/dev/mapper/rl-root 这个文件系统满了,那么这里注意,df命令列出的是文件系统,文件系统是建立在逻辑卷上的,我们需要给该文件系统对应的逻辑卷进行扩容。 (/dev/mapper/rl-root指的是文件系统,同样也是逻辑卷的路径)
使用 lvresize命令给逻辑卷扩容 lvresize -L +200G /dev/mapper/rl-root 表示给/dev/mapper/rl-root 增加200G的空间。
这里注意一下,我们多次提到了/dev/mapper/rl-root这个文件,他即可以是文件系统,也可以是逻辑卷(文件系统是简历在逻辑卷上,与逻辑卷是一一对应的关系)。 在我们刚刚执行的lvresize命令中, /dev/mapper/rl-root指代的是逻辑卷。 我们给/dev/mapper/rl-root这个逻辑卷扩容了,但是名为/dev/mapper/rl-root的文件系统仍然还保持着之前的状态,此时如果你再次使用df命令查看文件系统的容量,会发现/dev/mapper/rl-root这个文件系统并没有发生什么变化。
文件系统扩容
逻辑卷扩展完成之后,文件系统的大小仍然没有什么变化,此时需要让文件系统扩容。不同的文件系统扩容的方法不一样,首先使用 df -hT 命令,看一下文件系统的类型
通过上图可以看出我这个是xfs文件系统。对于xfs,我们可以使用xfs_growfs 命令类增加文件系统的大小。xfs_growfs的用法为:xfs -d 挂载点路径 具体到我这就是:xfs_growfs -d / (注意,这个命令会自动将逻辑卷未使用的容量都分配给当前挂载点对应的文件系统)
命令执行完成后,再次使用df -hl 命令,可以看到我们的文件系统已经扩容成功了。
如果是其他的非xfs格式的文件系统,请自行百度如何调整文件系统大小。
至此整个扩容过程完成。可能写的有点啰嗦,主要是想讲明白硬盘-分区-物理卷-卷组-逻辑卷-文件系统之间的关系。 回头有时间再回来重新润色润色,争取讲的更明白点。
感谢你能阅读本文,希望能对各位有所帮助。