一、使用场景
在企业生产环境下,通常情况下我们会考虑对磁盘进行扩容情况,但随着用户的增长,磁盘可能逐渐被填满,这时候你只能添加新硬盘,新分区,但是旧的磁分区还在旧的磁盘分区上,你只能停止业务进行数据迁移了
LVM是把多个磁盘化成一个硬盘,但特点是:后期可以加入新硬盘,这个逻辑卷的容量就增加了,等于这个大硬盘容量更大
逻辑卷组(500G+100G=600G),大硬盘500G------>获取部分的容量,化为一个逻辑组(分区)---->逻辑组进行格式化(分区进行格式化)-------->挂载使用
如果你使用了Lvm,你可以将多个物理分区抽象为一个逻辑卷组,并且这个逻辑卷组是可以动态扩容的。当逻辑卷组容量不够时,只需要买硬盘,通过命令添加到这个指定的逻辑卷组中
lvm工作流程

挂载流程
这里的物理层也叫pe ,我们需要将物理卷pe整合在pv中,然后我将我整合的逻辑上的pv整合成一个大的VG组,然后对VG组进行分区得到多个LV(LV中包含多个LE(逻辑单元))

二、Lvm常用命令
通过lsblk查看磁盘信息
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─openeuler-root 253:0 0 17G 0 lvm /
└─openeuler-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 3.8G 0 rom
pv命令的使用
## 安装lvm命令
yum install lvm2 -y
### 安装该工具后,即可使用lvm的命令(图片解释)
pvcreate
pvs
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 openeuler lvm2 a-- <19.00g 0
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# pvscan
PV /dev/sda2 VG openeuler lvm2 [<19.00 GiB / 0 free]
Total: 1 [<19.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 0 [0 ]
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name openeuler
PV Size <19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
Allocated PE 4863
PV UUID CdcPrY-yVNv-2Bxa-M1lh-poRu-kz4t-gEdwjD
## 删除pv
pvremove /dev/sdb

三、操作流程
添加一块30G硬盘

查看到已经创建的磁盘

查看vg状态

将两块硬盘sdb sdc 创建为vg-0224
#### pv实例化 ###
[root@localhost ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
### 将pv加入到卷组
[root@localhost ~]# vgcreate vg666 /dev/sdb
Volume group "vg666" successfully created
## vg状态
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name vg666
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 <30.00 GiB
PE Size 4.00 MiB
Total PE 7679
Alloc PE / Size 0 / 0
Free PE / Size 7679 / <30.00 GiB
VG UUID eiBxNz-mSc1-VXDT-ip1R-1MMD-DIaa-4EuFuj
转换成lv逻辑卷格式
lvcreate
-L 指定逻辑卷的大小,单位为"kKmMgGtT"字节
-l 指定逻辑卷的大小(PE个数)
-n 后面跟逻辑卷名
-s 创建快照
### 查看当前机器的逻辑卷信息
### lvs状态查看
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root openeuler -wi-ao---- <17.00g
swap openeuler -wi-ao---- 2.00g
### 创建lv 设置卷组容量的一半(参考下图)
lvcreate -n vg666 -l 50%VG vg666
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root openeuler -wi-ao---- <17.00g
swap openeuler -wi-ao---- 2.00g
vg666 vg666 -wi-a----- <15.00g
## 删除逻辑卷
[root@localhost ~]# lvremove /dev/vg666/vg666
Do you really want to remove active logical volume vg666/vg666? [y/n]: y
Logical volume "vg666" successfully removed.
[root@localhost ~]#
## 指定逻辑卷大小
lvcreate -n lv1-666 -L 20G vg666
## 查看lvs分配情况
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root openeuler -wi-ao---- <17.00g
swap openeuler -wi-ao---- 2.00g
lv1-666 vg666 -wi-a----- 20.00g
卷组分配情况

清空lvm环境
#### 删除卷组情况
[root@localhost ~]# lvremove /dev/vg666/vg666
#### 删除pv卷
[root@client-242 ~]# pvremove /dev/sdb
Labels on physical volume "/dev/sdb" successfully wiped.
## 查看pv状态
[root@client-242 ~]# pvs
### 如果vg没有清理完成,pv是无法直接额删除的
[root@localhost ~]# pvremove /dev/sdb
PV /dev/sdb is used by VG vg666 so please use vgreduce first.
(If you are certain you need pvremove, then confirm by using --force twice.)
/dev/sdb: physical volume label not removed.
[root@localhost ~]#
## 查看vg状态
[root@client-242 ~]# vgs
挂载方式分析
### 方式1 临时挂载
# 临时挂载(重启后失效)
mount /dev/vg666/lv1--666 /data
### 方式2 永久挂载
[root@localhost ~]# vim /etc/fstab
## 查看uuid情况
blkid /dev/vg666/lv1--666
扩展文件类型
# 如果有新分区,扩展物理卷和卷组
pvcreate /dev/sdb2
vgextend vg666 /dev/sdb2
# 扩展逻辑卷
lvextend -l +100%FREE /dev/vg666/lv1--666
# 扩展文件系统(使得文件系统能够使用扩展30G)
resize2fs /dev/vg666/lv1--666
## 验证
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 1.3G 0 1.3G 0% /dev/shm
tmpfs 524M 7.5M 516M 2% /run
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
/dev/mapper/openeuler-root 17G 3.5G 13G 23% /
tmpfs 1.3G 0 1.3G 0% /tmp
/dev/sda1 974M 145M 762M 16% /boot
扩容成功截图

转换成
UUID="1b921c3d-f782-4c17-b08f-2e38a41ea56b" / ext4
defaults 1 1
## 挂载
mount -a
## 测试是否挂载成功
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─openeuler-root 253:0 0 47G 0 lvm /
└─openeuler-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 30G 0 disk
└─openeuler-root 253:0 0 47G 0 lvm /
sr0 11:0 1 1024M 0 rom
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 1.3G 0 1.3G 0% /dev/shm
tmpfs 524M 7.5M 516M 2% /run
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
/dev/mapper/openeuler-root 47G 3.5G 41G 8% /
tmpfs 1.3G 0 1.3G 0% /tmp
/dev/sda1 974M 145M 762M 16% /boot
注意:如果当逻辑卷已经被文件占用,但又不想删除原卷组数据,想单独取出pv逻辑卷时,可以考虑下面方法
# 3. 如果 /dev/sdb 上有数据,需要先迁移数据
pvmove /dev/sdb /dev/sda2
# 4. 从卷组中移除物理卷
vgreduce openeuler /dev/sdb
# 5. 移除物理卷属性
pvremove /dev/sdb