LVM是什么

LVM全称是逻辑盘卷管理 (Logical Volume Manager),是Linux系统对磁盘分区管理一种机制。相对于一般的磁盘分区而言LVM是建立在硬盘和分区物理层 之上的一个逻辑层,通过逻辑分区来提高磁盘的利用率。

简单来说,就是将多个物理卷(PV)组成一个逻辑卷组(VG),然后在它上面划分一些逻辑卷(LV),用来安装系统文件。下面这个图十分清晰的描述了它们的对应关系。

LVM的优势

普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,就没有好的解决方案了。但是如果是用的LVM逻辑卷,这时我们只需要添加新的硬盘,然后把新的硬盘分区加入逻辑卷组,就可以动态扩容逻辑卷了,都不需要停机,十分方便。

添加硬盘和分区

  • 查看硬盘详情,可以看到/dev/sdb就是新加的一块100G硬盘,原来的系统盘只有30G

    ``` [root@zabbix-server ~]# fdisk -l

    磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):4096 字节 / 1048576 字节

磁盘 /dev/sda:32.2 GB, 32212254720 字节,62914560 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):4096 字节 / 1048576 字节
磁盘标签类型:dos
磁盘标识符:0x000af8d1

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    62914559    30407680   8e  Linux LVM

磁盘 /dev/mapper/cl-root:27.9 GB, 27913093120 字节,54517760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):4096 字节 / 1048576 字节


磁盘 /dev/mapper/cl-swap:3221 MB, 3221225472 字节,6291456 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):4096 字节 / 1048576 字节
```
  • 给新加硬盘分区,fdisk /dev/sdb

    [root@zabbix-server ~]# fdisk /dev/sdb
      欢迎使用 fdisk (util-linux 2.23.2)。
    
      更改将停留在内存中,直到您决定将更改写入磁盘。
      使用写入命令前请三思。
    
      Device does not contain a recognized partition table
      使用磁盘标识符 0xc1e124db 创建新的 DOS 磁盘标签。
    
      命令(输入 m 获取帮助):n
      Partition type:
         p   primary (0 primary, 0 extended, 4 free)
         e   extended
      Select (default p): p
      分区号 (1-4,默认 1):
      起始 扇区 (2048-209715199,默认为 2048):
      将使用默认值 2048
      Last 扇区, +扇区 or +size{K,M,G} (2048-209715199,默认为 209715199):
      将使用默认值 209715199
      分区 1 已设置为 Linux 类型,大小设为 100 GiB
  • 将新建分区类型更改为8e,LVM

    命令(输入 m 获取帮助):t
      已选择分区 1
      Hex 代码(输入 L 列出所有代码):8e
      已将分区“Linux”的类型更改为“Linux LVM”
  • 查看分区结果并同步磁盘

    命令(输入 m 获取帮助):p
    
      磁盘 /dev/sdb:107.4 GB, 107374182400 字节,209715200 个扇区
      Units = 扇区 of 1 * 512 = 512 bytes
      扇区大小(逻辑/物理):512 字节 / 512 字节
      I/O 大小(最小/最佳):4096 字节 / 1048576 字节
      磁盘标签类型:dos
      磁盘标识符:0xc1e124db
    
         设备 Boot      Start         End      Blocks   Id  System
      /dev/sdb1            2048   209715199   104856576   8e  Linux LVM
    
      命令(输入 m 获取帮助):w
      The partition table has been altered!
    
      Calling ioctl() to re-read partition table.
      正在同步磁盘。

扩容根目录

  • 查看本机原有PV,pvdisplay

    [root@zabbix-server ~]# pvdisplay
        --- Physical volume ---
        PV Name               /dev/sda2
        VG Name               cl
        PV Size               29.00 GiB / not usable 3.00 MiB
        Allocatable           yes (but full)
        PE Size               4.00 MiB
        Total PE              7423
        Free PE               0
        Allocated PE          7423
        PV UUID               5N60ck-vfDK-akra-iySw-gEqw-Pewj-ZCqXCl
  • 将新的硬盘分区创建为物理卷,pvcreate /dev/sdb1

    [root@zabbix-server ~]# pvcreate /dev/sdb1
        Physical volume "/dev/sdb1" successfully created.
      [root@zabbix-server ~]# pvdisplay
        --- Physical volume ---
        PV Name               /dev/sda2
        VG Name               cl
        PV Size               29.00 GiB / not usable 3.00 MiB
        Allocatable           yes (but full)
        PE Size               4.00 MiB
        Total PE              7423
        Free PE               0
        Allocated PE          7423
        PV UUID               5N60ck-vfDK-akra-iySw-gEqw-Pewj-ZCqXCl
    
        "/dev/sdb1" is a new physical volume of "100.00 GiB"
        --- NEW Physical volume ---
        PV Name               /dev/sdb1
        VG Name
        PV Size               100.00 GiB
        Allocatable           NO
        PE Size               0
        Total PE              0
        Free PE               0
        Allocated PE          0
        PV UUID               gCcdZP-Bbfp-oe8F-gK0I-NOYH-Frf8-UdjT1r
  • 将新建物理卷加入逻辑卷组,vgextend cl /dev/sdb1

    [root@zabbix-server ~]# vgextend cl /dev/sdb1
        Volume group "cl" successfully extended
      [root@zabbix-server ~]# vgdisplay
        --- Volume group ---
        VG Name               cl
        System ID
        Format                lvm2
        Metadata Areas        2
        Metadata Sequence No  4
        VG Access             read/write
        VG Status             resizable
        MAX LV                0
        Cur LV                2
        Open LV               2
        Max PV                0
        Cur PV                2
        Act PV                2
        VG Size               128.99 GiB
        PE Size               4.00 MiB
        Total PE              33022
        Alloc PE / Size       7423 / 29.00 GiB
        Free  PE / Size       25599 / 100.00 GiB
        VG UUID               vZqaWW-Lf6Y-7cXH-dLhM-QB0g-KFE3-tEjAxP
  • 查看本机所有逻辑卷,lvdisplay

    [root@zabbix-server ~]# lvdisplay
        --- Logical volume ---
        LV Path                /dev/cl/swap
        LV Name                swap
        VG Name                cl
        LV UUID                mIFpVU-1VnR-6I1v-6pMj-BQVO-z7Fv-kK6ubj
        LV Write Access        read/write
        LV Creation host, time localhost.localdomain, 2017-06-06 11:59:26 +0800
        LV Status              available
        # open                 2
        LV Size                3.00 GiB
        Current LE             768
        Segments               1
        Allocation             inherit
        Read ahead sectors     auto
        - currently set to     8192
        Block device           253:1
    
        --- Logical volume ---
        LV Path                /dev/cl/root
        LV Name                root
        VG Name                cl
        LV UUID                YI9Mw7-NGwC-am50-IR0K-C8Pp-oozQ-EwhIiS
        LV Write Access        read/write
        LV Creation host, time localhost.localdomain, 2017-06-06 11:59:27 +0800
        LV Status              available
        # open                 1
        LV Size                26.00 GiB
        Current LE             6655
        Segments               1
        Allocation             inherit
        Read ahead sectors     auto
        - currently set to     8192
        Block device           253:0
  • 给根目录逻辑卷增加99G,注意增加100G会失败,lvextend -L +99G /dev/cl/root

    [root@zabbix-server ~]# lvextend -L +99G /dev/cl/root
        Size of logical volume cl/root changed from 26.00 GiB (6655 extents) to 125.00 GiB (32000 extents).
        Logical volume cl/root successfully resized.
      [root@zabbix-server ~]# lvdisplay
        --- Logical volume ---
        LV Path                /dev/cl/swap
        LV Name                swap
        VG Name                cl
        LV UUID                mIFpVU-1VnR-6I1v-6pMj-BQVO-z7Fv-kK6ubj
        LV Write Access        read/write
        LV Creation host, time localhost.localdomain, 2017-06-06 11:59:26 +0800
        LV Status              available
        # open                 2
        LV Size                3.00 GiB
        Current LE             768
        Segments               1
        Allocation             inherit
        Read ahead sectors     auto
        - currently set to     8192
        Block device           253:1
    
        --- Logical volume ---
        LV Path                /dev/cl/root
        LV Name                root
        VG Name                cl
        LV UUID                YI9Mw7-NGwC-am50-IR0K-C8Pp-oozQ-EwhIiS
        LV Write Access        read/write
        LV Creation host, time localhost.localdomain, 2017-06-06 11:59:27 +0800
        LV Status              available
        # open                 1
        LV Size                125.00 GiB
        Current LE             32000
        Segments               2
        Allocation             inherit
        Read ahead sectors     auto
        - currently set to     8192
        Block device           253:0
  • 扩展文件系统的尺寸,其实就是应用修改,xfs_growfs /dev/cl/root

    [root@zabbix-server ~]# xfs_growfs /dev/cl/root
      meta-data=/dev/mapper/cl-root    isize=512    agcount=16, agsize=425920 blks
               =                       sectsz=512   attr=2, projid32bit=1
               =                       crc=1        finobt=0 spinodes=0
      data     =                       bsize=4096   blocks=6814720, imaxpct=25
               =                       sunit=1      swidth=256 blks
      naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
      log      =internal               bsize=4096   blocks=3327, version=2
               =                       sectsz=512   sunit=1 blks, lazy-count=1
      realtime =none                   extsz=4096   blocks=0, rtextents=0
      data blocks changed from 6814720 to 32768000
      [root@zabbix-server ~]# df -h
      文件系统             容量  已用  可用 已用% 挂载点
      /dev/mapper/cl-root  125G  4.6G  121G    4% /
      devtmpfs             3.9G     0  3.9G    0% /dev
      tmpfs                3.9G     0  3.9G    0% /dev/shm
      tmpfs                3.9G  8.4M  3.9G    1% /run
      tmpfs                3.9G     0  3.9G    0% /sys/fs/cgroup
      /dev/sda1           1022M  183M  840M   18% /boot
      tmpfs                783M     0  783M    0% /run/user/0

    可以看到/目录已经从25G扩容到了125G了,实现了动态扩容。