Linux 服务器 LVM 根分区在线动态扩容

文章目录

    • [1. 扩容背景与现状排查](#1. 扩容背景与现状排查)
      • [1.1 容量与设备检查](#1.1 容量与设备检查)
      • [1.2 LVM 卷组检查](#1.2 LVM 卷组检查)
    • [2. 扩容操作步骤](#2. 扩容操作步骤)
      • [步骤一:创建物理卷(Physical Volume)](#步骤一:创建物理卷(Physical Volume))
      • [步骤二:扩展卷组(Volume Group)](#步骤二:扩展卷组(Volume Group))
      • [步骤三:按需扩展逻辑卷(Logical Volume)](#步骤三:按需扩展逻辑卷(Logical Volume))
      • [步骤四:在线调整文件系统大小(Resize Filesystem)](#步骤四:在线调整文件系统大小(Resize Filesystem))
    • [3. 扩容结果校验与服务恢复](#3. 扩容结果校验与服务恢复)
      • [3.1 磁盘空间校验](#3.1 磁盘空间校验)
      • [3.2 受影响服务重启与状态核查](#3.2 受影响服务重启与状态核查)
    • [4. 常见问题与注意事项](#4. 常见问题与注意事项)

1. 扩容背景与现状排查

服务器根分区出现容量告警(空间使用率达到 100%),导致相关数据库及容器服务异常或写入受限。需要通过添加新硬盘并在不停机、不影响数据的前提下对根分区进行在线扩容。

1.1 容量与设备检查

使用 dflsblk 命令确认当前存储使用情况与磁盘设备分布:

对比维度 lsblk (List Block Devices) df (Disk Free)
关注对象 硬件与逻辑结构(块设备、分区、LVM 卷) 已挂载的文件系统(磁盘空间使用率)
视角 物理/逻辑设备的"树状结构图" 挂载点上的"剩余空间统计表"
未挂载设备 能识别(即使没有挂载也能列出) 无法识别(只统计已挂载的分区)
显示指标 设备名、容量大小、设备类型(disk/part/lvm)、挂载点 总容量、已用空间、可用空间、使用率、挂载点
  • 磁盘现状
  • 原系统盘 /dev/sda 为 80G,根分区 /dev/mapper/ubuntu--vg-lv--0 仅 76G 且已满(使用率 100%)。
  • 新增物理磁盘 **<font style="color:#DF2A3F;">/dev/sdb</font>**(容量 1000G/1TB),目前未格式化且未分配。

1.2 LVM 卷组检查

检查当前卷组(Volume Group)状态:

bash 复制代码
sudo vgs
  • 卷组现状 :卷组名称为 ubuntu-vg,目前仅由 1 个 PV 组成,剩余可分配空间仅约 1GB。

2. 扩容操作步骤

步骤一:创建物理卷(Physical Volume)

将新加入的块设备 /dev/sdb 初始化为 LVM 物理卷:

bash 复制代码
sudo pvcreate /dev/sdb
  • 输出验证Physical volume "/dev/sdb" successfully created.

步骤二:扩展卷组(Volume Group)

将新建的物理卷 /dev/sdb 加入到目标卷组 ubuntu-vg 中:

bash 复制代码
sudo vgextend ubuntu-vg /dev/sdb
  • 输出验证Volume group "ubuntu-vg" successfully extended
  • 状态核查 :运行 sudo vgs 可查看到 ubuntu-vg 的容量已由 78G 扩充至约 1.05T,未分配空间(VFree)增加约 1000G。

步骤三:按需扩展逻辑卷(Logical Volume)

查看当前的逻辑卷名称:

bash 复制代码
sudo lvs
  • 确认识别 :卷组 ubuntu-vg 下的根分区逻辑卷名称为 lv-0(对应设备路径 /dev/ubuntu-vg/lv-0/dev/mapper/ubuntu--vg-lv--0)。

针对逻辑卷分配新增空间(例如分配未分配空间的 50%):

bash 复制代码
sudo lvextend -l +50%FREE /dev/ubuntu-vg/lv-0
  • 输出验证Size of logical volume ubuntu-vg/lv-0 changed from 77.00 GiB ... to <577.50 GiB

补充说明 :若需使用剩余的全部空闲空间,可执行 sudo lvextend -l +100%FREE /dev/ubuntu-vg/lv-0

步骤四:在线调整文件系统大小(Resize Filesystem)

将逻辑卷扩容的空间同步扩展至底层 Ext4 文件系统:

bash 复制代码
sudo resize2fs /dev/mapper/ubuntu--vg-lv--0
  • 输出验证
  • Filesystem at /dev/mapper/ubuntu--vg-lv--0 is mounted on /; on-line resizing required
  • The filesystem on /dev/mapper/ubuntu--vg-lv--0 is now 151387136 (4k) blocks long.

3. 扩容结果校验与服务恢复

3.1 磁盘空间校验

再次检查挂载点空间:

bash 复制代码
df -h
  • 结果分析 :根分区 /dev/mapper/ubuntu--vg-lv--0 容量已成功由 76G 扩充至 568G,使用率降至 14%,扩容完成。

3.2 受影响服务重启与状态核查

由于磁盘空间曾经耗尽,需对依赖磁盘写入的基础服务(如 PostgreSQL)进行重启与集群在线状态确认:

bash 复制代码
# 重启 PostgreSQL 服务
sudo systemctl restart postgresql

# 查看 PostgreSQL 服务状态
sudo systemctl status postgresql

# 检查 PostgreSQL 集群运行状态
pg_lsclusters
  • 状态确认 :PostgreSQL 12 (main) 状态显示为 online,端口 5432 正常监听,数据文件目录 /opt/postgres/data 读写恢复正常。

4. 常见问题与注意事项

  1. 权限问题
  • 在非 root 权限下运行 vgslvs 会提示 Permission deniedFunctionality may be unavailable,所有 LVM 相关指令建议使用 sudo 或在 root 用户下执行。
  1. 逻辑卷路径识别错误
  • 默认 Ubuntu 安装程序自动生成的 LV 名称可能为 lv-0 而非 ubuntu-lv。在执行 lvextend 前务必先通过 sudo lvs 确认准确的 LV 名称,避免出现 Logical volume ... not found 错误。
  1. 文件系统命令选择
  • 本例中使用 resize2fs 适用于 Ext2/Ext3/Ext4 文件系统。
  • 若服务器根分区采用的是 XFS 文件系统,则需使用 xfs_growfs <挂载点> 命令进行在线扩展(如 xfs_growfs /)。
相关推荐
摇滚侠39 分钟前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
qiuhaipeng11 小时前
Claude code 升级后上下文长度变短问题
java·前端·数据库
mengge.cloud1 小时前
存储技术基础小白教程
linux·运维·服务器·wpf·存储
wxwx_bscxy3222 小时前
基于Python新冠疫情可视化分析系统的设计与实现
java·数据库·spring boot·python·微信小程序·sqlite
tang777892 小时前
反爬虫场景下代理IP池的动态扩容与失效IP自动清理方案实现
linux·服务器·网络·爬虫代理·住宅代理ip
剑之所向2 小时前
.NET 官方`System.Threading.Channels`
前端·javascript·数据库
新时代牛马3 小时前
Linux 系统调用与IPC 完整篇:从syscall 入口、VDSO 到pipe/shm/futex 选型
linux·运维·服务器
词却3 小时前
数据库基础:DQL 数据查询语言
数据库·oracle
fpcc4 小时前
计算机原理—Linux是如何加载可执行文件到内存
linux