简介
在今天,数据每天大量增多的情况下,服务器经常面临正常使用的分区空间不够的情况,假如还是使用传统分区方式的话,再加一颗新硬盘,然后重新分割、格式化,将原本的数据完整的复制过来, 然后将原本的 partition 卸载重新挂载新的 partition 。啊!好忙碌啊!若是第二次分割却给的容量太多!导致很多磁盘容量被浪费了! 你想要将这个 partition 缩小时,你又该如何呢?LVM的出现,正是为了解决这些问题。。。
LVM(全称:Logical Volume Manager 中文名称:逻辑卷管理器),又译为逻辑卷宗管理器、逻辑扇区管理器、逻辑磁盘管理器,是Linux核心所提供的逻辑卷管理(Logical volume management)功能。它在硬盘的硬盘分区之上,又创建一个逻辑层,以方便系统管理硬盘分区系统。最先由IBM开发,在AIX系统上实现,OS/2 操作系统与 HP-UX也支持这个功能。在1998年,Heinz Mauelshagen 根据在 HP-UX 上的逻辑卷管理器,写作出第一个Linux 版本的逻辑卷管理器。
LVM,它可以零停机前提下可以自由地对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区,它的出现可以说解决磁盘管理的很多问题。把它说得这么好,接下来我们就来慢慢了解它,在介绍它怎么使用之前,我们先来了解几个术语。
术语
1、PM:物理存储介质(physical media)
这里指系统的存储设备:硬盘,是存储系统最低层的存储单元。
2、PV:物理卷(physical volume)
物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数(也就是在传统分区上附加了LVM的管理数据)。
3、PE:(physical extent)
每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
4、VG:卷组(Volume Group)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
5、LV:逻辑卷(logical volume)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
6、LE:(logical extent)
逻辑卷也被划分为被称为LE(LogicalExtents)的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
结构分析
首先可以看到,物理卷(PV)被由大小等同的基本单元PE组成,一个卷组由一个或多个物理卷组成。从上图可以明显看到,PE和LE有着一一对应的关系。逻辑卷建立在卷组上。逻辑卷就相当于非LVM系统的磁盘分区,可以在其上创建文件系统。
LVM工作方式
下面来看一看LVM到底是怎样工作的。每一个物理卷都被分成几个基本单元,即所谓的PE。PE的大小是可变的,但是必须和其所属卷组的物理卷相同。在每一个物理卷里,每一个PE都有一个惟一的编号。PE是一个物理存储里可以被LVM寻址的最小单元。
每一个逻辑卷也被分成一些可被寻址的基本单位,即所谓的LE。在同一个卷组中,LE的大小和PE是相同的,很显然,LE的大小对于一个卷组中的所有逻辑卷来说都是相同的。
在一个物理卷中,每一个PE都有一个惟一的编号,但是对于逻辑卷这并不一定是必需的。这是因为当这些PE ID号不能使用时,逻辑卷可以由一些物理卷组 成。因此,LE ID号是用于识别LE以及与之相关的特定PE的。正如前面所提到的,LE和PE之间是一一对应的。每一次存储区域被寻址访问或者LE的ID被使用,都会把数据写在物理存储设备之上。
你可能会觉得奇怪,有关逻辑卷和逻辑卷组的所有元数据都存到哪儿去了。类似的在非LVM系统中,有关分区的数据是存储在分区表中,而分区表被存储在了每一个物理卷的起始位置。VGDA(卷组描述符区域)功能就好象是LVM的分区表,它存储在每一个物理卷的起始处。
VGDA由以下信息组成:
·一个PV描述符
·一个VG描述符
·LV描述符
·一些PE描述符
当系统启动LV时,VG被激活,并且VGDA被加载至内存。VGDA帮助识别LV的实际存储位置。当系统想要访问存储设备时,由VGDA建立起来的映射机制就用于访问实际的物理位置来执行I/O操作。
LVM命令介绍
在创建和使用LVM之前,首先得先安装好LVM的程序包
# rpm -qa | grep ‘lvm‘
创建 | 详细查看 | 摘要查看 | 删除 | 增加 | 减小 | |
PV | pvcreate | pvdisplay | pvs | pvremove | ||
VG | vgcreate | vgdisplay | vgs | vgremove | vgexten | vgreduce |
LV | lvcreate | lvdisplay | lvs | lvremove | lvexten | lvreduce |
从上面的表格可以看出来,命令大部分都是相似的,所以也比较容易记忆.
PV用法详解
创建 pvcreate DEVICE(/dev/sda1)
删除 pvremove DEVICE(/dev/sda2)
VG用法详解
创建 vgcreate vgNAME pv
# vgcreate myvg /dev/sda1 /dev/sda2
删除 vgremove vgNAME
# vgremove myvg
增加 vgextend vgNAME pv
# vgextend myvg /dev/sda2
减小 vgreduce vgNAME pv
lv用法详解
增加 lvcreate -L [+]SIZE -n NAME VG
# lvcreate -L 512M -n mylv1 myvg
删除 lvremove lv
如下是表示lv的两种
# lvremove /dev/myvg/mylv1
或者是用
# lvremove /dev/mapper/myvg-mylv1
增大 lvextend -L [+]SIZE lv
# lvextend -L 1G /dev/myvg/mylv1
减小 lvreduce -L [-]SIZE lv
# lvreduce -L -256M /dev/mapper/myvg-mylv1
实践篇(创建LVM)
1、首先先对一个磁盘进行分区并标记为LVM的磁盘
# fdisk /dev/sdb
# t
修改标记为8e
2、再将它创建为PV
# pvcreate /dev/sdb1
3、创建一个vg,并将/dev/sdb1这个pv加入vg组
# vgcreate myvg /dev/sdb1
4、然后再在myvg的卷组上创建一个512M的lv
# lvcreate -L 512M -n mylv1 myvg
5、然后将mylv1这个逻辑卷格式化为ext4的文件系统格式
# mke2fs -t ext4 /dev/myvg/mylv1
6、最后将mylv1挂载到/mnt/data这个目录就可以进行使用访问了
#mount /dev/myvg/mylv1 /mnt/data
本文出自 “LC的IT之路” 博客,转载请与作者联系!
原文地址:http://leezc.blog.51cto.com/8650393/1440669