目录
◆ 什么是逻辑卷(lvm)及其有什么优点
◆ 逻辑卷的组成和基础概念
◆ lvm的实现流程
◆ 放大lV容量
◆ 缩小lv容量
◆ LVM的系统快照
◆ 练习题
*什么是逻辑卷?
LVM是Logical Volume Manager(逻辑卷管理器)的简写。是Linux核心所提供的逻辑卷管理(Logical Volume Management)功能。它在硬盘的硬盘分区之上,又创建了一个逻辑层以方便系统管理硬盘分区系统。LVM的做法是将任何块设备(分区,硬盘,raid)通过软件组合起来看起来就像是独立的大磁盘,然后将这块大磁盘再分为可使用的分区lV,挂载使用。
LVM的优点:
它是建立在物理存储设备之上的一个抽象层,允许用户生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性;
LVM将存储虚拟化,使用逻辑卷,用户不会受限于物理磁盘的大小;另外,与硬件相关的存储设置被器隐藏,用户可以不用停止应用或卸载文件系统来调整卷大小或数据迁移,可以减少操作成本。
LVM与直接使用物理存储相比,有以下优点:
1、 灵活的容量
当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘分区成单一的逻辑卷.
2、 可伸缩的存储池;
你可以使用简单的命令来扩大或缩小逻辑卷大小,不用重新格式化或分区磁盘设备.
3、 在线的数据再分配
你可以在线移动数据,数据可以在磁盘在线的情况下重新分配.比如,你可以在线更换可热插拔的磁盘.
4、 方便的设备命名;
逻辑卷可以按你觉得方便的方式来起任何名称.
5、 磁盘条块化
你可以生成一个逻辑盘,它的数据可以被条块化存储在2个或更多的磁盘上.这样可以明显提升数据吞吐量.
6、 镜像卷
逻辑卷提供方便的方法来镜像你的数据.
7、 卷快照
使用逻辑卷,你可以获得设备快照用来一致性备份或者测试数据更新效果而不影响真实数据.
* 逻辑卷的组成和基础概念
物理存储介质(The Physical Media):
这里指系统的存储设备,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
- 物理卷(PV,Physical Volume):
物理卷就是指磁盘,磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的 物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。当前LVM允许你在每个物理卷上保存这个物理卷的0 至2份元数据拷贝。默认为1,保存在设备的开始处。为2时,在设备结束处保存第二份备份。
- 卷组(VG,Volume Group):
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
- PE:PE是建立VG后将存储空间分成的块,不同于文件系统的block,也不同于raid的chunk,默认大小是,相当于lV的基础块大小
- 逻辑卷(LV,Logical Volume):
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
- 快照卷(SnapshotVolumes)
快照卷提供在特定瞬间的一个设备虚拟映像,当快照开始时,它复制一份对当前数据区域的改变,由于它优先执行这些改变,所以它可以重构当前设备的状态。
* 逻辑卷的结构图
Physicalvolume (PV)、Volume group (VG)、Logicalvolume(LV)、 Physical extent (PE),下面我们用一个简单
的图来说明下物理卷、卷组、逻辑卷他们之间的关系:(该图来自于网络)
逻辑卷的创建,就是将多块硬盘创建物理卷,而将这些物理卷以逻辑的形式总成一个容器,然后从这个容器里面创建大小不同的分区文件,而这个容器就是所谓的卷组(VG),而从这个容器里创建大小不同的分区文件,这个分区文件就叫做逻辑卷。
PV阶段的相关命令;
pv相关的常用命令: 格式: command <device>
pvcreate:将物理分区新建成为PV
pvscan:查询出目前系统里面任何具有pv的磁盘
pvdisplay:显示出目前系统上面的pv详细状态
pvremove:将pv属性删除,让该分区不具有pv属性
VG阶段的相关命令:
vgcreate:创建vg的命令
vgcreate [options] VG名称 PV名称
-s: 指定PE大小
vgscan;查找系统上是否有VG存在
vgdisplay:显示目前系统上面的VG状态
vgextend:在VG内增加额外的PV
vgreduce:在VG内删除PV
vgchange;设置VG是否启动
vgremove:删除一个VG
LV阶段相关的命令:
lvcreate [options] -n lV名称 VG名称
-L:设定VG的大小
lvresize -l +-# <device>
resize2fs [-f] [device] [size]
-f:强制执行resize操作
size:如果不加该选项,默认是使用整个分区的容量来处理
*LVM的实现过程
1.分出三个同为2G的分区,且systemID调为8e
[[email protected] ~]# fdisk /dev/sdb -l
...
Device Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 104857599 50330624 5 Extended
/dev/sdb5 4198400 8392703 2097152 83 Linux
/dev/sdb6 8394752 12589055 2097152 83 Linux
/dev/sdb7 12591104 16785407 2097152 83 Linux
2.创建pv
[[email protected] ~]# pvcreate /dev/sdb{5,6,7,8}
Physical volume "/dev/sdb5" successfully created
Physical volume "/dev/sdb6" successfully created
Physical volume "/dev/sdb7" successfully created
全部的分区整合成为一个VG,VG的名称设置为myvg;且PE的大小为16M;
[[email protected] ~]# vgcreate -s 16M myvg /dev/sdb{5,6}
Volume group "myvg" successfully created
全部的VG容量给LV(可以分给多个LV),LV的名称为mylv;
[[email protected] ~]# lvcreate -L 2G -n mylv myvg
Logical volume "mylv" created.
最终格式化这个LV为ext3的文件系统,且挂载在/mnt/lvm中;
[[email protected] ~]# mke2fs -t ext3 /dev/myvg/mylv
[[email protected] ~]# mkdir /mnt/lvm
[[email protected] ~]# mount /dev/myvg/mylv /mnt/lvm/
[[email protected] ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
...
/dev/sr0 7587292 7587292 0 100% /run/media/lxy/CentOS 7 x86_64
tmpfs 123892 0 123892 0% /run/user/0
/dev/mapper/myvg-mylv 1998672 3140 1890676 1% /mnt/lvm
*放大LV容量
因为前面我已经预留了一个分区,前两步可以略过
1.新增8e类型的分区
2.利用pvcreate构建pv
3.利用vgextend加入myvg中
[[email protected] ~]# vgextend myvg /dev/sdb7
^[[5~ Volume group "myvg" successfully extended
[[email protected] ~]# vgdisplay myvg
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 3
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 14.95 GiB
PE Size 16.00 MiB
Total PE 957
Alloc PE / Size 128 / 2.00 GiB
Free PE / Size 829 / 12.95 GiB
VG UUID re5Y8m-2NWR-zGFI-XqXn-ByGY-RCG8-rYQwn2
4.利用lvresize将新加入的pv内的pe加入到mylv中
[[email protected] ~]# lvresize -l +829 /dev/myvg/mylv
Size of logical volume myvg/mylv changed from 2.00 GiB (128 extents) to 14.95 GiB (957 extents).
Logical volume mylv successfully resized.
[[email protected] ~]# df /mnt/lvm
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/myvg-mylv 1998672 7624 1886192 1% /mnt/lvm
5.resize2fs将文件系统的容量确实增加
[[email protected] ~]# 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 = 1, new_desc_blocks = 1
The filesystem on /dev/myvg/mylv is now 3919872 blocks long.
[[email protected] ~]# df /mnt/lvm
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/myvg-mylv 15367152 9656 14709644 1% /mnt/lvm
* 缩减LVM
缩减前准备:
查看逻辑卷使用空间情况;
不能在线缩减,得先卸载;
确保缩减后的空间大小依然能存储原有的所有数据;
在缩减之后应该先强行检查文件,以确保文件系统处于一致性状态;
- 本处想将/dev/sdb7抽离出来,要先查看/dev/sdb7的容量大小,然后计算剩余空间是否足够使用
[[email protected] ~]# pvdisplay /dev/sdb7
--- Physical volume ---
PV Name /dev/sdb7
VG Name myvg
PV Size 5.00 GiB / not usable 16.00 MiB
Allocatable yes (but full)
PE Size 16.00 MiB
Total PE 319
Free PE 0
Allocated PE 319
PV UUID fzz8ky-ToC9-dyc3-L6te-sffl-MjxO-srV1Xn
[[email protected] ~]# pvscan
PV /dev/sda2 VG centos lvm2 [99.51 GiB / 64.00 MiB free]
PV /dev/sdb5 VG myvg lvm2 [4.98 GiB / 0 free]
PV /dev/sdb6 VG myvg lvm2 [4.98 GiB / 0 free]
PV /dev/sdb7 VG myvg lvm2 [4.98 GiB / 0 free]
Total: 4 [114.46 GiB] / in use: 4 [114.46 GiB] / in no VG: 0 [0 ]
剩余的pv大小:4.98+4.98=9.96GB
[[email protected] ~]# umount /mnt/lvm
[[email protected] ~]# resize2fs /dev/myvg/mylv ^C
[[email protected] ~]# lvscan
ACTIVE ‘/dev/myvg/mylv‘ [14.95 GiB] inherit
[[email protected] ~]# e2fsck -f /dev/myvg/mylv
[[email protected] ~]# resize2fs /dev/myvg/mylv 10G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 2621440 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 2621440 blocks long.
[[email protected] ~]# mount /dev/myvg/mylv /mnt/lvm/
[[email protected] ~]# df /mnt/lvm/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/myvg-mylv 10255672 9148 9813272 1% /mnt/lv