二、LVM基本术语
前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:
*物理存储介质(Thephysicalmedia)
这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
*物理卷(physicalvolume)
物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
*卷组(VolumeGroup)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
*逻辑卷(logicalvolume)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
*PE(physicalextent)
每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
*LE(logicalextent)
逻辑卷也被划分为被称为LE(LogicalExtents)的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
首先可以看到,物理卷(PV)被由大小等同的基本单元PE组成。
一个卷组由一个或多个物理卷组成。
从上图可以看到,PE和LE有着一一对应的关系。逻辑卷建立在卷组上。逻辑卷就相当于非LVM系统的磁盘分区,可以在其上创建文件系统。
其他的概念就不多说了..接下来为大家介绍如何创建LVM卷
1.查看系统中磁盘的可用空间并且将分区标识设为8e
#fdisk /dev/hda ;如果为SCSI或SATA的为/dev/sda
输入p查看分区
执行t命令,以便通知fdisk我要修改分区的系统标识符数据
指定要修改分区编号
直接指定新的系统标识符为8e
输入w保存
最后重启(不用重启也可以输入partprobe)
2.建立物理卷
#pvcreate /dev/hda13 ;前面设定分区的编号为13
Physical volume "/dev/hda13" successfully created
3.建立卷组
#vgcreate mainVG /dev/hda13
Volume group "mainVG" successfully created
4.建立逻辑卷
以下是我建立一个100MB大小的逻辑卷空间的示范:
#lvcreate -L 100M -n 1stLV mainVG
Logical volume "1stLV" created
建立出逻辑卷后.就可以把逻辑卷当作一个分区了,例如在逻辑卷上建立文件系统.挂载这个文件系统.
值得注意的是.建立完千万别忘了建立文件系统
以我的LVM为例
#mkfs -t ext3 /dev/mainVG/1stLV
然后挂载就OK了
卸载卷的方法:
卸载物理卷:pvremove PVDEVICE
卸载卷组:vgremove VGNAME
卸载逻辑卷:lvremove LVDEVICE
卸载的顺序:先逻辑然后卷组最后物理卷
卸载前别忘了备份
-----------------------------------------------------------------------------------------------------------------------------------
LV示意图:
一个物理卷,包含了许多物理分区:
+-----[ Physical Volume ]------+
| PE | PE | PE | PE | PE | PE |
+------------------------------+
一个卷组,包含了2个物理卷(PV)有6个物理分区:
+------[ Volume Group ]-----------------+
| +--[PV]--------+ +--[PV]---------+ |
| | PE | PE | PE | | PE | PE | PE | |
| +--------------+ +---------------+ |
+---------------------------------------+
我们现在做更进一步扩展:
+------[ Volume Group ]-----------------+
| +--[PV]--------+ +--[PV]---------+ |
| | PE | PE | PE | | PE | PE | PE | |
| +--+---+---+---+ +-+----+----+---+ |
| | | | +-----/ | | |
| | | | | | | |
| +-+---+---+-+ +----+----+--+ |
| | Logical | | Logical | |
| | Volume | | Volume | |
| | | | | |
| | /home | | /var | |
| +-----------+ +------------+ |
+---------------------------------------+
-----------------------------------------------------------------------------------------------------------------------------------
好了,我们来创建一个lv。
比如说,在一个物理硬盘/dev/hda上,我们需要将/dev/hda5,/dev/hda6作为pv
1 fdisk划分hda5,hda6,并且将这两个分区的标志(键入t改)改为(0x)8e
然后用partprobe通知OS磁盘分区的变化
2 pvcreate /dev/hda5 /dev/hda6(-s xxM可设定PE大小)
创建pv hda5,hda6
3 vgcreate rootvg /dev/hda5 /dev/hda6
将hda5,hda6加入逻辑卷组rootvg中
4 lvcreate -L 100M -n lv1 rootvg
从我们的rootvg中,创建一个100M的逻辑卷lv1
5 mkfs.ext3 /dev/rootvg/lv1
格式化我们的lv1,文件系统用ext3
6 mkdir /mnt/lvm;mount /dev/rootvg/lv1 /mnt/lvm
将lv1挂载到/mnt/lvm下
好了,这样一个创建lv的例子完成
4) 如何动态放大/缩小一个逻辑卷/逻辑卷组
我们如何放大lv?比如上面的lv1?流程:
1 lvextend -L+200M /dev/rootvg/lv1
将lv1增加200M
2 ext2online /dev/rootvg/lv1
让lv1容量更改立即生效
减小lv,网上很多文章介绍的是ReiserFS,这里我们是ext3文件系统,如果我们需要减少50M:
1 umount /mnt/lvm
这里,需要先卸载分区
2 mke2fs -n /dev/rootvg/lv1
计算lv1的block数
这里一定要加-n参数,这是计算lv1的block数,而不是格式化分区,注意。
并且注意,从MB->KB这些的计算,都是乘1024,不是1000,这是个细节问题
3 计算减少50M后的block数。从mke2fs -n /dev/rootvg/lv1,我们可以得出2个需要的信息:
Block size和blocks,这两个数的乘积就是分区大小A(单位字节),
我们把需要减小的容量50M换算成字节B,然后A-B的结果除以Block size,就是剩余的block数
4 resize2fs -f /dev/rootvg/lv1 剩余的block数
调整文件系统大小
5 lvreduce -L-50M /dev/rootvg/lv1
调整lv分区大小,减小50M
6 重新mount,df察看一下容量的减小
动态加大VG:
这里我们新增一个PV并加入VG
1 fdisk增加一个(0x)8e标志的分区/dev/hda7
2 vgextend rootvg /dev/hda7
好了,vg增大了
缩小逻辑卷组VG:
1 搬移PV中的资料(只限于同一VG中)
#pvmove [-n ] []
如
#pvmove /dev/hda5 /dev/hda6
将VG中pv hda5的内容搬移到hda6中
pvmove /dev/hda5(也可以这样,lvm决定hda2的内容被复制到哪里)
2 vgreduce rootvg /dev/hda5
把vg hda5移除
5) 如何删除逻辑卷/逻辑卷组
删除VG流程:
1 umount /挂接点
2 lvremove /dev/rootvg/lv1
移除逻辑卷,这里是lv1
3 vgchange -a n rootvg(关闭rootvg)
4 vgremove rootvg
移除rootvg
6) lvm相关命令
这个表格,你可以在RHCE_Study_Guide.pdf上找到
Physical Volume Volume Group Logical Volume
scan pvscan vgscan lvscan
create pvcreate vgcreate lvcreate
display pvdispaly vgdisplay lvdisplay
remove pvremove vgremove lvremove'
----------------------------------------------------------------------------------------------------------------------------------------------------------------
要创建一个LVM系统,一般需要经过以下步骤:
1、创建分区
使用分区工具(如:fdisk等)创建LVM分区,方法和创建其他一般分区的方式是一样的,区别仅仅是LVM的分区类型为8e。
2、创建物理卷
创建物理卷的命令为pvcreate,利用该命令将希望添加到卷组的所有分区或者磁盘创建为物理卷。将整个磁盘创建为物理卷的命令为:
#pvcreate /dev/hdb
将单个分区创建为物理卷的命令为:
#pvcreate /dev/hda5
3、创建卷组
创建卷组的命令为vgcreate,将使用pvcreate建立的物理卷创建为一个完整的卷组:
#vgcreate web_document/dev/hda5 /dev/hdb
vgcreate命令第一个参数是指定该卷组的逻辑名:web_document。后面参数是指定希望添加到该卷组的所有分区和磁盘。vgcreate 在创建卷组web_document以外,还设置使用大小为4MB的PE(默认为4MB),这表示卷组上创建的所有逻辑卷都以4MB为增量单位来进行扩充 或缩减。由于内核原因,PE大小决定了逻辑卷的最大大小,4MB的PE决定了单个逻辑卷最大容量为256GB,若希望使用大于256G的逻辑卷则创建卷组 时指定更大的PE。PE大小范围为8KB到512MB,并且必须总是2的倍数(使用-s指定,具体请参考manvgcreate)。
4、激活卷组
为了立即使用卷组而不是重新启动系统,可以使用vgchange来激活卷组:
#vgchange -ay web_document
5、添加新的物理卷到卷组中
当系统安装了新的磁盘并创建了新的物理卷,而要将其添加到已有卷组时,就需要使用vgextend命令:
#vgextend web_document /dev/hdc1
这里/dev/hdc1是新的物理卷。
6、从卷组中删除一个物理卷
要从一个卷组中删除一个物理卷,首先要确认要删除的物理卷没有被任何逻辑卷正在使用,就要使用pvdisplay命令察看一个该物理卷信息:
如果某个物理卷正在被逻辑卷所使用,就需要将该物理卷的数据备份到其他地方,然后再删除。删除物理卷的命令为vgreduce:
#vgreduce web_document /dev/hda1
7、创建逻辑卷
创建逻辑卷的命令为lvcreate:
#lvcreate -L1500 -n www1 web_document
该命令就在卷组web_document上创建名字为www1,大小为1500M的逻辑卷,并且设备入口为 /dev/web_document/www1(web_document为卷组名,www1为逻辑卷名)。如果希望创建一个使用全部卷组的逻辑卷,则需 要首先察看该卷组的PE数,然后在创建逻辑卷时指定:
#vgdisplay web_document | grep"TotalPE"
TotalPE45230
#lvcreate -l45230 web_document -n www1
8、创建文件系统
笔者推荐使用reiserfs文件系统,来替代ext2和ext3:
创建了文件系统以后,就可以加载并使用它:
#mkdir/data/wwwroot
#mount /dev/web_document/www1/data/wwwroot
如果希望系统启动时自动加载文件系统,则还需要在/etc/fstab中添加内容:
/dev/web_document/www1/data/wwwrootreiserfsdefaults12
9、删除一个逻辑卷
删除逻辑卷以前首先需要将其卸载,然后删除:
#umount /dev/web_document/www1
#lvremove /dev/web_document/www1
lvremove--doyoureallywanttoremove"/dev/web_document/www1"?[y/n]:y
lvremove--doingautomaticbackupofvolumegroup"web_document"
lvremove--logicalvolume"/dev/web_document/www1"successfullyremoved
10、扩展逻辑卷大小
LVM提供了方便调整逻辑卷大小的能力,扩展逻辑卷大小的命令是lvextend:
#lvextend -L12G /dev/web_document/www1
lvextend--extendinglogicalvolume"/dev/web_document/www1"to12GB
lvextend--doingautomaticbackupofvolumegroup"web_document"
lvextend--logicalvolume"/dev/web_document/www1"successfullyextended
上面的命令就实现将逻辑卷www1的大小扩招为12G。
#lvextend -L +1G /dev/web_document/www1
lvextend--extendinglogicalvolume"/dev/web_document/www1"to13GB
lvextend--doingautomaticbackupofvolumegroup"web_document"
lvextend--logicalvolume"/dev/web_document/www1"successfullyextended
上面的命令就实现将逻辑卷www1的大小增加1G。
增加了逻辑卷的容量以后,就需要修改文件系统大小以实现利用扩充的空间。笔者推荐使用reiserfs文件系统来替代ext2或者ext3。因此这里仅 仅讨论reiserfs的情况。Reiserfs文件工具提供了文件系统大小调整工具:resize_reiserfs。对于希望调整被加载的文件系统大 小:
#resize_reiserfs -f /dev/web_document/www1
一般建议最好将文件系统卸载,调整大小,然后再加载:
#umount /dev/web_document/www1
#resize_reiserfs /dev/web_document/www1
#mount-treiserfs /dev/web_document/www1/data/wwwroot
对于使用ext2或ext3文件系统的用户可以考虑使用工具
ext2resize。
11、减少逻辑卷大小
使用lvreduce即可实现对逻辑卷的容量,同样需要首先将文件系统卸载:
#umount /data/wwwroot
#resize_reiserfs -s -2G /dev/web_document/www1
#lvreduce -L -2G /dev/web_document/www1
#mount-treiserfs /dev/web_document/www1/data/wwwroot