The Logical Volume Manager (LVM) provides tools to create virtual block devices from physical devices
LVM是一种单机硬盘虚拟化的技术,在LVM的架构体系中,最关键的三个概念是
上面这三个概念非常重要,每一个都必须理解,否则谈不上使用LVM(按照本文手动实际执行测试下,基本就理解了)
在部署LVM时,要依次配置PV物理卷、VG卷组和LV逻辑卷。常用的LVM部署命令如下表所示:
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdispaly |
删除 | pvremote | vgremote | lvremote |
扩展 | 物理卷不能扩展 | vgextend | lvextend |
缩小 | 物理卷不能缩小 | vgreduce | lvreduce |
目标:格式化挂载一个LVM逻辑卷磁盘以供使用
准备条件:一台测试机器,该机器上有三块无用的测试数据盘如 /dev/sdb、/dev/sdc、/dev/sdd
测试环境可通过VirtualBox等虚拟化环境搭建,不再赘述
操作步骤参考如下
disk1=/dev/sdd
disk2=/dev/sde
disk3=/dev/sdf
vgname=vgname01
lvname=lvname01
#这里是把三块物理磁盘初始化创建为LVM PV
#syntax: pvcreate pvname1 pvname2 pvname3 ...
pvcreate $disk1 $disk2 $disk3
pvs
pvdisplay
# [root@b103-10-210-128-42 ~]# pvs
# PV VG Fmt Attr PSize PFree
# /dev/sdd lvm2 --- <278.88g <278.88g
# /dev/sde lvm2 --- 893.75g 893.75g
# /dev/sdf lvm2 --- 893.75g 893.75g
# 注意这里的PVName(Physical Volume Name),即 /dev/sdd、/dev/sde、可以看到磁盘路径即PVName
#syntax: vgcreate vgname pvname1 pvname2 pvname3 ...
vgcreate $vgname $disk1 $disk2 $disk3
vgs
pvs
pvdisplay
vgdisplay
#同样特别注意这里的 VGName(Volume Group Name)
#这里的VGName名称是全局唯一的,不能重复(不绝对,但是你这么理解也这么用,能省很多事)
#一个VGName或者说一个卷组可以对应1块或多块磁盘,我这里是对应3块
# [root@b103-10-210-128-42 ~]# vgs
# VG #PV #LV #SN Attr VSize VFree
# vgname01 3 0 0 wz--n- <2.02t <2.02t
# [root@b103-10-210-128-42 ~]# vgdisplay | less
# [root@b103-10-210-128-42 ~]# pvs
# PV VG Fmt Attr PSize PFree
# /dev/sdd vgname01 lvm2 a-- 278.87g 278.87g
# /dev/sde vgname01 lvm2 a-- <893.75g <893.75g
# /dev/sdf vgname01 lvm2 a-- <893.75g <893.75g
#vgs显示了这个vg对应三个pv
#pvs显示这三个pv,对应的都是vgname01这个vg
lvcreate --name $vgname/$lvname --size 10G $vgname
pvs
vgs
lvs
pvdisplay
vgdisplay
lvdisplay
# [root@b103-10-210-128-42 ~]# pvs
# PV VG Fmt Attr PSize PFree
# /dev/sdd vgname01 lvm2 a-- 278.87g 268.87g
# /dev/sde vgname01 lvm2 a-- <893.75g <893.75g
# /dev/sdf vgname01 lvm2 a-- <893.75g <893.75g
# [root@b103-10-210-128-42 ~]# vgs
# VG #PV #LV #SN Attr VSize VFree
# vgname01 3 1 0 wz--n- <2.02t <2.01t
# [root@b103-10-210-128-42 ~]# lvs
# LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
# lvname01 vgname01 -wi-a----- 10.00g
#同样的特别注意这里的 LVName(Logical Volume)
#把这个Name理解并用好了,这LVM就算入门了
#官方文档有这么一句话 Where commands take VG or LV names as arguments, the full path name is optional
#因此创建逻辑卷,如下三种方法都可以
#1 lvcreate --name $lvname --size 10G $vgname
#2 lvcreate --name $vgname/$lvname --size 10G $vgname
#3 lvcreate --name /dev/$vgname/$lvname --size 10G $vgname
#只要脑中认识到,逻辑卷总是在某个卷组下面,即 /dev/VolumeGroupName/LogicalVolumeName ,就足够了
#以上,我们通过 pv -> vg -> lv 这三套,最终创建出一个可以使用的虚拟盘符,盘符的路径即LVName,可以通过下面的命令查看
#[root@b103-10-210-128-42 ~]# lvdisplay | grep 'LV Path'
# LV Path /dev/vgname01/lvname01
#开始挂载使用
testpath=/lvmtest
mkfs.xfs /dev/$vgname/$lvname
mkdir -p $testpath
mount /dev/$vgname/$lvname $testpath
df -h | grep $testpath
#写入数据测试
dd if=/dev/zero of=$testpath/testfile01 bs=1M count=1000 oflag=direct
#有了上面的概念,及实操理解,我们很容易就能知道
#要彻底删除某个磁盘的LVM使用,需要首先删除所有LV,再删除所有VG,最后删除这个PV(即具体的磁盘)
#下面的测试紧接上文
#目标:清楚一台机器的LVM使用(前提是对应的磁盘其上数据皆不需要或已妥善备份)
# [root@b103-10-210-128-42 ~]# pvs
# PV VG Fmt Attr PSize PFree
# /dev/sdd vgname01 lvm2 a-- 278.87g 268.87g
# /dev/sde vgname01 lvm2 a-- <893.75g <893.75g
# /dev/sdf vgname01 lvm2 a-- <893.75g <893.75g
# [root@b103-10-210-128-42 ~]# vgs
# VG #PV #LV #SN Attr VSize VFree
# vgname01 3 1 0 wz--n- <2.02t <2.01t
# [root@b103-10-210-128-42 ~]# lvs
# LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
# lvname01 vgname01 -wi-ao---- 10.00g
#现在我们一下就能看出,机器上有3个PV,这个三个PV都是卷组vgname01使用的
#卷组vgname01只创建了一个LV即 /dev/vgname01/lvname01
disk1=/dev/sdd
disk2=/dev/sde
disk3=/dev/sdf
vgname=vgname01
lvname=lvname01
#如果有任何挂载或使用,则先去掉
#(执行命令时不要在已挂载的路径里待着)
umount /dev/$vgname/$lvname
mount | grep /dev/$vgname/$lvname
lvremove /dev/$vgname/$lvname
vgremove /dev/$vgname
pvremove $disk1 $disk2 $disk3
LVM快速使用
http://t.csdn.cn/IGjYD
https://blog.csdn.net/xys2015/article/details/125227719