一、LVM简介
LVM是 Logical VolumeManager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。
二、LVM工作原理
LVM 在每个物理卷头部都维护了一个 metadata,每个 metadata 中都包含了整个 VG 的信息,包括每个 VG 的布局配置、PV 的编号、LV 的编号,以及每个 PE 到 LE 的映射关系。同一个 VG 中的每个 PV 头部的信息是相同的,这样有利于故障时进行数据恢复。
LVM 对上层文件系统提供 LV 层,隐藏了操作细节。对文件系统而言,对 LV 的操作与原先对 Partition 的操作没有差别。当对 LV 进行写入操作时,LVM 定位相应的 LE,通过 PV 头部的映射表,将数据写入到相应的 PE 上
三、使用LVM的优缺点
使用 LVM 的优势:
文件系统可以跨多个磁盘,因此大小不会受物理磁盘的限制。
可以在系统运行状态下动态地扩展文件系统大小。
可以增加新磁盘到 LVM 的存储池中。
可以以镜像的方式冗余重要数据到多个物理磁盘上。
使用 LVM 的限制:
当卷组中的一个磁盘损坏时,整个卷组都会受影响。
不能减小文件系统大小(受文件系统类型限制)。
因为加入了额外的操作,存储性能会受影响。
四、LVM基本术语
物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
物理卷(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
PE(physical extent):每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4M
LVM的操作流程图
五、LVM的创建与管理
前期准备工作
/dev/sda3的磁盘信息
/dev/sdb3的磁盘信息
分区完成之后,查看内核是否已经识别到分区如果没有识别,则重启电脑
1)、pv的创建与管理
・pvcreate :将实体 partition 创建成为 PV ;
・pvscan :搜寻目前系统里面任何具有 PV 的磁盘;
・pvdisplay :显示出目前系统上面的 PV 状态;
・pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。
将/dev/sda3 和/dev/sdb3 创建成pv,大小为5G
使用pvcreate创建 pv
1
2
3
|
[root@station64 ~]# pvcreate /dev/sd{a,b}
3
Physical volume
"/dev/sda3"
successfully created
Physical volume
"/dev/sdb3"
successfully created
|
查看pv的详细信息
使用pvs查看简略信息,使用pvdisplay查看详细信息
2)、VG 的创建与管理
vgcreate :就是主要创建 VG 的命令
vgscan :搜寻系统上面是否有 VG 存在
vgdisplay :显示目前系统上面的 VG 状态;
vgextend :在 VG 内添加额外的 PV ;
vgreduce :在 VG 内移除 PV;
vgchange :配置 VG 是否启动 (active);
vgremove :删除一个 VG 啊!
使用vgcreate创建 testvg,并通过vgs查看vg的详细信息
当vg创建完成之后,我们就可以查看pe的大小以及pe的数量
3)、LV 的创建与管理
lvcreate :创建 LV 啦!
lvscan :查询系统上面的 LV ;
lvdisplay :显示系统上面的 LV 状态啊!
lvextend :在 LV 里面添加容量!
lvreduce :在 LV 里面减少容量;
lvremove :删除一个 LV !
lvresize :对 LV 进行容量大小的调整!
创建一个5G大小的lv,名称是testlv,并通过lvdisplay查看testlv的信息
-L:指定创建lv的大小
-l :指定pe的数量
-n :指定lv的名称
此时lvm创建完成,然后格式化并挂载就可以使用了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[root@station64 ~]# mke2fs -t ext4 /dev/testvg/testlv
mke2fs
1.41
.
12
(
17
-May-
2010
)
Filesystem
label
=
OS type: Linux
Block size=
4096
(log=
2
)
Fragment size=
4096
(log=
2
)
Stride=
0
blocks, Stripe width=
0
blocks
327680
inodes,
1310720
blocks
65536
blocks (
5.00
%) reserved
for
the
super
user
First data block=
0
Maximum filesystem blocks=
1342177280
40
block groups
32768
blocks per group,
32768
fragments per group
8192
inodes per group
Superblock backups stored on blocks:
32768
,
98304
,
163840
,
229376
,
294912
,
819200
,
884736
Writing inode tables: done
Creating journal (
32768
blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every
36
mounts or
180
days, whichever comes first. Use tune2fs -c or -i to
override
.
[root@station64 ~]# mount /dev/testvg/testlv /mnt/
|
六、LVM动态调整大小
1、放大LVM的容量
用 fdisk 配置新的具有 8e system ID 的 partition
利用 pvcreate 建置 PV
利用 vgextend 将 /dev/sdb2 加入到 testvg中,并查看容量增加了5G
利用 lvresize 将新加入的testvg加入到testlv中,并对比加入之前与加入之后testlv容量的变化
lvextend -L 指定增加了3G
通过 resize2fs 修改文件系统的容量
2、缩小LVM的容量(缩小有风险)
1、卸载并强行检查文件系统
使用resize2fs缩减容量到3G(注意是到3G,并不是缩减了3G)
查看挂载之后testlv(逻辑)的大小为3G
使用lvreduce -L 减少3G,并检测,然后挂载
查看挂载之后testlv(物理)的大小为 5G
VG的缩减
我们想要将/dev/sda3这块硬盘取下了,在取之前我们应该先查看一下这块硬盘是否有数据存在,如果直接取下硬盘,则导致数据丢失,所以我们使用pvdisplay命令查看 详细信息。发现sda3上有数据存在
使用pvmove将sda3的数据转移到sdb3上,并通过pvdisplay查看
从testvg中移除/dev/sda3这块硬盘,并存pv中删除这块硬盘
七、lvm快照卷的创建与管理
快照卷的创建
lvcreate -L
-n :快照卷的名称
-p:快照卷的访问权限
-s:创建快照卷
创建一个testlv-snap的快照卷大小为1G
挂载快照卷到media目录下,并查看快照中的数据
此时快照卷创建完成(也就意味着数据备份完成,我们可以使用tar命令将media的数据打包压缩备份)
快照卷的移除
快照卷只是用于数据备份(原数据改变,快照卷的数据不会改变)
默认情况下创建pv,出现如下错误:
[root@hp ~]# pvcreate /dev/memdisk
Device /dev/memdisk not found (or ignored by filtering).
解决方法:
修改配置文件 lvm.conf ,types = [ "fd", 16 ] 修改成 types = [ "memdisk", 16 ],其中 memdisk 是 PCIe 固态盘在 /dev/ 下的盘符。
vi /etc/lvm/lvm.conf
并取消 types = [ "fd", 16 ] 前的注释符 # ,并改成 types = [ "memdisk", 16 ]。
或不取消 types = [ "fd", 16 ] 前的注释符,而直接添加一项 types = [ "memdisk", 16 ]。
保存 & 退出
再试试看,是不是可以了?
[root@hp ~]# pvcreate /dev/memdiska1
Writing physical volume data to disk "/dev/memdiska1"
Physical volume "/dev/memdiska1" successfully created