钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>
一、简介
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM的工作原理是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
基本的逻辑卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。
VG(Volumne Group)- 卷组
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
LV(Logical Volume)- 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
系统平台:CentOS 7
LVM版本:lvm2-2.02.130-5.el7.x86_64
设备类型:分区、物理磁盘
磁盘准备:新增一块磁盘做实验
三、安装LVM管理工具
1、检查系统中是否安装了LVM管理工具
[root@bash~]#rpm-qa|greplvmmesa-private-llvm-3.6.2-2.el7.x86_64lvm2-2.02.130-5.el7.x86_64lvm2-libs-2.02.130-5.el7.x86_64
2、如果未安装,则使用yum方式安装
#yum-yinstalllvm*[root@localhost~]#rpm-qalvm2lvm2-2.02.130-5.el7.x86_64
四、新建一个分区
1、使用/dev/sdb模拟分区
#fdisk/dev/sdb
文件系统类型为:8e (Linux LVM)
[root@bash~]#fdisk-l/dev/sdbDisk/dev/sdb:21.5GB,21474836480bytes,41943040sectorsUnits=sectorsof1*512=512bytesSectorsize(logical/physical):512bytes/512bytesI/Osize(minimum/optimal):512bytes/512bytesDisklabeltype:dosDiskidentifier:0x141c2b15DeviceBootStartEndBlocksIdSystem/dev/sdb120481048780752428808eLinuxLVM/dev/sdb2104878082097356752428808eLinuxLVM/dev/sdb3209735683145932752428808eLinuxLVM/dev/sdb4314593284194303952418568eLinuxLVM
五、创建PV
命令介绍:
#pvs查看pv状态#pvcreate将物理分区新建成为PV#pvscan查询目前系统里面任何具有PV的磁盘#pvdisplay显示出目前系统上面的PV状态#pvremove将PV属性移除,让该分区不具有PV属性
1、将/dev/sdb1 – /dev/sdb4新建成为PV格式
[root@bashtest]#pvcreate/dev/sdb{1..4}Physicalvolume\"/dev/sdb1\"successfullycreatedPhysicalvolume\"/dev/sdb2\"successfullycreatedPhysicalvolume\"/dev/sdb3\"successfullycreatedPhysicalvolume\"/dev/sdb4\"successfullycreated
2、查询目前系统里面任何具有PV的磁盘
[root@bashtest]#pvscanPV/dev/sdb3lvm2[5.00GiB]PV/dev/sdb2lvm2[5.00GiB]PV/dev/sdb1lvm2[5.00GiB]PV/dev/sdb4lvm2[5.00GiB]Total:4[20.00GiB]/inuse:0[0]/innoVG:4[20.00GiB]
六、创建VG
命令介绍:
#vgcreate新建VGvgcreate[-sN[mgt]]VG名称设备名称-s接PE的大小#vgscan查询目前系统里面是否有VG的磁盘#vgs查看vg状态#vgdisplay显示出目前系统上面的VG状态#vgextend在VG内增加额外的PV#vgreduce在VG内删除PV#vgchange设置VG是否启动(active)#vgremove删除一个VG
PV的名称是分区的设备文件名字,VG名称可以自定义的,我将VG的名称定义为myvg
1、将/dev/sdb1-/dev/sdb3
新建为一个VG,且指定PE为15MB
[root@bashtest]#vgcreate-s15M\"myvg\"/dev/sdb{1..3}Volumegroup\"myvg\"successfullycreated
2、查看系统上的VG状态
[root@bashtest]#pvscanPV/dev/sdb1VGmyvglvm2[5.00GiB/5.00GiBfree]PV/dev/sdb2VGmyvglvm2[5.00GiB/5.00GiBfree]PV/dev/sdb3VGmyvglvm2[5.00GiB/5.00GiBfree]PV/dev/sdb4lvm2[5.00GiB]Total:4[19.98GiB]/inuse:3[14.99GiB]/innoVG:1[5.00GiB]
3.显示出目前系统上面的VG状态
[root@bashtest]#vgdisplay---Volumegroup---VGNamemyvgSystemIDFormatlvm2MetadataAreas3MetadataSequenceNo1VGAccessread/writeVGStatusresizableMAXLV0CurLV0OpenLV0MaxPV0CurPV3ActPV3VGSize14.99GiBPESize15.00MiBTotalPE1023AllocPE/Size0/0FreePE/Size1023/14.99GiBVGUUIDCT1KmC-upAS-0r1t-5KQV-MR7z-2jfj-ufOc8Q
4、新增PV给myvg
[root@bashtest]#vgextend\"myvg\"/dev/sdb4Volumegroup\"myvg\"successfullyextended
5、显示出目前系统上面的VG状态
[root@bashtest]#vgdisplay---Volumegroup---VGNamemyvgSystemIDFormatlvm2MetadataAreas4MetadataSequenceNo2VGAccessread/writeVGStatusresizableMAXLV0CurLV0OpenLV0MaxPV0CurPV4ActPV4VGSize19.98GiBPESize15.00MiBTotalPE1364AllocPE/Size0/0FreePE/Size1364/19.98GiBVGUUIDCT1KmC-upAS-0r1t-5KQV-MR7z-2jfj-ufOc8Q
七、创建LV
命令介绍:
# lvcreate 新建LV
lvcreate [-L N[mgt]] [-n LV名称] VG名称
lvcreate [-l N] [-n LV名称] VG名称
注意: -L 后面接容量,最小单位为PE, 数量必须是PE的倍数,若不相符,系统会自行计算最相近的容量
-l 后面接PE的“个数”,而不是数量
-n 后面接LV的名称
# lvscan 查询系统LV
# lvdisplay 显示系统LV状态
# lvextend 在LV里增加容量
#lvs 查看lvs状态
# lvreduce 在LV里减少容量
# lvremove 删除一个LV
# lvresize 对LV进行容量大小的调整
1、将整个myvg全部分配给mglv
[root@bash test]# lvcreate -L 19.98G -n mylv myvg
Rounding up size to full physical extent 19.98 GiB
Logical volume \”mylv\” created.
注:如果报错,说明分配lv的容量不是PE的整数倍,一个PE为15M,将lv容量调整为15的整数倍就可以。
2.查看LV情况
[root@bash test]# lvdisplay
— Logical volume —
LV Path /dev/myvg/mylv
LV Name mylv
VG Name myvg
LV UUID crtMed-duu9-Nrfc-tCJR-wzby-wFP0-v1P9pT
LV Write Access read/write
LV Creation host, time bash, 2017-02-07 17:01:23 +0800
LV Status available
# open 0
LV Size 19.98 GiB
Current LE 1364
Segments 4
Allocation inherit
Read ahead sectors auto
– currently set to 8192
Block device 253:0
[root@bash test]# ll /dev/myvg/mylv
lrwxrwxrwx 1 root root 7 Feb 7 17:01 /dev/myvg/mylv -> ../dm-0
[root@bash test]# ll /dev/dm-0
brw-rw—- 1 root disk 253, 0 Feb 7 17:01 /dev/dm-0
3、进行格式化与挂载
# mke2fs -t ext4 /dev/myvg/mglv
# mkdir /mnt/lvm
# mount /dev/myvg/mglv /mnt/lvm
[root@bash lvm]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 20961280 4709020 16252260 23% /
devtmpfs 486140 0 486140 0% /dev
tmpfs 500664 76 500588 1% /dev/shm
tmpfs 500664 50776 449888 11% /run
tmpfs 500664 0 500664 0% /sys/fs/cgroup
/dev/sda3 20961280 2971196 17990084 15% /usr
/dev/sda1 520876 157624 363252 31% /boot
tmpfs 100136 44 100092 1% /run/user/0
/dev/sr0 7587292 7587292 0 100% /media/CentOS7-mirror
/dev/mapper/myvg-mylv 20490832 45080 19381816 1% /mnt/lvm
4、复制文件
[root@bash lvm]# cp -a /etc/fstab /mnt/lvm/
[root@bash lvm]# ls /mnt/lvm/
fstab lost+found
八、放大LV容量
步骤:
1)、利用fdisk设置新的额具有8e /systemID的分区
2)、利用pvcreate构建PV
3)、利用vgextend将PV加进myvg
4)、利用lvresize将新加入的PV内的PE加入mylv中
5)、通过resize2fs将文件系统的容量增加
1、新增硬盘/dev/sdc
[root@bash lvm]# ll /dev/sdc
brw-rw—- 1 root disk 8, 32 Feb 7 17:18 /dev/sdc
2、新建新的PV
[root@bash lvm]# pvcreate /dev/sdc
Physical volume \”/dev/sdc\” successfully created
[root@bash lvm]# pvscan
PV /dev/sdb1 VG myvg lvm2 [5.00 GiB / 0 free]
PV /dev/sdb2 VG myvg lvm2 [5.00 GiB / 0 free]
PV /dev/sdb3 VG myvg lvm2 [5.00 GiB / 0 free]
PV /dev/sdb4 VG myvg lvm2 [5.00 GiB / 0 free]
PV /dev/sdc lvm2 [20.00 GiB]
Total: 5 [39.98 GiB] / in use: 4 [19.98 GiB] / in no VG: 1 [20.00 GiB]
3、增加VG容量
[root@bash lvm]# vgextend myvg /dev/sdc
Volume group \”myvg\” successfully extended
[root@bash lvm]# vgdisplay #查看
— Volume group —
VG Name myvg
System ID
Format lvm2
Metadata Areas 5
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 5
Act PV 5
VG Size 39.98 GiB
PE Size 15.00 MiB
Total PE 2729
Alloc PE / Size 1364 / 19.98 GiB
Free PE / Size 1365 / 20.00 GiB
VG UUID CT1KmC-upAS-0r1t-5KQV-MR7z-2jfj-ufOc8Q
4.增加LV容量
[root@bash lvm]# lvresize -l +200 /dev/myvg/mylv #无单位表示增减PE个数,
+表示增加,无+号代表增加到
Size of logical volume myvg/mylv changed from 19.98 GiB (1364 extents) to 22.91 GiB (1564 extents).
Logical volume mylv successfully resized.
[root@bash lvm]# lvdisplay
— Logical volume —
LV Path /dev/myvg/mylv
LV Name mylv
VG Name myvg
LV UUID crtMed-duu9-Nrfc-tCJR-wzby-wFP0-v1P9pT
LV Write Access read/write
LV Creation host, time bash, 2017-02-07 17:01:23 +0800
LV Status available
# open 1
LV Size 22.91 GiB
Current LE 1564
Segments 5
Allocation inherit
Read ahead sectors auto
– currently set to 8192
Block device 253:0
5.查看
[root@bash lvm]# df -h
/dev/mapper/myvg-mylv 20G 45M 19G 1% /mnt/lvm
6、将LV的容量扩充到整个文件系统
# dumpe2fs /dev/myvg/mglv 查看文件系统内的superblock记录情况
# resize2fs [-f] [device] [size] 将LV的容量扩充到整个文件系统
[root@bash lvm]# resize2fs /dev/myvg/mylv
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv is mounted on /mnt/lvm; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 3
The filesystem on /dev/myvg/mylv is now 6005760 blocks long.
7、查看
[root@bash lvm]# df -h
/dev/mapper/myvg-mylv 23G 45M 22G 1% /mnt/lvm
九、缩小LV容量
1、先卸载
[root@bash ~]# umount /mnt/lvm/
2、检测文件系统
[root@bash ~]# e2fsck -f /dev/myvg/mylv
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/mylv: 12/1507328 files (0.0% non-contiguous), 138659/6005760 blocks
3.降低文件系统容量
[root@bash ~]# resize2fs /dev/myvg/mylv 5000M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 1280000 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 1280000 blocks long.
4、重新挂载并查看容量大小
[root@bash ~]# mount /dev/myvg/mylv /mnt/lvm/
[root@bash ~]# df -h |grep /dev/mapper/
/dev/mapper/myvg-mylv 4.7G 33M 4.4G 1% /mnt/lvm
5、降低LV容量
[root@bash ~]# lvresize -L 5000M /dev/myvg/mylv #降低lv到5000M,-号表示减少多少
Rounding size to boundary between physical extents: 4.89 GiB
WARNING: Reducing active and open logical volume to 4.89 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
Size of logical volume myvg/mylv changed from 22.91 GiB (1564 extents) to 4.89 GiB (334 extents).
Logical volume mylv successfully resized.
6、查看容量大小
[root@bash ~]# lvdisplay
— Logical volume —
LV Path /dev/myvg/mylv
LV Name mylv
VG Name myvg
LV UUID crtMed-duu9-Nrfc-tCJR-wzby-wFP0-v1P9pT
LV Write Access read/write
LV Creation host, time bash, 2017-02-07 17:01:23 +0800
LV Status available
# open 1
LV Size 4.89 GiB
Current LE 334
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 8192
Block device 253:0
7、将/dev/sdc从myvg中移除
[root@bash ~]# vgreduce myvg /dev/sdc
Removed \”/dev/sdc\” from volume group \”myvg\”
[root@bash ~]# pvremove /dev/sdc
Labels on physical volume \”/dev/sdc\” successfully wiped
[root@bash ~]# pvscan
PV /dev/sdb1 VG myvg lvm2 [5.00 GiB / 105.00 MiB free]
PV /dev/sdb2 VG myvg lvm2 [5.00 GiB / 5.00 GiB free]
PV /dev/sdb3 VG myvg lvm2 [5.00 GiB / 5.00 GiB free]
PV /dev/sdb4 VG myvg lvm2 [5.00 GiB / 5.00 GiB free]
Total: 4 [19.98 GiB] / in use: 4 [19.98 GiB] / in no VG: 0 [0 ]
十、删除逻辑卷
我们在创建好逻辑卷后可以通过创建文件系统,挂载逻辑卷来使用它,如果说我们不想用了也可以将其删除掉。
【注意】对于创建物理卷、创建卷组以及创建逻辑卷我们是有严格顺序的,同样,对于删除逻辑卷、删除卷组以及删除物理卷也是有严格顺序要求的
①首先将正在使用的逻辑卷卸载掉 通过 umount 命令
②将逻辑卷先删除 通过 lvremove 命令
③删除卷组 通过 vgremove 命令
④最后再来删除我们的物理卷 通过 pvremove 命令
[root@bash ~]# umount /mnt/lvm/ #卸载
[root@bash ~]# lvremove /dev/myvg/mylv #删除LV
Do you really want to remove active logical volume mylv? [y/n]: y
Logical volume \”mylv\” successfully removed
[root@bash ~]# vgremove myvg #删除VG
Volume group \”myvg\” successfully removed
[root@bash ~]# pvremove /dev/sdb{1..4} #删除PV
Labels on physical volume \”/dev/sdb1\” successfully wiped
Labels on physical volume \”/dev/sdb2\” successfully wiped
Labels on physical volume \”/dev/sdb3\” successfully wiped
Labels on physical volume \”/dev/sdb4\” successfully wiped
十一、逻辑卷快照
当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data)。创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制(copy-on-write)。
在写操作写入块之前,将原始数据移动到 snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。
创建snapshot的大小并不需要和原始卷一样大,其大小仅仅只需要考虑两个方面:从shapshot创建到释放这段时间内,估计块的改变量有多大;数据更新的频率。一旦 snapshot的空间记录满了原始卷块变换的信息,那么这个snapshot立刻被释放,从而无法使用,从而导致这个snapshot无效。
731b75180b80af30.gif
1.查看挂在情况
[root@bash ~]# df | grep /dev/mapper
/dev/mapper/myvg-mylv 3030800 4676 2868840 1% /mnt/lvm
2、拷贝数据
[root@bash ~]# cp -a /etc/fstab /etc/issue /mnt/lvm/
[root@bash ~]# ll /mnt/lvm/
total 24
-rw-r–r–. 1 root root 595 Dec 26 05:39 fstab
-rw-r–r–. 1 root root 78 Dec 26 05:50 issue
drwx—— 2 root root 16384 Feb 7 18:43 lost+found
3、创建快照
[root@bash ~]# lvcreate -L 80M -s -p r -n lvsnap /dev/myvg/mylv #-p r指定权限为只读
Logical volume \”lvsnap\” created.
[root@bash snapshot]# lvdisplay /dev/myvg/lvsnap
— Logical volume —
LV Path /dev/myvg/lvsnap
LV Name lvsnap
VG Name myvg
LV UUID CcICLA-SV2u-ojuv-ZWnX-3JBg-h1Bg-NJNieO
LV Write Access read/write
LV Creation host, time bash, 2017-02-08 01:36:53 +0800
LV snapshot status active destination for mylv
LV Status available
# open 1
LV Size 3.00 GiB
Current LE 768
COW-table size 80.00 MiB
COW-table LE 20
Allocated to snapshot 0.00% #快照卷为空
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 8192
Block device 253:3
注:建立快照的卷大小只需要原始逻辑卷的15%~20%就够了。也可以使用lvextend放大快照。
4、将刚才创建的快照挂载查看
[root@bash ~]# mkdir /mnt/snapshot
[root@bash ~]# mount /dev/myvg/lvsnap /mnt/snapshot/
[root@bash ~]# cd /mnt/snapshot/
[root@bash snapshot]# ls
fstab issue lost+found
[root@bash snapshot]# df -h | grep /dev/mapper*
/dev/mapper/myvg-mylv 2.9G 4.6M 2.8G 1% /mnt/lvm
/dev/mapper/myvg-lvsnap 2.9G 4.6M 2.8G 1% /mnt/snapshot
注:可使用tar命令对快照数据进行归档,以便以后恢复使用
5、删除快照
[root@bash ~]# umount /mnt/snapshot/ #先卸载
[root@bash ~]# lvremove /dev/myvg/lvsnapshot #后删除
Do you really want to remove active logical volume lvsnapshot? [y/n]: y
Logical volume \”lvsnapshot\” successfully removed
总结:
1、LVM最主要的用处是在实现一个可以弹性调整容量的文件系统上,而不是在新建一个性能为主的磁盘上。LVM默认的读写模式是线性模式
2、实现的流程:
f6230c3dd3d91d49.jpg
3、删除系统内的LVM
1)先卸载系统上面的 LVM 文件系统(包括快照与所有LV)
2)使用 lvremove 删除 LV
3)使用 vgchange -an VGname 让 VGname 这个 VG 不具有 Active 的标志
4)使用 vgremove 删除VG
5)使用 pvremove 删除PV
6)使用 fdisk 将 ID 修改回来
4、PV, VG, LV 常用命令的总结
d4d94edefd09fe02.jpg
5、/boot分区与/swap分区不能使用LVM
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2017-02/140396p2.htm