一、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
[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创建完成,然后格式化并挂载就可以使用了
[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的数据打包压缩备份)
快照卷的移除
快照卷只是用于数据备份(原数据改变,快照卷的数据不会改变)
LVM总结完毕,如有疏忽的地方,还请广大博友提宝贵意见!!!!