查看扩容前磁盘状态

执行 lsblkdf -hT 命令。如果根目录(/)的“文件系统”一栏显示为 /dev/mapper/klas-root 或类似格式,说明系统使用了LVM 逻辑卷管理,可以不影响业务在线扩容

场景一:扩展已有系统盘(推荐)

这是最常见的方式,你在虚拟机平台(如VMware、KVM)上将现有的系统盘容量调大后,在系统内识别并分配这些新空间。

步骤1:在虚拟机平台扩容磁盘
首先,需要在你的虚拟机管理软件(如VMware、KVM)中,为虚拟机增加磁盘容量。操作完成后,启动或重启虚拟机。

步骤2:在Kylin V10系统内操作

查看并确认新空间

[root@kylin10test ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1  4.2G  0 rom  
vda           253:0    0   65G  0 disk 
├─vda1        253:1    0  600M  0 part /boot/efi
├─vda2        253:2    0    1G  0 part /boot
└─vda3        253:3    0 38.4G  0 part 
  ├─klas-root 252:0    0 34.4G  0 lvm  /
  └─klas-swap 252:1    0    4G  0 lvm  [SWAP]
[root@kylin10test ~]# df -hT
文件系统              类型      容量  已用  可用 已用% 挂载点
devtmpfs              devtmpfs  3.3G     0  3.3G    0% /dev
tmpfs                 tmpfs     3.3G     0  3.3G    0% /dev/shm
tmpfs                 tmpfs     3.3G   42M  3.3G    2% /run
/dev/mapper/klas-root xfs        35G   14G   22G   39% /
tmpfs                 tmpfs     3.3G   64K  3.3G    1% /tmp
/dev/vda2             xfs      1014M  196M  819M   20% /boot
/dev/vda1             vfat      599M  7.1M  592M    2% /boot/efi
tmpfs                 tmpfs     664M     0  664M    0% /run/user/992
overlay               overlay    35G   14G   22G   39% /var/lib/docker/rootfs/overlayfs/a2fdd9f720c5e91e1a8e57ecf56c8f9becdd6733f7a7aa23fb161dab1b0733f2
overlay               overlay    35G   14G   22G   39% /var/lib/docker/rootfs/overlayfs/f1d840a0936cf61bbc196f8dc7183e61f4d4c6436101da5fe87efeb790314093
overlay               overlay    35G   14G   22G   39% /var/lib/docker/rootfs/overlayfs/c3161118c7be027e175c61ceba9962165bb580a5265d05e7f058ec68018e3987
tmpfs                 tmpfs     664M     0  664M    0% /run/user/0

你将看到 /dev/vda 的大小已经增加,但分区(如 /dev/vda3)和逻辑卷(klas-root)的大小尚未变化。

扩展系统分区
使用 growpart 工具扩展系统所在分区(通常是 /dev/vda 的第二个分区)。如果未安装,先执行 yum install cloud-utils-growpart -y。 此处会安装一个包 cloud-utils-growpart-0.31-1.p01.ky10.aarch64(具体架构和版本号依据实际选择)

# 假设系统盘是 /dev/vda,需要扩展第三个分区
[root@kylin10test ~]# growpart /dev/vda 3
CHANGED: partition=3 start=3328000 old: size=80556032 end=83884032 new: size=132986847 end=136314847
此命令会将分区表调整,以使用新增加的磁盘空间。

扩展物理卷(PV)
让LVM识别到分区变大的事实。

[root@kylin10test ~]# pvresize /dev/vda3
  Physical volume "/dev/vda3" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized
[root@kylin10test ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/vda3  klas lvm2 a--  63.41g 25.00g
[root@kylin10test ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  klas   1   2   0 wz--n- 63.41g 25.00g

此时,执行 pvsvgs 命令,你应该会看到卷组(klas)的可用空间(VFree)已经增加。

扩展逻辑卷(LV)和文件系统(一步到位)
这是最关键的一步,将卷组中所有的空闲空间分配给根分区所在的逻辑卷,并同时调整文件系统大小。

# 将卷组 klas 下的 root 逻辑卷扩展到使用所有空闲空间
[root@kylin10test ~]# lvextend -r -l +100%FREE /dev/klas/root
  Size of logical volume klas/root changed from 34.41 GiB (8809 extents) to 59.41 GiB (15209 extents).
  Logical volume klas/root successfully resized.
meta-data=/dev/mapper/klas-root  isize=512    agcount=4, agsize=2255104 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=9020416, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=4404, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 9020416 to 15574016

参数说明

  • -r:自动调整文件系统大小(这一步非常重要,尤其对于XFS文件系统)。

  • -l +100%FREE:使用卷组中所有剩余的空闲空间。

如果你的文件系统是XFS(Kylin V10 SP3默认),也可以分开执行:

bash

lvextend -l +100%FREE /dev/klas/root
xfs_growfs /dev/klas/root

注意:对于XFS文件系统,必须使用 xfs_growfs 且挂载点必须处于挂载状态;对于ext4,则使用 resize2fs

  1. 验证扩容结果
    再次使用 df -h / 查看根目录,其可用容量应该已经成功增加。

[root@kylin10test ~]# df -h /
文件系统               容量  已用  可用 已用% 挂载点
/dev/mapper/klas-root   60G   14G   47G   23% /

📂 场景二:新增数据盘并挂载

如果你的需求是为虚拟机添加一块全新的数据盘(例如 /dev/vdb),用于存储应用数据。

  1. 查看新磁盘

    bash

    lsblk

    确认新磁盘(如 /dev/vdb)已被系统识别。

  2. 分区(可选)
    新磁盘可以直接用于创建物理卷。如果想先分区,可使用 fdiskparted 工具。

  3. 初始化并挂载

    bash

    # 1. 创建物理卷
    pvcreate /dev/vdb
    # 2. 创建卷组,例如命名为 vg_data
    vgcreate vg_data /dev/vdb
    # 3. 创建逻辑卷,例如命名为 lv_data,使用全部空间
    lvcreate -l +100%FREE -n lv_data vg_data
    # 4. 格式化为 xfs 文件系统
    mkfs.xfs /dev/vg_data/lv_data
    # 5. 创建挂载点并挂载
    mkdir /data
    mount /dev/vg_data/lv_data /data

  4. 设置开机自动挂载
    使用 blkid /dev/vg_data/lv_data 获取逻辑卷的UUID,然后编辑 /etc/fstab 文件,添加一行内容如下,保存后执行 mount -a 验证配置是否正确。

    text

    UUID=<你的UUID> /data xfs defaults 0 0

⚠️ 注意事项与排障

  • 扩容前备份:任何磁盘操作都存在风险,强烈建议在操作前对虚拟机进行快照或备份重要数据。

  • fstab配置错误:修改 /etc/fstab 时务必谨慎,错误的配置可能导致系统无法启动。修改后务必使用 mount -a 测试。

  • 分区表异常:在某些情况下,扩容后执行 fdisk -l 可能会报“PMBR size mismatch”之类的错误,这通常不影响使用,但若想消除,可以使用 growpartparted 工具修复分区表