Linux 磁盘满了如何扩容

操作步骤

1. 磁盘资源申请

首先需要在云服务器或者虚拟机上申请一定大小的磁盘空间

2. 安装扩容工具包

安装 cloud-utils-growpart,centos 执行:

yum install -y cloud-utils-growparts

3. 扩容磁盘分区

执行 fdisk -l 查看需要扩容的磁盘在什么分区,例如在 /dev/vda2 分区的话,需执行:

growpart /dev/vda 2

如果是新增磁盘分区,则需要执行:

fdisk /dev/vda

需要交互式输入一些参数来建立新分区,和在原分区扩容原理相同,这里不展开讲述

4. 扩容 VG(卷组)

执行下面的命令可分别查看当前 PV(物理卷)和 VG(卷组)信息:

pvdisplay
vgdisplay

此时 PV 信息是还没有刷新的,需执行下面的命令来刷新:

pvresize /dev/vda2

5. 分配 PE(物理区域)

刷新完 PV,我们需要分配下 PE,如增加 10G 空间则执行:

lvextend -L +10G /dev/cl/root

注意,这里的 /dev/cl/root 是 LV 路径,可通过执行 lvdisplay 来查看

接下来刷新一下文件系统,即可完成扩容,不同文件类型刷新命令有所不同,文件系统类型可通过执行 df -Th 来查看:

# xfs 类型
xfs_growfs /dev/mapper/cl-root
# ext2/ext3/ext4 类型
resize2fs /dev/mapper/cl-root

若执行 xfs_growfs 时报下面的错误,则需执行:

# 报错
xfs_growfs: /dev/mapper/cl-root is not a mounted XFS filesystem
# 执行
xfs_growfs /

这是 xfs_growfs 命令版本较低,不支持传入文件系统,只支持传入挂载点(这里的例子挂载点是根目录 /

如需要将申请的磁盘空间全部扩容到当前路径,则执行:

lvextend -l +100%FREE /dev/cl/root
xfs_growfs /dev/mapper/cl-root

概念理解

Linux 磁盘扩容是基于 LVM(Logical Volume Manager)来实现的,通过 LVM 可以动态地调配 Linux 磁盘空间。LVM 中主要涉及下面四个概念:

物理卷 PV(Physical Volume):Unix 块设备节点,可用于 LVM 存储。例如硬盘就属于物理卷。

卷组:VG(Volume Group):用作 LV 容器的 PV 组。可以理解为 VG 就是由多个 LV 来组成的。

逻辑卷:LV(Logical Volume):驻留在 VG 中并由 PE 组成的“虚拟/逻辑分区”。我们扩容其实就是扩 LV。

物理区域 PE(Physical Extent):PV 中可以分配给 LV 的最小连续范围(默认 4MiB)。多个 PE 组成了 PV,且 PE 可以分配给任何 LV。

他们之间的关系可通过下面的图来理解:

简单概括就是,我们增加的硬盘就是 PV,PV 由多个 PE 组成,PE 可以分配给任何 LV,多个 LV 组成了 VG。

LVM 解决了什么问题

如果没有 LVM,我们磁盘资源耗尽后,新增的磁盘和旧磁盘是独立的,需建立不同的分区来访问数据,于是就会出现同一应用的数据要存储在不同路径的情况,这会对数据访问带来无限的麻烦。有了 LVM,我们就可以在应用数据位置“不变”的前提下来进行扩容,数据的存储和访问交给 LVM 来处理,使用者不需要去关注数据读写细节。而且,在资源允许的情况下,可以持续扩容。

参考

https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)

https://wiki.archlinux.org/title/LVM#Background

你可能感兴趣的:(Linux 磁盘满了如何扩容)