Skip to content

1.LVM简介

LVM 是 Logical Volume Manager 的缩写,中文一般翻译为 "逻辑卷管理",它是 Linux 下对磁盘分区进行管理的一种机制。LVM 是建立在磁盘分区和文件系统之间的一个逻辑层,系统管理员可以利用 LVM 在不重新对磁盘分区的情况下动态的调整分区的大小。如果系统新增了一块硬盘,通过 LVM 就可以将新增的硬盘空间直接扩展到原来的磁盘分区上。

1.1 LVM架构

LVM 逻辑卷组件

1.2 LVM工作原理

LVM通过将底层的物理硬盘封装起来,以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取。而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。

2.LVM组件

2.1 物理卷(PV, Physical Volume)

物理卷就是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有和LVM相关的管理参数.

  • 使用pvcreate /dev/sdb1来基于sdb1分区创建PV

2.2 卷组(VG, Volume Group)

VG由若干PV组成,能在VG上创建一个或多个LV。VG是PV和LV中间的层,可以通过调整VG中的PV来调整VG的容量,进而调整LV的分配情况.

  • 使用vgcreate vg01 /dev/sdb1创建vg并添加sdb1对应的pv
  • 使用vgextend vg01 /dev/sdb2向vg中继续添加pv

2.3 逻辑卷(LV, Logical Volume)

LV是从VG上分配出的一块空间,用于建立文件系统,相当于非LVM模式的磁盘分区。

  • 使用lvcreate -L 10M -n lv01 vg01 在vg上创建lv并指定初始大小为10M
  • 使用lvextend -L +200M /dev/vg01/lv01扩展lv01的大小为100M,前提是vg01中有未使用的空间
  • 创建出的lv需要格式化成指定文件系统,才能进行挂载操作

3.LVM操作

3.0 安装

bash
yum lvm2 -y
yum lvm2 -y

3.1 创建新的LVM

创建LVM流程:pvcreate创建pv -> vgcreate创建卷组 -> lvcreate创建逻辑卷 -> mkfs.xfs lv 格式化-> mount挂载

1.查看分区

bash
#sdb sdc 为新添加磁盘
[root@other ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    2G  0 disk
sr0              11:0    1 1024M  0 rom
sdc               8:32   0    2G  0 disk
sda               8:0    0   30G  0 disk
├─sda2            8:2    0   29G  0 part
 ├─centos-swap 253:1    0    2G  0 lvm
 └─centos-root 253:0    0   27G  0 lvm  /
└─sda1            8:1    0    1G  0 part /boot
#sdb sdc 为新添加磁盘
[root@other ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    2G  0 disk
sr0              11:0    1 1024M  0 rom
sdc               8:32   0    2G  0 disk
sda               8:0    0   30G  0 disk
├─sda2            8:2    0   29G  0 part
 ├─centos-swap 253:1    0    2G  0 lvm
 └─centos-root 253:0    0   27G  0 lvm  /
└─sda1            8:1    0    1G  0 part /boot

image-20241031141255840

2.创建pv

以整个磁盘创建,不再创建分区

bash
[root@other ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
[root@other ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

3.创建vg

bash
#查看pv
[root@other ~]# pvdisplay
  --- Physical volume ---
 "/dev/sdb" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               CC6hZs-KUBT-AX0j-Fiz1-uscf-lhpM-Etme4a
  
#创建vg0
[root@other ~]# vgcreate vg0 /dev/sdb
  Volume group "vg0" successfully created

#查看
[root@other ~]# vgdisplay
  --- Volume group ---
  VG Name               vg0
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <2.00 GiB
  PE Size               4.00 MiB
  Total PE              511
  Alloc PE / Size       0 / 0
  Free  PE / Size       511 / <2.00 GiB
  VG UUID               fAz9gY-ov9y-EhOl-Re1H-L1yq-8Ccw-JZjMMC
#查看pv
[root@other ~]# pvdisplay
  --- Physical volume ---
 "/dev/sdb" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               CC6hZs-KUBT-AX0j-Fiz1-uscf-lhpM-Etme4a
  
#创建vg0
[root@other ~]# vgcreate vg0 /dev/sdb
  Volume group "vg0" successfully created

#查看
[root@other ~]# vgdisplay
  --- Volume group ---
  VG Name               vg0
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <2.00 GiB
  PE Size               4.00 MiB
  Total PE              511
  Alloc PE / Size       0 / 0
  Free  PE / Size       511 / <2.00 GiB
  VG UUID               fAz9gY-ov9y-EhOl-Re1H-L1yq-8Ccw-JZjMMC

4.创建lv

bash
语法:lvcreate -l 100%FREE -n lv_name vg_name

#创建逻辑卷组,-n参数指定新建逻辑卷的名称(我命名为lv0),-l 100%FREE表示添加卷组内所有剩余空间
[root@other ~]# lvcreate -l 100%FREE -n lv0 vg0
  Logical volume "lv0" created.
#查看
[root@other ~]# lvdisplay
 --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                OUHWK5-o8ca-SpYM-Tvz1-26E8-paGJ-2bjOUB
  LV Write Access        read/write
  LV Creation host, time localhost, 2023-04-03 05:16:07 +0800
  LV Status              available
  # open                 1
  LV Size                26.99 GiB
  Current LE             6910
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
语法:lvcreate -l 100%FREE -n lv_name vg_name

#创建逻辑卷组,-n参数指定新建逻辑卷的名称(我命名为lv0),-l 100%FREE表示添加卷组内所有剩余空间
[root@other ~]# lvcreate -l 100%FREE -n lv0 vg0
  Logical volume "lv0" created.
#查看
[root@other ~]# lvdisplay
 --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                OUHWK5-o8ca-SpYM-Tvz1-26E8-paGJ-2bjOUB
  LV Write Access        read/write
  LV Creation host, time localhost, 2023-04-03 05:16:07 +0800
  LV Status              available
  # open                 1
  LV Size                26.99 GiB
  Current LE             6910
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

5.挂载lv

bash
#查看
[root@other ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sdb   vg0    lvm2 a--   <2.00g    0

[root@other ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  vg0      1   1   0 wz--n-  <2.00g    0

[root@other ~]# lvs #查看详细信息可用lvdisplay
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg0    -wi-a----- <2.00g
  
#格式化
# 根据相应的文件系统格式化逻辑卷,例如使用ext4文件系统
mkfs.ext4 /dev/vg0/lv0

#查看格式化之后的lvm
[root@other ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    2G  0 disk
└─vg0-lv0       253:2    0    2G  0 lvm

#挂载
[root@other ~]# mount /dev/vg0/lv0 /yun
[root@other ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/vg0-lv0      2.0G  6.0M  1.9G    1% /yun


#永久挂载
[root@other ~]# blkid /dev/vg0/lv0
/dev/vg0/lv0: UUID="5120bf87-aa29-4e64-8c87-a7972924946c" TYPE="ext4"

# 编辑/etc/fstab文件,将lv0的信息添加在新行
[root@other ~]# vim /etc/fstab
UUID=5120bf87-aa29-4e64-8c87-a7972924946c /yun ext4 defaults 0 0

#重新挂载
[root@other ~]# mount -a
#查看
[root@other ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sdb   vg0    lvm2 a--   <2.00g    0

[root@other ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  vg0      1   1   0 wz--n-  <2.00g    0

[root@other ~]# lvs #查看详细信息可用lvdisplay
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg0    -wi-a----- <2.00g
  
#格式化
# 根据相应的文件系统格式化逻辑卷,例如使用ext4文件系统
mkfs.ext4 /dev/vg0/lv0

#查看格式化之后的lvm
[root@other ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    2G  0 disk
└─vg0-lv0       253:2    0    2G  0 lvm

#挂载
[root@other ~]# mount /dev/vg0/lv0 /yun
[root@other ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/vg0-lv0      2.0G  6.0M  1.9G    1% /yun


#永久挂载
[root@other ~]# blkid /dev/vg0/lv0
/dev/vg0/lv0: UUID="5120bf87-aa29-4e64-8c87-a7972924946c" TYPE="ext4"

# 编辑/etc/fstab文件,将lv0的信息添加在新行
[root@other ~]# vim /etc/fstab
UUID=5120bf87-aa29-4e64-8c87-a7972924946c /yun ext4 defaults 0 0

#重新挂载
[root@other ~]# mount -a

3.2 扩容LVM

1.扩容pv

bash
#吧sdc加入到pv中
#查看
[root@other ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    2G  0 disk
└─vg0-lv0       253:2    0    2G  0 lvm
sr0              11:0    1 1024M  0 rom
sdc               8:32   0    2G  0 disk

[root@other ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <29.00g 4.00m
  /dev/sdb   vg0    lvm2 a--   <2.00g    0

[root@other ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.
[root@other ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <29.00g 4.00m
  /dev/sdb   vg0    lvm2 a--   <2.00g    0
  /dev/sdc          lvm2 ---    2.00g 2.00g
#吧sdc加入到pv中
#查看
[root@other ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0    2G  0 disk
└─vg0-lv0       253:2    0    2G  0 lvm
sr0              11:0    1 1024M  0 rom
sdc               8:32   0    2G  0 disk

[root@other ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <29.00g 4.00m
  /dev/sdb   vg0    lvm2 a--   <2.00g    0

[root@other ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.
[root@other ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <29.00g 4.00m
  /dev/sdb   vg0    lvm2 a--   <2.00g    0
  /dev/sdc          lvm2 ---    2.00g 2.00g

2.扩容vg

bash
#对现有vg0扩容
[root@other ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <29.00g 4.00m
  vg0      1   1   0 wz--n-  <2.00g    0

#把sdc加入进来
[root@other ~]# vgextend vg0 /dev/sdc
  Volume group "vg0" successfully extended

#查看
[root@other ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <29.00g  4.00m
  vg0      2   1   0 wz--n-   3.99g <2.00g
#对现有vg0扩容
[root@other ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <29.00g 4.00m
  vg0      1   1   0 wz--n-  <2.00g    0

#把sdc加入进来
[root@other ~]# vgextend vg0 /dev/sdc
  Volume group "vg0" successfully extended

#查看
[root@other ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <29.00g  4.00m
  vg0      2   1   0 wz--n-   3.99g <2.00g

3.扩容lv

bash
#查看lv名字
[root@other ~]# lvdisplay

#扩容剩余所有存储空间
[root@other ~]# lvextend -l +100%FREE /dev/vg0/lv0
  Size of logical volume vg0/lv0 changed from <2.00 GiB (511 extents) to 3.99 GiB (1022 extents).
  Logical volume vg0/lv0 successfully resized.
#查看lv名字
[root@other ~]# lvdisplay

#扩容剩余所有存储空间
[root@other ~]# lvextend -l +100%FREE /dev/vg0/lv0
  Size of logical volume vg0/lv0 changed from <2.00 GiB (511 extents) to 3.99 GiB (1022 extents).
  Logical volume vg0/lv0 successfully resized.
  • 调整文件系统
bash
#对于ext4,ext3 使用resize2fs
[root@other ~]# resize2fs /dev/vg0/lv0
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 1046528 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 1046528 blocks long.

#对于xfs类型,使用xfs_growfs 挂载点
xfs_growfs -d /dev/vg0/lv0
#对于ext4,ext3 使用resize2fs
[root@other ~]# resize2fs /dev/vg0/lv0
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 1046528 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 1046528 blocks long.

#对于xfs类型,使用xfs_growfs 挂载点
xfs_growfs -d /dev/vg0/lv0

3.3缩减LVM

3.4 删除LVM

删除LVM流程:umount卸载 -> lvremove lv移出卷组中所有逻辑卷-> vgremove vg移出卷组-> pvremove 移出pv

1.查看

bash
[root@other ~]# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- 26.99g
  swap centos -wi-a-----  2.00g
  lv0  vg0    -wi-a-----  3.99g
[root@other ~]# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- 26.99g
  swap centos -wi-a-----  2.00g
  lv0  vg0    -wi-a-----  3.99g

2.删除lv

bash
[root@other ~]# lvremove /dev/vg0/lv0
Do you really want to remove active logical volume vg0/lv0? [y/n]: y
  Logical volume "lv0" successfully removed
[root@other ~]# lvremove /dev/vg0/lv0
Do you really want to remove active logical volume vg0/lv0? [y/n]: y
  Logical volume "lv0" successfully removed

3.删除vg

bash
[root@other ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <29.00g 4.00m
  vg0      2   0   0 wz--n-   3.99g 3.99g
[root@other ~]# vgremove vg0
  Volume group "vg0" successfully removed
[root@other ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <29.00g 4.00m
  vg0      2   0   0 wz--n-   3.99g 3.99g
[root@other ~]# vgremove vg0
  Volume group "vg0" successfully removed

4.删除pv

bash
[root@other ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <29.00g 4.00m
  /dev/sdb          lvm2 ---    2.00g 2.00g
  /dev/sdc          lvm2 ---    2.00g 2.00g


[root@other ~]# pvremove /dev/sdc /dev/sdb
  Labels on physical volume "/dev/sdc" successfully wiped.
  Labels on physical volume "/dev/sdb" successfully wiped.
[root@other ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <29.00g 4.00m
  /dev/sdb          lvm2 ---    2.00g 2.00g
  /dev/sdc          lvm2 ---    2.00g 2.00g


[root@other ~]# pvremove /dev/sdc /dev/sdb
  Labels on physical volume "/dev/sdc" successfully wiped.
  Labels on physical volume "/dev/sdb" successfully wiped.

5.卸载

6.格式化磁盘

官档