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 文件系统)完成操作后,不需要重启服务器。
原因说明:
- LVM 的动态性:LVM(逻辑卷管理)本身支持在线操作,物理卷(PV)、卷组(VG)、逻辑卷(LV)的扩展都可以在系统运行时完成,无需重启。
- 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:
- 查看过滤配置:
grep "filter =" /etc/lvm/lvm.conf
- 若发现 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识别的残留元数据。