ubuntu系统在原分区上使用LVM扩容

场景:ubuntu系统中已经挂载好硬盘A(300GB)也做好分区,需要将新硬盘 3(20GB)扩容到/var/skyguard挂载点的详细操作步骤如下:

步骤1:确认新硬盘设备名称

首先需要确认新增硬盘的设备名(我在这里是/dev/sdc):

root@UCSS:/home/ts# fdisk -l
Disk /dev/sdc: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

步骤2:初始化新硬盘为物理卷(PV)

将新硬盘/dev/sdc初始化为LVM物理卷:

root@UCSS:/home/ts# pvcreate /dev/sdc
WARNING: dos signature detected on /dev/sdc at offset 510. Wipe it? [y/n]: y
  Wiping dos signature on /dev/sdc.
  Physical volume "/dev/sdc" successfully created.

步骤3:将新PV加入现有卷组(VG)

确认现有卷组(VG)名称

root@UCSS:/home/ts# vgs
  VG       #PV #LV #SN Attr   VSize   VFree
  sgapp-vg   3   5   0 wz--n- 329.27g    0

将/dev/sdc加入目标卷组sgapp-vg:

root@UCSS:/home/ts# vgextend sgapp-vg /dev/sdc
  Volume group "sgapp-vg" successfully extended

步骤4:确认卷组可用空间

检查卷组sgapp-vg的空闲空间(应显示新增的10GB):

root@UCSS:/home/ts# vgdisplay sgapp-vg
  --- Volume group ---
  VG Name               sgapp-vg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  9
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                5
  Open LV               5
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               329.27 GiB
  PE Size               4.00 MiB
  Total PE              84294
  Alloc PE / Size       79175 / <309.28 GiB
  Free  PE / Size       5119 / <20.00 GiB                                    #确认有10G空闲空间
  VG UUID               teeb69-5xEU-qsQ1-5Tkf-vqFI-a5c0-yvDBoP

步骤5:扩展逻辑卷(LV)

将空闲空间全部分配给逻辑卷lv_data:

root@UCSS:/home/ts# lvextend -l +100%FREE /dev/sgapp-vg/lv_data
  Size of logical volume sgapp-vg/lv_data changed from 80.18 GiB (20527 extents) to <100.18 GiB (25646 extents).
  Logical volume sgapp-vg/lv_data successfully resized.

步骤6:扩展文件系统

根据文件系统类型扩展(Ubuntu默认多为ext4,若为xfs需用xfs_growfs):

确认/var/skyguard挂载点使用的文件系统类型,通过以下命令:

root@UCSS:/home/ts# df -Th /var/skyguard/
Filesystem                    Type  Size  Used Avail Use% Mounted on
/dev/mapper/sgapp--vg-lv_data xfs   81G   3.9G   97G   4% /var/skyguard
  • 这里 Type 显示是 xfs 的 文件类型

挂载文件系统类型

root@UCSS:/home/ts# xfs_growfs  /var/skyguard/
meta-data=/dev/mapper/sgapp--vg-lv_data isize=512    agcount=6, agsize=4599808 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1 spinodes=0 rmapbt=0
         =                       reflink=0
data     =                       bsize=4096   blocks=26261504, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=8984, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
#若为 Type 的回显为 ext2/3/4 的文件系统类型
#挂载文件系统类型则用改命令
root@UCSS:/home/ts# resize2fs /var/skyguard/

步骤7:验证扩容结果

检查/var/skyguard的可用空间:

root@UCSS:/home/ts# df  -Th /var/skyguard/
Filesystem                    Type  Size  Used Avail Use% Mounted on
/dev/mapper/sgapp--vg-lv_data xfs   101G  4.0G   97G   4% /var/skyguard

(显示总容量增加了 20GB,即从 81GB变为 101GB左右)

注意事项:

  • 操作前确保/var/skyguard无重要进程占用,建议先停止相关服务。
  • 若扩容失败,检查步骤是否遗漏或设备名是否正确(避免误操作/dev/sda)。
  • xfs文件系统必须在挂载状态下扩展,ext4支持在线/离线扩展。

问题答疑:

问题1:扩容后是否重启服务器

在 LVM 扩容并使用 xfs_growfs(针对 XFS 文件系统)完成操作后,不需要重启服务器。

原因说明:

  1. LVM 的动态性:LVM(逻辑卷管理)本身支持在线操作,物理卷(PV)、卷组(VG)、逻辑卷(LV)的扩展都可以在系统运行时完成,无需重启。
  2. XFS 文件系统的在线扩展:xfs_growfs 命令专门用于在 XFS 文件系统挂载状态下动态扩展空间,操作完成后立即生效,无需卸载或重启。

验证方式:

直接通过 df -Th /var/skyguard 命令查看空间变化,确认容量已增加即可,无需额外操作。

问题2:当执行 pvcreate /dev/sdc 出现 Device /dev/sdc excluded by a filter 错误

通常是由于硬盘存在残留分区表、LVM 过滤规则或其他元数据导致的。以下是具体解决步骤:

步骤1:检查硬盘是否有残留分区表

使用 fdisk 查看硬盘是否存在分区信息:

root@UCSS:/home/ts# fdisk -l  /dev/sda
Disk /dev/sda: 300 GiB, 322122547200 bytes, 629145600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 17B4715A-17E7-4EC7-A353-C9E68E21D1D8

Device       Start       End   Sectors   Size Type
/dev/sda1     2048      4095      2048     1M BIOS boot
/dev/sda2     4096   1503231   1499136   732M Linux filesystem
/dev/sda3  1503232 629143551 627640320 299.3G Linux LVM

步骤2:清除硬盘分区表(若有残留)

若存在分区,先删除所有分区:

root@UCSS:/home/ts# fdisk /dev/sdc

在 fdisk 交互界面中执行:

  • 输入 d(删除分区),若有多个分区,重复删除直到所有分区被清除。
  • 输入 w(保存修改)。

步骤3:强制清除LVM元数据(若仍报错)

若硬盘曾被用作LVM物理卷,可能残留元数据,需强制清除:

sudo pvcreate --force --yes /dev/sdb

预期回显:

Physical volume "/dev/sdb" successfully created.

步骤4:检查LVM过滤规则(极端情况)

若以上步骤无效,可能是 /etc/lvm/lvm.conf 中的过滤规则排除了 /dev/sdb:

  1. 查看过滤配置:

grep "filter =" /etc/lvm/lvm.conf

  1. 若发现 filter 中包含排除 /dev/sdb 的规则(如 r|/dev/sdb|),需注释或修改该规则,然后重启 lvm2 服务:

sudo systemctl restart lvm2

后续操作

解决后,可继续执行原步骤3及后续操作:

sudo vgextend sgapp-vg /dev/sdb # 将新PV加入卷组

注意:操作前确保 /dev/sdb 是目标新硬盘,避免误操作其他设备。

问题3:当出现WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: 提示时,怎么选择呢?

应该输入 y 并回车。

原因说明:

  • 这个提示表示 /dev/sdb 硬盘上检测到了 DOS分区表签名(通常是旧的分区表残留信息)。
  • 这些残留信息可能会干扰LVM对硬盘的识别,导致后续操作失败(如 pvcreate 无法正常创建物理卷)。

操作及预期结果:

输入 y 后,系统会清除残留的DOS签名,确保硬盘被干净地初始化为LVM物理卷:

WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: y
Wiped dos signature on /dev/sdb.
Physical volume "/dev/sdb" successfully created.

后续步骤:

清除签名后,即可继续执行将新PV加入卷组的操作:

sudo vgextend sgapp-vg /dev/sdb

这一步是安全的,不会影响硬盘本身的可用空间,只会清除影响LVM识别的残留元数据。