Skip to content

LVM 管理

lvm 可以将独立的硬盘或分区或 raid 虚拟成一个整体的硬盘,具有动态的扩缩性

1. LVM 组成

1.1 物理卷 (PV,Physical Volume)

一个可供存储 LVM 的块设备. 如硬盘分区(MBR 或 GPT 分区)、SAN 的硬盘、RAID 或 LUN,一个回环文件, 一个被内核映射的设备 (例如 dm-crypt),它包含一个特殊的 LVM 头,它是 LVM 构建的实际硬件或存储系统。

1.2 卷组 (VG,Volume Group)

卷组是对一个或多个物理卷的集合,并在设备文件系统中显示为 /dev/VG_NAME。

1.3 逻辑卷 (LV,Logical Volume)

逻辑卷是可供系统使用的最终元设备,它们在卷组中创建和管理,由物理块组成,实际上就是一个虚拟分区,并显示为 /dev/VG_NAME/LV_NAME,通常在其上可以创建文件系统。

1.4 物理块 (PE,Physical Extends)

一个卷组中最小的连续区域(默认为 4 MiB),多个物理块将被分配给一个逻辑卷。你可以把它看成物理卷的一部分,这部分可以被分配给一个逻辑卷。

2. 创建 LVM

2.1 创建 pv

使用 pvcreate 命令创建 pv,每个磁盘即是一个 pv

警告

基于 raid 创建 lvm,请使用 raid 后的虚拟磁盘,比如:/dev/md1 进行 pv 创建,其余步骤与普通磁盘一致

sh
pvcreate /dev/sd{b..e}
sh
[root@moujun ~]# pvcreate /dev/md1
WARNING: xfs signature detected on /dev/md1 at offset 0. Wipe it? [y/n]: y
  Wiping xfs signature on /dev/md1.
  Physical volume "/dev/md1" successfully created.
[root@moujun ~]#

2.2 创建 vg

创建卷组vg01,并把物理卷/dev/sdb/dev/sdc/dev/sdd /dev/sde加入该卷组

sh
vgcreate  vg01  /dev/sd{b..e}
sh
[root@moujun ~]# vgcreate  vg01 /dev/md1
  Volume group "vg01" successfully created
[root@moujun ~]#

可以通过 vgs、vgscan、vgdisplay 查看卷组信息

sh
[root@moujun ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   3   0 wz--n- <99.00g  4.00m
  vg01     1   0   0 wz--n-  19.98g 19.98g
[root@moujun ~]#

2.3 创建 lv

创建指定大小: lvcreate -L 1G <vg_name> -n <lv_name>

vg 所有空间创建: lvcreate -l +100%FREE <vg_name> -n <lv_name>

sh
 lvcreate -L 1G vg01 -n lv01
 lvcreate -l +100%FREE  vg01 -n lv01
sh
[root@moujun ~]#  lvcreate -l +100%FREE  vg01 -n lv01
  Logical volume "lv01" created.
[root@moujun ~]#

3. 格式化 LVM

sh
[root@moujun ~]# mkfs.xfs /dev/mapper/vg01-lv01
meta-data=/dev/mapper/vg01-lv01  isize=512    agcount=4, agsize=1309440 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5237760, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@moujun ~]#

4. 挂载

4.1 临时挂载

sh
[root@moujun ~]# mount /dev/mapper/vg01-lv01 /mnt/raid/
[root@moujun ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 1.9G     0  1.9G   0% /dev
tmpfs                    1.9G     0  1.9G   0% /dev/shm
tmpfs                    1.9G  8.9M  1.9G   1% /run
tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  1.8G   49G   4% /
/dev/sda1               1014M  150M  865M  15% /boot
/dev/mapper/centos-home   46G   33M   46G   1% /home
tmpfs                    379M     0  379M   0% /run/user/0
/dev/mapper/vg01-lv01     20G   33M   20G   1% /mnt/raid
[root@moujun ~]#

4.2 永久挂载

参数说明:

md
设备 挂载点 文件系统类型 挂载参数 是否备份 是否检测
/dev/sdc /data ext4 defaults 0 0

/etc/fstab文件中添加挂载信息

go
# /etc/fstab
# Created by anaconda on Mon Feb 19 02:16:44 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=36410410-ab0e-42ad-a762-c9be30da02fa /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/mapper/vg01-lv01 /mnt/raid                    xfs     defaults        0 0

4. LVM 扩容

raid 创建请参考 raid 创建 ,其他步骤与普通硬盘完全一样

  1. 创建 pv

    sh
    [root@moujun raid]# pvcreate /dev/md2
      Physical volume "/dev/md2" successfully created.
    [root@moujun raid]#
  2. 扩展到 vg 中

    sh
    [root@moujun raid]# vgextend vg01 /dev/md2
      Volume group "vg01" successfully extended
    [root@moujun raid]#
  3. 扩展 lvm

    创建指定大小: lvextend -L +1G <lv_name>

    vg 所有空间创建: lvextend -l +100%FREE <lv_name>

    sh
     lvextend -L +1G /dev/mapper/vg01-lv01
     lvextend -l +100%FREE  /dev/mapper/vg01-lv01

    扩展命令:

    sh
    [root@moujun raid]#  lvextend -l +100%FREE  /dev/mapper/vg01-lv01
      Size of logical volume vg01/lv01 changed from 19.98 GiB (5115 extents) to <29.97 GiB (7672 extents).
      Logical volume vg01/lv01 successfully resized.
    [root@moujun raid]#
  4. 刷新 lv 空间

    当 lv 格式为xfsxfs_growfs /dev/mapper/vg01-lv01

    当 lv 格式为ext4resize2fs /dev/mapper/vg01-lv01

    sh
    [root@moujun raid]# xfs_growfs /dev/mapper/vg01-lv01
    meta-data=/dev/mapper/vg01-lv01  isize=512    agcount=4, agsize=1309440 blks
             =                       sectsz=512   attr=2, projid32bit=1
             =                       crc=1        finobt=0 spinodes=0
    data     =                       bsize=4096   blocks=5237760, imaxpct=25
             =                       sunit=0      swidth=0 blks
    naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
    log      =internal               bsize=4096   blocks=2560, version=2
             =                       sectsz=512   sunit=0 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    data blocks changed from 5237760 to 7856128
    [root@moujun raid]#
  5. df 确认空间已扩容完成

    go
    [root@moujun raid]# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    devtmpfs                 1.9G     0  1.9G   0% /dev
    tmpfs                    1.9G     0  1.9G   0% /dev/shm
    tmpfs                    1.9G  8.9M  1.9G   1% /run
    tmpfs                    1.9G     0  1.9G   0% /sys/fs/cgroup
    /dev/mapper/centos-root   50G  1.8G   49G   4% /
    /dev/sda1               1014M  150M  865M  15% /boot
    /dev/mapper/centos-home   46G   33M   46G   1% /home
    /dev/mapper/vg01-lv01     20G   33M   20G   1% /mnt/raid  
    /dev/mapper/vg01-lv01     30G   33M   30G   1% /mnt/raid  
    tmpfs                    379M     0  379M   0% /run/user/0
  6. 重启验证