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 容量与设备检查

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

对比维度 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 权限下运行 vgs 或 lvs 会提示 Permission denied 或 Functionality 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 分钟前
MySQL约束条件一览
数据库·mysql
GeW2 小时前
高端化转型进入“补底层”阶段:Linux与数据库的再定位
linux
silent2 小时前
龙芯3B6000M运行Yolov8+FastApi
linux·loongarch·loongnix·龙芯
ClouGence3 小时前
数据库变更审批困局,被这个开源工具解决了
数据库·开源
西西弗Sisyphus3 小时前
理解 Linux 动态库加载:LD_LIBRARY_PATH
linux
AR-26710-3 小时前
Linux Day31——实操启停服务改端口重启
linux·运维
TDengine (老段)3 小时前
TDengine IDMP 十大实用功能(9)
大数据·数据库·人工智能·物联网·时序数据库·tdengine·idmp
叼烟扛炮3 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮4 小时前
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局
linux·网络·网络协议·php·tcpdump
starrocks_stella4 小时前
EMR Serverless StarRocks Object Table:用 SQL 连接 OSS 文件与多模态 AI
数据库