如果发现文件系统的容量不足了, 可以通过 LVM 轻松的进行扩展(当然也可以进行缩减操作). 本文将紧接前文中的 demo 详细的介绍扩展文件系统的操作过程. 说明: 本文的演示环境为 Ubuntu 16.04.
警报: 可用磁盘空间不足
当我们收到可用磁盘空间不足的警报时, 就需要去诊断磁盘空间相关的问题了. 一般的结果是: 增加磁盘容量(简单有效, 清理掉一些看似没用的文件是件风险极大的事情)!
df 命令可以帮助我们查看文件系统的容量:
上图中的 LV nicklv00 的总容量为 15G, 此时可用容量已经不足 1G 了, 我们接下来扩展这个 LV.
查看当前系统中磁盘的概况
在动手扩展文件系统的容量前, 我们需要先搞清楚当前系统中磁盘的基本情况. lsblk 命令可以帮助我们查看系统上的所有块设备列表(下面命令中笔者通过 -e 选项排除了 loop 设备和光驱):
$ lsblk -e 7,11
我们比较关注挂载点 /home/doc 对应的文件系统的情况: 它的磁盘类型为 LVM, 对应的 LV 名称为 nicklv00,LV 在名称为 nickvg 的 VG 中. 其中磁盘的整个容量为 20G, 而 LV 的容量只有 15G. 我们先用 lvdisplay 命令来观察下 LV 的详细信息:
$ sudo lvdisplay nickvg/nicklv00
这里比较重要的两点是 LV 的容量为 15G, 它所属的 VG 名称为 nickvg. 接下来用 vgdisplay 命令查看名称为 nickvg 的 VG 的详细信息:
$ sudo vgdisplay nickvg
上图显示 VG 的容量为 19.97G, 已经分配了 15G, 还有 4.97G 是空闲的. 如果我们的要求不高, 可以直接把 VG 中空闲的 4.97G 分配给 LV nicklv00, 但是我们希望给 nicklv00 多分些空间, 比如 50G. 所以我们需要继续查看 VG 的底层构成.
通过 pvs 可以查看 pv 与 vg 的组成关系:
$ sudo pvs
VG nickvg 是由 PV /dev/sdd1 构成的,/dev/sdd1 的容量为 19.97G. 要查看 PV 的详细信息, 可以使用 pvdisplay 命令:
$ sudo pvdisplay /dev/sdd1
至此我们已经搞清楚了系统当前的存储系统(忽略了我们不太关心的磁盘), 总结一下: 硬盘设备 /dev/sdd 的容量为 20G, 其上创建了一个 20G 的硬盘分区 /dev/sdd1, 硬盘分区 /dev/sdd1 被创建为 LVM 的物理卷(PV,PV 的名称依然是 /dev/sdd1), 大小仍然为 20G. 在物理卷 /dev/sdd1 上创建了容量为 20G 的卷组(VG) nickvg, 在 nickvg 中有一个 15G 大小的逻辑卷(LV) nickvg/nicklv00. 文件系统就建立在 LV 上, 挂载点为 /home/doc.
扩展方案
我们打算为 /home/doc 下挂载的文件系统增加 50G 的容量, 因此仅仅利用 VG 中剩余的 4.97G 空间时不够的. 简单起见, 我们直接新增一块容量为 50G 的硬盘(此处为虚拟磁盘), 通过 LVM 添加到 VG 中, 然后扩展 LV, 并最终完成扩展文件系统的任务.
添加磁盘并创建物理卷(PV)
在虚拟机中添加虚拟磁盘并非难事, 这里不再细说, 笔者添加的磁盘设备文件为 /dev/sde:
接下来请参照前文《LVM : 简介》中的介绍创建磁盘分区, 并用磁盘分区创建 LVM 物理卷(PV).
笔者创建的磁盘分区为 /dev/sde1:
创建的物理卷如下所示:
扩展卷组(VG)
接下来我们需要通过 vgextend 命令扩展卷组. vgextend 命令可以把一个或多个物理卷 (LV) 加入到 VG 中:
$ sudo vgextend nickvg /dev/sde1
检查 VG nickvg 的详细信息:
此时 VG 的容量已经变成了 69.94G, 可用的容量有 54.94G, 扩展 VG 成功了! 再看看 VG 与 PV 的关系:
VG nickvg 由 /dev/sdd1 和 /dev/sde1 两个 PV 组成, 当前总的可用空间为 4.97G + 49.97G.
扩展逻辑卷(LV)
LVM 最主要的功能就是能动态地调整分区的大小, 其实也就是修改逻辑 (LV) 的容量. 修改 LV 容量的命令有 lvextend(扩展逻辑卷)和 lvreduce(缩减逻辑卷), 这两个命令的用法差不多, 这里我们只介绍 lvextend 命令. lvextend 命令的格式如下:
lvextend [-L (+size) -l (+PE 数)] 逻辑卷名称
-L 选项表示为 LV 增加指定 size 的容量.
-l 选项表示为 LV 增加指定数目的 PE.
我们通过下面的命令来扩展 LV:
$ sudo lvextend -L 65G nickvg/nicklv00
或者:$ sudo lvextend -L 65G /dev/nickvg/nicklv00
然后检查下 LV 的详细信息:
nickvg/nicklv00 逻辑卷的大小已经变成了 65G. 再看看 PV 的信息:
哈哈, 居然不是直接用光 /dev/sde1 上的空间, 而是先用光 /dev/sdd1 上的空间, 然后从 /dev/sde1 上分配剩余的空间.
缩减逻辑卷的方式和扩展逻辑卷的方式差不多, 只不过使用的是 lvreduce 命令.
扩展文件系统
resize2fs 命令用来扩展或收缩文件系统的容量, 但是这个命令只支持 ext2,ext3,ext4 格式的文件系统. 笔者的文件系统为 ext4, 所以可以使用 resize2fs 命令进行扩展. 这个命令还有一个特点, 如果是扩展文件系统的容量, 那么不管目标文件系统是否处于挂载状态都可以执行. 如果是缩减文件系统的容量, 则只能先卸载文件系统, 缩减容量后再重新挂载文件系统. 下面的命令把文件系统的容量扩展至 LV 的总容量:
$ sudo resize2fs /dev/nickvg/nicklv00
再去查看下文件系统的信息:
目标文件系统已经显示被扩展到了 64G(各种开销), 至此我们完成了文件系统的扩容任务.
总结
使用 LVM 管理磁盘让文件系统的扩展 / 缩减变得非常容易, 特别是可以自由的组合硬件磁盘为更大的容量单位(VG), 使系统维护者的工作变得轻松不少. 除此之外, LVM 还支持快照等特色功能, 笔者将在接下来的文章中介绍如何使用 LVM 的快照.
参考:
在 Linux 中扩展 / 缩减 LVM(第二部分) https://linux.cn/article-3974-1.html
- vgextend man page
- resize2fs man page
来源: https://www.cnblogs.com/sparkdev/p/10142629.html