1.lvm的介绍
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。Linux用户安装Linux操作系统时 遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当 一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间 耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。
2.lvm中的存储单位
*物理存储介质(PhysicalStorageMedia)
指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元。
*物理卷(Physical Volume,PV)
指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
*卷组(Volume Group,VG)
类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。
*逻辑卷(Logical Volume,LV)
类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。
*物理块(Physical Extent,PE)
每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。
*逻辑块(Logical Extent,LE)
LVM抽象模型
逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
图所示LVM抽象模型,展示了PV、VG、LV三者之间关系:
和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容:PV描述符、VG描述符、LV描述符、和一些PE描述符。
系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。
为什么要使用lvm呢
逻辑卷和逻辑卷管理有助于更加轻松地管理磁盘空间。如果文件系统需要更多的空间 , 可以将其卷组的可用空间分配给逻辑卷 ,并且可以调整文件系统的大小。如果磁盘开始出现错误 , 可以通过卷组将替换磁盘注册为物理卷 , 并且逻辑卷的范围可迁移到新磁盘
3.如何使用
1)首先用fdisk命令创建一个分区,并设置id为linux lvm类型的,上一篇磁盘管理学过,不会的话,可以去翻一下我的博客,下图是我创建好以后的截图
pvcreate /dev/vdb1 ##把磁盘vdb1设为物理卷
vgcreate leigroup /dev/vdb1 ##创造卷组leigroup
lvcreate -L 50m -n leidata leigroup ##创建大小为50m的逻辑卷leidata
mkfs.xfs /dev/leigroup/leidata ##格式化卷组
mount /dev/vdb1 /xupt ##挂载使用
pvs ##查看存在的物理卷
vgs ##查看存在的卷组
lvs ##查看存在的逻辑卷
2)如何对逻辑卷进行扩容操作
第一种情况,磁盘容量足够
lvextend -L 90M /dev/leigroup/leidata ##扩大逻辑分区到90M
xfs_growfs /dev/leigroup/leidata ##更新物理卷组信息
查看扩容后的信息
第二种情况,当磁盘内容不够的时候,如果没有空闲的磁盘,先用fdisk命令新建一个空的磁盘,格式为id依旧为linux lvm类型
fdisk /dev/vdb ##新建一个分区或者是利用现有的空余分区,并将标签改为linux lvm
partprobe ##同步分区
pvcreate /dev/vdb2 ##设置vdb2为物理卷
vgextend leigroup /dev/vdb2 ##设置为物理卷组leigroup
lvextend -L 150M /dev/leigroup/leidata ##逻辑卷扩容到150M
查看扩容后的信息,如图,已经扩容到了150M
3)如何对逻辑分组进行一个降容的操作呢?由于xfs不支持对逻辑卷进行一个降容的操作,所以我们需要将磁盘格式改为ext4,那么ext4的扩容和降容怎么操作呢,首先是扩容
mkfs.ext4 /dev/leigroup/leidata ##将逻辑卷leidata格式化为ext4
mount /dev/leigroup/leidata /xupt/ ##将leidata挂载在xupt
lvextend -L 160M /dev/leigroup/leidata ##将逻辑卷leidata扩容成150M
resize2fs /dev/leigroup/leidata ##更新卷组信息
如何进行降容呢
umount /xupt/ ##卸载挂载
e2fsck -f /dev/leigroup/leidata ##强制执行文件系统检测
resize2fs /dev/leigroup/leidata 50M ##降容leidata到50M
mount /dev/leigroup/leidata /xupt/ ##挂载
lvreduce -L 50M /dev/leigroup/leidata ##更新卷组信息
4)如何迁移一个盘的数据,并只使用迁移后的盘
pvmove /dev/vdb1 /dev/vdb2 ##迁移物理卷数据,把1的数据迁移到2
vgreduce leigroup /dev/vdb1 ##移除卷分组
pvremove /dev/vdb1 ##移除物理卷
5)如何快照一个逻辑卷
lvcreate -L 20M -n leidata_backup -s /dev/leigroup/leidata ##创建一个20M的leidata的快照文件,参数可以修改
实验:以下这个实验是为了验证对备份的操作,并不会对原来的lvm内容造成影响
首先对备份的磁盘新建几个文件
然后解除挂载,并创建备份快照
将备份文件挂载到xupt,打开并删除里面所有的文件
卸载挂载,删除备份,重新创建备份
挂载到xupt后打开,重新查看
发现文件依旧存在,故验证了对备份的操作,并不会对原来的lvm内容造成影响
6)如何把分区变成gpt分区格式
parted /dev/vdb
mklabel ##改变分区标准
gpt ##改为gpt标准
partprobe ##同步分区表
重启后
ok~