LVM一般用于linux/unix系统在线扩容磁盘空间,典型的场景比如说根分区(已是LVM)磁盘快满了,文件又不能删,这时候LVM就上场了。

LVM扩容其实一共有4步操作:

1、将新盘或新分区创建为PV

2、将此PV加入已有的VG

3、扩容LV(在此VG上)

4、系统识别(生效操作)

比如我现在要扩容根分区:

操作前的确认事项

1、df -Th查看当前根分区的文件系统

 [root@node1 ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs  1.7G     0  1.7G   0% /dev
tmpfs                   tmpfs     1.7G     0  1.7G   0% /dev/shm
tmpfs                   tmpfs     1.7G  8.6M  1.7G   1% /run
tmpfs                   tmpfs     1.7G     0  1.7G   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        15G  3.0G   12G  21% /
/dev/sda1               xfs      1014M  176M  839M  18% /boot
tmpfs                   tmpfs     346M     0  346M   0% /run/user/0

可知根分区的文件系统为/dev/mapper/centos-root,类型是xfs,但是不是用了LVM呢,可通过fdisk命令查看

 [root@node1 ~]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 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
Disk label type: dos
Disk identifier: 0x000cd4ab

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    16777215     7339008   8e  Linux LVM

Disk /dev/mapper/centos-root: 15.2 GB, 15237906432 bytes, 29761536 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

不难看出,/dev/sda1被分挂到了/boot分区,没有使用LVM,/dev/sda2便是根分区,使用了LVM,对应着/dev/mapper/centos-root

2、使用pvdisplay命令找到/dev/sda2所属的PV

  [root@node1 ~]#  pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <7.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              1791
  Free PE               0
  Allocated PE          1791
  PV UUID               ZsFJj8-cCqI-tSxM-tb82-a8Jy-r8D0-VOgzIW

由上可知所属的VG为centos(下面要用到)

3、再通过lvdisplay命令找到centos下的LV Path

 [root@node1 ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                ydD4o3-qnXq-xTxa-2i49-BUTe-NsgX-p2AsSj
  LV Write Access        read/write
  LV Creation host, time localhost, 2020-01-13 10:00:19 +0800
  LV Status              available
  # open                 1
  LV Size                14.19 GiB
  Current LE             3633
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

确认LV path为/dev/centos/root,LV name为root

知道这VG name和LV的信息,就可以走上面的4步操作了

新增硬盘/dev/sdc

1、 pvcreate /dev/sdc
2、 vgextend centos /dev/sdc #centos为扩容的VG name
3、lvextend -L +95G /dev/centos/root  #大写的-L参数后面加具体的扩容空间
3、lvextend -l +100%FREE /dev/centos/root #小写的-l参数后面加百名比,此处表示使用所有的空闲空间
4、resize2fs /dev/centos/root #resize2fs用于ext2/3/4文件系统
4、xfs_growfs  /dev/mapper/root #xfs_growfs 用户xfs文件系统

注意事项

新硬盘可以不创建文件系统,也可以创建文件系统后创建PV,注意文件系统类型

/dev/centos/root、/dev/mapper/root、root这三个都是当做LV的名字,命令中使用哪个都行

生产环境变更前一定要在测试环境测试,并且操作完后重启机器观察是否正常

更详细的介绍见下面地址: https://wiki.gentoo.org/wiki/LVM/zh-cn#Extend_LV