1、介绍
LVM: 是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制
作用:在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。
找了一张看着比较舒服的图:
image.pngLVM就是一个虚拟设备驱动,在物理设备和文件系统层之间,维护着逻辑盘区和物理盘区之间的映射。它将几块磁盘或者分区组合起来形成一个存储池或者卷组
2、创建 lv卷
1、我在虚拟机上新加了一块 20G的磁盘,现在要把它做成逻辑卷
image.png2、在线识别磁盘,这条命令只适合虚拟机(也可以重启系统识别,生产是在线加盘的),用 "lsblk "
查看,此时系统多了一块20G的磁盘
#识别磁盘
[root@localhost ~]#echo "- - -" > /sys/class/scsi_host/host0/scan
#查看磁盘分区
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 45G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 44G 0 part
├─centos-root 253:0 0 42G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sr0 11:0 1 4.4G 0 rom
3、查看物理卷,可以看到,目前只有我的第一块盘上有lvm物理卷
#查看简略信息
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <44.00g 4.00m (逻辑卷总的大小、剩余空闲空间)
#查看详细信息
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <44.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 11263
Free PE 1
Allocated PE 11262
PV UUID dsd3qT-ytxw-FvJo-X0u6-Czun-O8nd-ueiwd3
4、新建的磁盘,创建物理卷
上面 "lsblk "
中可以看到新加的disk
磁盘 设备名是 /dev/sdb
# 新建物理卷
[root@localhost ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
# 再次查看,多了一块 20G 物理卷,新建成功
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <44.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 11263
Free PE 1
Allocated PE 11262
PV UUID dsd3qT-ytxw-FvJo-X0u6-Czun-O8nd-ueiwd3
"/dev/sdb" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0 #这些信息,是需要创建卷组后才有的
Total PE 0
Free PE 0
Allocated PE 0
PV UUID yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi
5、创建卷组
语法:vgcreate +
-s PE大小 +
卷组名 +
设备名
不指定PE大小,默认是 4M
PE : 就是在创建卷组时,卷组的空间会按照 PE的指定大小,被分配成一块一块的;并且在以后的扩容,与缩减,都是按照PE的倍数来执行的
[root@localhost ~]# vgcreate -s 10M VGroup /dev/sdb
Volume group "VGroup" successfully created
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <44.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 11263
Free PE 1
Allocated PE 11262
PV UUID dsd3qT-ytxw-FvJo-X0u6-Czun-O8nd-ueiwd3
--- Physical volume ---
PV Name /dev/sdb
VG Name VGroup
PV Size 20.00 GiB / not usable 10.00 MiB
Allocatable yes
PE Size 10.00 MiB #这里查看PE大小
Total PE 2047 # PE的总数量
Free PE 2047 # PE的空闲数量
Allocated PE 0 # PE在使用数量
PV UUID yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi
查看创建 的vg
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VGroup 1 0 0 wz--n- 19.99g 19.99g
centos 1 2 0 wz--n- <44.00g 4.00m
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <44.00 GiB
PE Size 4.00 MiB
Total PE 11263
Alloc PE / Size 11262 / 43.99 GiB
Free PE / Size 1 / 4.00 MiB
VG UUID P05Uyx-sjAy-o27c-D7Vs-Pcdt-VglQ-kcZl6Q
--- Volume group ---
VG Name VGroup
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 19.99 GiB
PE Size 10.00 MiB #这里也可以查看PE大小
Total PE 2047
Alloc PE / Size 0 / 0
Free PE / Size 2047 / 19.99 GiB
VG UUID sYSKqx-o6jW-QCe4-lwW6-xrky-CjLm-0bijHE
卷组改名:
vgrename +
原名 +
新名
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VGroup 1 0 0 wz--n- 19.99g 19.99g
centos 1 2 0 wz--n- <44.00g 4.00m
[root@localhost ~]# vgrename VGroup VGroup1
Volume group "VGroup" successfully renamed to "VGroup1"
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VGroup1 1 0 0 wz--n- 19.99g 19.99g
centos 1 2 0 wz--n- <44.00g 4.00m
禁用卷组:vgchange -an VGroup1
激活卷组:vgchange -ay VGroup1
6、创建逻辑卷
[root@localhost ~]# lvcreate -n mysqldb -L 10G VGroup1
Logical volume "mysqldb" created.
查看卷组剩余空间,有10G被占用了,逻辑卷说明创建成功
[root@localhost ~]# vgdisplay VGroup1
--- Volume group ---
VG Name VGroup1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.99 GiB
PE Size 10.00 MiB
Total PE 2047
Alloc PE / Size 1024 / 10.00 GiB #被分配的 PE / 空间
Free PE / Size 1023 / 9.99 GiB
VG UUID sYSKqx-o6jW-QCe4-lwW6-xrky-CjLm-0bijHE
查看所有 lv 逻辑卷的详细信息:
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/VGroup1/mysqldb
LV Name mysqldb
VG Name VGroup1
LV UUID jfKGjO-8tZI-uzhV-rtdH-6G43-k2N1-avkNgZ
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-07-04 11:52:29 +0800
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 1024
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
逻辑卷命名路径有两种,其实他们都是软连接指到 /dev/dm-* 下的
/dev/VGroup1/mysqldb
/dev/mapper/VGroup1-mysqldb
[root@localhost ~]# ll /dev/VGroup1/mysqldb
lrwxrwxrwx. 1 root root 7 Jul 4 11:52 /dev/VGroup1/mysqldb -> ../dm-2
[root@localhost ~]# ll /dev/mapper/VGroup1-mysqldb
lrwxrwxrwx. 1 root root 7 Jul 4 11:52 /dev/mapper/VGroup1-mysqldb -> ../dm-2
7、创建文件系统:
ext4文件系统:mkfs.ext4
xfs文件系统: mkfs.xfs
[root@localhost ~]# mkfs.xfs /dev/VGroup1/mysqldb
meta-data=/dev/VGroup1/mysqldb isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, 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
查看 /dev/VGroup1/mysqldb 创建情况
[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs fba83f2c-f309-42c1-8dc1-98b502cfe168 /boot
└─sda2 LVM2_member dsd3qT-ytxw-FvJo-X0u6-Czun-O8nd-ueiwd3
├─centos-root xfs 4cfc38ed-6515-416a-b3e9-1d2ad227c66e /
└─centos-swap swap 07e1514e-11de-4f71-8f40-fca0075e75dd [SWAP]
sdb LVM2_member yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi
└─VGroup1-mysqldb xfs 9f6acaaf-ee88-4910-9df7-a44b3f4a1068
sr0 iso9660 CentOS 7 x86_64 2019-09-11-18-50-31-00
8、挂载到指定目录上
-
临时挂载:
mount /dev/VGroup1/mysqldb /mnt/ -
永久挂载:
生产中,最好是以UUID 去挂载,UUID是唯一的;以防在服务器加减磁盘,重启后,设备名与先前的不一样,造成挂载失败
[root@localhost mnt]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Jun 15 16:20:13 2020
#
# 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=fba83f2c-f309-42c1-8dc1-98b502cfe168 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
UUID=9f6acaaf-ee88-4910-9df7-a44b3f4a1068 /mnt xfs defaults 0 0
查看指定卷uuid的两种方法:
[root@localhost ~]# lsblk -p /dev/VGroup1/mysqldb -f
NAME FSTYPE LABEL UUID MOUNTPOINT
/dev/mapper/VGroup1-mysqldb xfs 9f6acaaf-ee88-4910-9df7-a44b3f4a1068 /mnt
[root@localhost ~]# blkid /dev/VGroup1/mysqldb
/dev/VGroup1/mysqldb: UUID="9f6acaaf-ee88-4910-9df7-a44b3f4a1068" TYPE="xfs"
扩容:
新加了一块 /dev/sdc 磁盘:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 45G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 44G 0 part
├─centos-root 253:0 0 42G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
└─VGroup1-mysqldb 253:2 0 10G 0 lvm /mnt
sdc 8:32 0 20G 0 disk
sr0 11:0 1 4.4G 0 rom
把/dev/sdc 磁盘加到逻辑卷中
[root@localhost ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <44.00g 4.00m
/dev/sdb VGroup1 lvm2 a-- 19.99g 9.99g
/dev/sdc lvm2 --- 20.00g 20.00g
目前 VGroup1 的容量是 9.99g
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VGroup1 1 1 0 wz--n- 19.99g 9.99g
centos 1 2 0 wz--n- <44.00g 4.00m
把 /dev/sdc 扩容到 VGroup1卷组中
[root@localhost ~]# vgextend VGroup1 /dev/sdc
Volume group "VGroup1" successfully extended
再次查看, 逻辑卷组,在原有的基础上多了 20G
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VGroup1 2 1 0 wz--n- 39.98g 29.98g
centos 1 2 0 wz--n- <44.00g 4.00m
扩容分区,以下以扩充10G例::
[root@localhost ~]# vgdisplay VGroup1
--- Volume group ---
VG Name VGroup1
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 39.98 GiB
PE Size 10.00 MiB
Total PE 4094
Alloc PE / Size 1024 / 10.00 GiB
Free PE / Size 3070 / 29.98 GiB
VG UUID sYSKqx-o6jW-QCe4-lwW6-xrky-CjLm-0bijHE
lvextend 参数:
-L 以容量为单位
-l 以PE个数为单位
-r 使扩容的文件系统生效,不使用该参数,"lsblk
" 可以看到总容量正确,但是 "df -h
" 就看不到扩容部分;
-
-L 以容量为单位:
在原有基础上 增加 10G :
lvextend -r -L +10G /dev/VGroup1/mysqldb
增加到 20G(如果,原有10G,就增加了10G):
lvextend -r -L 20G /dev/VGroup1/mysqldb
-
-l 以PE个数为单位
要根据 单位PE的大小,自己去计算,需要扩充的容量
在原有基础上,增加10G;(算法:1024(个PE)* 10M
):
lvextend -r -l +1024 /dev/VGroup1/mysqldb
增加到 20G;( 原有 1024个PE,增加 1024个PE,就是增加了1024(个PE)* 10M
等于 10G):
lvextend -r -l 2048 /dev/VGroup1/mysqldb
剩余空间全用光:
lvextend -r -l +100%FREE /dev/VGroup1/mysqldb
如果扩容没有加 -r 参数,要让文件系统加入扩容空间(建议使用 -r):
centos7(xfs文件系统)上用 xfs_growfs + 挂载点
:
xfs_growfs /mnt/
centos6 (ext文件系统)上使用 resize2fs + 逻辑卷名
使其生效:
resize2fs /dev/VGroup1/mysqldb
扩容后 :
[root@localhost mnt]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 45G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 44G 0 part
├─centos-root 253:0 0 42G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
└─VGroup-mysqldb 253:2 0 20G 0 lvm /mnt
sdc 8:32 0 20G 0 disk
└─VGroup-mysqldb 253:2 0 20G 0 lvm /mnt
sr0 11:0 1 4.4G 0 rom
缩减逻辑卷:
只适用与 centos 6,不建议用于生产,会丢数据
1.取消逻辑卷的挂载
umount /mnt
2.检查文件系统
fsck -f /dev/VGroup1/mysqldb
3.设定文件系统到10G
resize2fs /dev/VGroup1/mysqldb 10G
4.缩减lv逻辑卷
lvreduce -L 10G /dev/VGroup1/mysqldb
5.挂载
mount -a
磁盘数据迁移(删除PV)
当服务器硬盘出现告警提示,我们就得把该硬盘的数据迁移到其它硬盘上去,再替换新硬盘,以保证数据不丢失
确认逻辑卷组上有足够的空间就可以导入上面有讲到,不再赘述了
注意:数据迁移是根据被使用的 PE 块设备来迁移的,与磁盘下的实际数据无关
迁移 /dev/sdb
1、可以看到 /dev/sdb 上使用了全部PE块 共: 2047 个;一定要看总空间,不要去看空闲空间 ;因为 /dev/sdb 的空闲空间 VGroup 卷组也包含,自己不能复制到自己的空闲空间中去
[root@localhost mnt]# pvdisplay /dev/sdb
--- Physical volume ---
PV Name /dev/sdb
VG Name VGroup
PV Size 20.00 GiB / not usable 10.00 MiB
Allocatable yes (but full)
PE Size 10.00 MiB
Total PE 2047
Free PE 0
Allocated PE 2047
PV UUID yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi
2、现在要确定 /dev/sdb 所在的 VGroup 逻辑卷组空闲空间是否足够:
Free PE / Size 3069 / 29.97 GiB 确认空闲充足
[root@localhost mnt]# vgdisplay VGroup
--- Volume group ---
VG Name VGroup
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 3
Act PV 3
VG Size 49.97 GiB
PE Size 10.00 MiB
Total PE 5117
Alloc PE / Size 2048 / 20.00 GiB
Free PE / Size 3069 / 29.97 GiB
VG UUID sYSKqx-o6jW-QCe4-lwW6-xrky-CjLm-0bijHE
3、开始迁移;迁移是系统自己完成的,不需要指定到具体盘
[root@localhost mnt]# pvmove /dev/sdb
/dev/sdb: Moved: 0.54%
/dev/sdb: Moved: 100.00%
4、迁移完成后,再查看 /dev/sdb,上面都是空闲的了
[root@localhost mnt]# pvdisplay /dev/sdb
--- Physical volume ---
PV Name /dev/sdb
VG Name VGroup
PV Size 20.00 GiB / not usable 10.00 MiB
Allocatable yes
PE Size 10.00 MiB
Total PE 2047
Free PE 2047
Allocated PE 0
PV UUID yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi
5、再把 /dev/sdb 从卷组中移走
[root@localhost mnt]# vgreduce VGroup /dev/sdb
Removed "/dev/sdb" from volume group "VGroup"
#可以看到 /dev/sdb 不在 "VGroup" 卷组中了
[root@localhost mnt]# pvdisplay /dev/sdb
"/dev/sdb" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID yAzAvC-2ISI-DOVZ-pzfQ-wSLr-S91g-H387pi
6、再把 /dev/sdb 从物理卷中移除
[root@localhost mnt]# pvremove /dev/sdb
Labels on physical volume "/dev/sdb" successfully wiped.
#可以看到物理卷中没有了
[root@localhost mnt]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <44.00g 4.00m
/dev/sdc VGroup lvm2 a-- 19.99g 0
/dev/sdd VGroup lvm2 a-- 9.99g 9.98g
7、最后就可以把磁盘拆走了
网友评论