flyonok

统计

留言簿(8)

ACE

book

boost

bsd

c study

c++

code download

codeblock

computer clound

Eclipse

embed system

erlang

ET++

gtk

ic card

java

KDE

libevent

linux

linux--MM

mysql

network education

one card

oracle

pcap relation

php

powerbuilder

python

QT

software config

software test

SQL server

UML

wireless

wxwidgets

陈宾

阅读排行榜

评论排行榜

lvm(逻辑卷管理器)的介绍和常用功能流程实验

vm(逻辑卷管理器)的介绍和常用功能流程实验

daweicheng

1) 前言
2) lvm组成和概念
3) 如何使用lvm,创建逻辑卷的流程和实例
4) 如何动态放大/缩小一个逻辑卷/逻辑卷组
5) 如何删除逻辑卷/逻辑卷组
6) lvm相关命令



1) 前言

一直想写一个简单的lvm方面的文章,可以作个背忘,主要以流程和实例为主,希望文章能起到抛砖引玉的

作用.

LVM=(Logical Volume Mamager)逻辑卷管理器,LVM最先是用在IBM AIX系统上,它的最大作用是可以动态分

配磁盘分区,并且可以让多个分区或者物理硬盘作为一个逻辑卷(相当于一个逻辑硬盘).这种机制可以让磁

盘分区容量划分变得很灵活.

我们先举个简单例子.比如我们有一个硬盘/dev/hda,分了3个主分区:hda1,hda2,hda3,后面磁盘空间没有

划分,分别对应的挂载点是/boot,/,/home,如果我们的/home空间不够了,怎么办?传统的方法是在未划分的

空间中分割一个分区,挂载到/home下,并且把hda3的内容复制到这个新分区上.或者把这个新分区挂载到另

外的挂载点上,然后在/home下创建链接,链接到这个新挂载点.

这两种方法都不大好,第一种方法浪费了hda3,并且如果后面的分区容量小于hda3怎么办?第二种方法不大

浪费容量,但是每次要额外创建链接,比较麻烦.那么,如果用lvm呢?lvm的好处在于,可以动态放大一个逻辑

卷(相当于一个逻辑分区),也就是说,hda3如果是一个逻辑分区,比如/dev/rootvg/lv3,那么lv3可以被动态

放大.这样就解决了动态容量调整的问题.当然,前提是系统已设定好lvm支持,并且需要动态缩放的挂载点

对应的设备是逻辑卷.

在这里,我所有例子都是基于RHEL 4/CentOS 4.x和LVM2的。

2) lvm组成和概念

这里参考了IBM 林彥明(Alex Lin)的>)

PV(Physical Volume) 物理卷。可以是单独磁盘,也可以是硬盘分区
VG(Volume Group) 卷组。是PV的组合,可以看成单独的逻辑磁盘
LV(Logical Volume) 逻辑分区。相当于物理分区的/dev/hdaX
PE(Physical Extent) 物理范围。VG单元,类似于RAID的条带大小。
当多个PV组成一个VG时,LVM会在所有PV上做类似格式化的动作,
将每个PV切成一块块的空间,这一块块的空间就称为PE, 通常是4MB。
LE(Logical Extent) 逻辑范围。LV的组成单位。大小为PE的倍数(通常为1:1)

那么,最常用的3个名词和意义列表如下:
名词 意义 操作系统对应设备
PV 物理卷 /dev/hdaX
VG 卷组 /dev/ (通常是个目录)
LV 逻辑卷 /dev//

如果我们要使用lvm,顺序是pv->vg->lv。
就是说,我们先创建一个物理卷(对应一个物理硬盘分区或者一个物理硬盘),然后把这些分区/硬盘加入

一个卷组中(相当于一个逻辑上的大硬盘),然后我们在这个大硬盘上划分分区lv(逻辑上的分区,就是逻

辑卷)
这样,我们把lv逻辑卷格式化以后,就可以像使用一个传统分区那样,把它挂载到一个挂载点上,需要的

时候,这个逻辑卷可以被动态缩放。

我们可以用一个长方蛋糕来说明这个对应关系。物理硬盘相当于一个长方蛋糕,我们把它切割成许多快,

每个小块相当于一个pv,然后我们把其中的某些pv重新放在一起,抹上奶油,那么这么些个pv的组合就是

一个新的蛋糕,也就是vg。最后,我们切割这个新蛋糕vg,切出来的小蛋糕就叫做lv。

有一点需要注意,就是/boot区不可以是lvm,因为引导程序lilo/grub并不能识别lvm,就像/boot同样不

可以是软raid设备一样。

3) 如何使用lvm,创建逻辑卷的流程和实例

好了,我们来创建一个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
文章来源:www.linuxeden.com-Linux伊甸园

本站文章仅代表作者观点,本站仅传递信息,并不表示赞同或反对.转载本站点内容时请注明来自www.linuxeden.com-Linux伊甸园。如不注明,www.linuxeden.com将根据《互联网著作权行政保护办法》追究其相应法律责任。

posted on 2008-03-06 21:46 flyonok 阅读(344) 评论(0)  编辑 收藏 引用 所属分类: linux


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理