Chinaunix首页 | 论坛 | 博客
  • 博客访问: 355710
  • 博文数量: 306
  • 博客积分: 3975
  • 博客等级: 中校
  • 技术积分: 3265
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-27 13:14
文章分类

全部博文(306)

文章存档

2017年(1)

2016年(3)

2015年(11)

2014年(15)

2013年(178)

2012年(41)

2011年(38)

2010年(9)

2009年(9)

2008年(1)

分类: LINUX

2009-09-17 23:16:39

LVM是Logical Volume Manager(逻辑卷管理器)的简称,它可以使管理员在Linux系统上更加灵活的规划和使用磁盘空间。

为什么使用LVM
对于传统的分区类型,其尺寸是固定的,不能够动态扩展。因此在使用之前,管理员需要提前规划分区的用途和需要的尺寸。一旦某个分区的尺寸不能满足需求了,管理员将不得不重新分区,或者将包含足够空间的新磁盘分区挂载到原有文件系统上。使用LVM处理这样的问题将获得更大的灵活性。
在LVM中,分区对应物理磁盘上一系列连续数据块的概念已经演变了。现在通过LVM可以将物理磁盘的空间分解为很多单元,然后将多个物理磁盘的存储单元汇聚为一个可供用户使用的逻辑单元。用户不再直接使用物理磁盘,而是一个经过逻辑划分的虚拟磁盘。逻辑单元的空间可以来自于多个物理磁盘,同时管理员也可以通过扩展逻辑单元动态增加可用的磁盘空间。
例如,有一个10GB的磁盘,创建“/home”分区使用了2GB。现在“home”没有足够的可用空间了,于是决定将“/home”扩展到3GB。用传统的分区方式,管理员将不得不创建一个3GB大小的分区,并备份“/home”的全部内容;将建立的新分区挂载到“/home”,然后将备份的“/home”数据恢复上去。
或者,也可以使用Partition Magic之类的分区工具,在不重新分区的情况下调整分区的尺寸。但是使用Partition Magic工具进行分区操作,需要重新引导机器,这往往是服务器管理员需要尽量避免的。而使用LVM配置,管理员无需重新引导机器,只要增加1GB(或更大)的磁盘,并将它的存储单元添加到“/home”中就可以了。
LVM的基本概念和术语
在LVM中最终面向用户的是经过逻辑划分的磁盘空间,它建立在具体的物理介质上,这个物理介质可以是一个磁盘或一个磁盘分区。
物理卷Physical Volume(PV)
一个物理卷只不过是一个有LVM管理数据添加在里面的物理存储介质。要使用LVM系统,首先对要用于LVM的磁盘进行初始化,初始化的目的就是将磁盘或分区标识为LVM 的物理卷。使用pvcreate 命令可以将一个磁盘标记为 LVM 物理卷。
物理分区Physical Extents(PE)
LVM将每个物理卷分为叫做物理分区的可寻址存储单元,存储单元的大小通常为几MB。磁盘的开头部分为LVM元数据,之后从索引为零开始,每个物理分区的索引依次递增一,按顺序进行分配。
卷组Volume Group(VG)
物理卷可以组织为卷组。卷组可以由一个或多个物理卷组成,同时系统中可以有多个卷组。创建了卷组之后,该卷组(而不是磁盘)便是表示数据存储的实体。因此,尽管以前是将磁盘从一个系统移动到另一个系统,使用了 LVM 之后,会将卷组从一个系统移动到另一个系统。出于这种原因,通常在一个系统上创建多个卷组会比较方便。
逻辑卷Logical Volume(LV)
卷组所代表的磁盘空间可以分配给不同大小的逻辑卷。创建逻辑卷之后,就可以将其视为传统的磁盘分区来处理。通过设备专用文件可访问逻辑卷。一个逻辑卷可以跨越一个卷组中的多个物理卷,也可以仅代表物理卷中的一个分区。就像使用传统的分区一样,在逻辑卷上可以创建一个文件系统。
逻辑分区Logical Extents(LE)
逻辑卷的基本分配单元称为逻辑分区。逻辑分区映射到物理分区,因此,如果物理分区的尺寸小为4MB,那么逻辑分区的尺寸也将为4MB。逻辑卷的大小取决于所分配的逻辑分区数量。
图非常清晰地描述了LVM的体系结构。
当LVM将磁盘空间分配给逻辑卷时,会自动创建逻辑盘区到物理盘区的映射。此映射取决于创建逻辑卷时所选择的策略。对于每个逻辑卷,逻辑盘区从零开始按顺序进行分配。LVM将使用此映射来访问数据,而不考虑数据的物理位置。
除了镜像逻辑卷、条带化逻辑卷或条带化的镜像逻辑卷外,每个逻辑分区均映射到一个物理分区。对于镜像逻辑卷,每个逻辑分区映射到多个物理分区。
图说明了卷组内物理分区和逻辑分区之间的几种映射类型。如图所示,第一个逻辑卷的内容包含在卷组中所有三个物理卷中。由于第二个逻辑卷使用了镜像,每个逻辑分区映射到多个物理分区。在这个例子中,包含镜像数据的物理分区有两个,分别位于卷组内的第二个物理卷和第三个物理卷上。
默认情况下,LVM按照LVM配置文件/etc/lvmtab中的出现的顺序,从物理卷中选择可用的物理分区,将这些物理分区分配给逻辑卷。管理员也可以忽略这种默认分配,直接决定逻辑卷将使用哪个物理卷上的物理分区。

配置和管理LVM
要建立LVM,首先需要为LVM准备磁盘或分区。使用磁盘分区作为物理卷的话,需要将分区标识为“Linux LVM”,其分区ID为“0x8e”。
假设现在有三个磁盘,分别为/dev/sda、/dev/sdb、/dev/sdc,磁盘/dev/sda和/dev/sdb已经进行了磁盘分区,磁盘/dev/sdc尚未进行分区操作。可以使用fdisk -l命令查看现有分区情况,如下所示:
# fdisk  -l

Disk /dev/sda: 255 heads, 63 sectors, 1044 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1             1        13    104391   83  Linux
/dev/sda2            14       804   6353707+  83  Linux
/dev/sda3           805       843    313267+  82  Linux swap
/dev/sda4           844      1044   1614532+  83  Linux

Disk /dev/sdb: 128 heads, 32 sectors, 512 cylinders
Units = cylinders of 4096 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sdb1             1       100    204784   83  Linux
/dev/sdb2           101       200    204800   83  Linux

Disk /dev/sdc: 128 heads, 32 sectors, 512 cylinders
Units = cylinders of 4096 * 512 bytes

Disk /dev/sdc doesn't contain a valid partition table
现在决定要使用磁盘分区/dev/sda4、/dev/sdb1、/dev/sdb2以及磁盘/dev/sdc建立卷组,需要先建立相应的物理卷。使用fdisk工具可以将分区指定为“Linux LVM”类型,具体操作如下:
# fdisk  /dev/sda

The number of cylinders for this disk is set to 1044.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): t
Partition number (1-4): 4
Hex code (type L to list codes): 8e
Changed system type of partition 4 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sda: 255 heads, 63 sectors, 1044 cylinders
Units = cylinders of 16065 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1             1        13    104391   83  Linux
/dev/sda2            14       804   6353707+  83  Linux
/dev/sda3           805       843    313267+  82  Linux swap
/dev/sda4           844      1044   1614532+  8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Re-read table failed with error 16: Device or resource busy.
Reboot your system to ensure the partition table is updated.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.
对分区/dev/sdb1、/dev/sdb2做同样的操作后,就可以建立物理卷了。建立物理卷的命令是pvcreate,该命令的基本用法为:
pvcreate  [-d]  [-f[f]]  [-h]  [-y]  [-v]  PhysicalVolumePath
各个选项的含义如下:
-d:启用附加的调试输出。
-f:强制选项,对于已经属于某个卷组的物理卷,可以使用-ff选项进行重建。
-h:获取该命令的帮助信息。
-y:对于所有提问都以“yes”应答。
-v:显示详细的执行过程。
PhysicalVolumePath表示物理卷的设备路径。
例如要在之前准备的设备上建立物理卷,可以执行以下操作:
# pvcreate  /dev/sda4  /dev/sdb1  /dev/sdb2  /dev/sdc

操作成功现实如下信息:
pvcreate -- physical volume "/dev/sda4" successfully created
pvcreate -- physical volume "/dev/sdb1" successfully created
pvcreate -- physical volume "/dev/sdb2" successfully created
pvcreate -- physical volume "/dev/sdc" successfully created
接下来需要将这些物理卷添加到一个卷组中,卷组名为vg01,具体操作如下:
# vgcreate  vg01  /dev/sda4  /dev/sdb1  /dev/sdb2  /dev/sdc

操作成功现实如下信息:
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "vg01"
vgcreate -- volume group "vg01" successfully created and activated
从上面的命令输出中可以看出,卷组vg01已经建立并且激活,物理分区的尺寸为4MB,单个逻辑卷的尺寸可以达到255.99GB。此外还可以通过vgdisplay命令查看卷组的信息,具体操作如下:
# vgdisplay  /dev/vg01
--- Volume group ---
VG Name    g01
VG Access    read/write
VG Status    available/resizable
VG #     0
MAX LV     256
Cur LV     0
Open LV     0
MAX LV Size    255.99 GB
Max PV     256
Cur PV     4
Act PV     4
VG Size     2.92 GB
PE Size     4 MB
Total PE     747
Alloc PE / Size   0 / 0
Free  PE / Size   747 / 2.92 GB
VG UUID    Cq9FGt-ls34-Jc34-yH9Y-txyj-420P-H97Zhp
从上需信息中可以看到,卷组vg01中包含4个物理卷成员,可以容纳的物理卷和逻辑卷数量为256,物理分区尺寸为4MB,卷组上尚未建立逻辑卷。若要看到更详细的信息,可以使用vgdisplay  -v  /dev/vg01命令。
由于没有建立逻辑卷,因此还不能够使用该卷组进行数据存储。使用lvcreate命令可以建立逻辑卷,该命令的基本用法为:
lvcreate  [-A] [-C] [-d] [-h] [-i[-I]] {-l | -L]} [-n] [-p] [-r] [-v] [-Z] VolumeGroupName
其中常用选项的含义如下:
-i:指定条带化逻辑卷的条带数,该数字为条带化逻辑卷占用的物理卷数目。
-I:指定条带化逻辑卷的条带尺寸,尺寸可以是2nKB(0<=n<=7)。
-l:指定逻辑卷尺寸,单位是逻辑分区数。
-L:指定逻辑卷尺寸,单位可以是k、m、g、t等。
-n:指定逻辑卷名称。
-p:设定逻辑卷的权限,可以是r(只读)或rw(读写)。
-s:创建镜像逻辑卷。
例如要在卷组vg01上建立一个尺寸为500MB的逻辑卷,可以执行以下操作:
# lvcreate  -L  500M  -n  lv1  vg01

操作成功现实如下信息:
lvcreate -- doing automatic backup of "vg01"
lvcreate -- logical volume "/dev/vg01/lv1" successfully created

这里要注意如果要建立条带化逻辑卷,则要以最小盘的大小为标准。                   例如/dev/sda4 10G  /dev/sdb1 50G /dev/sdb2 100G /dev/sdc 200G 则可以以如下方式建立条带化:lvcreate  -L 40G -n lv1 -i 4 vg01                         表示对于你所描述的4个pv所组成的vg01,可以划一个每个pv上10G,共40G的条带化lv1.


已建立好的逻辑卷,可以通过lvdisplay命令进行查看。在该命令中使用-v选项,还可以看到逻辑分区(LE)和物理分区(PE)的映射关系。具体如下:
# lvdisplay  -v  /dev/vg01/lv1
--- Logical volume ---
LV Name     /dev/vg01/lv1
VG Name    vg01
LV Write Access   read/write
LV Status     available
LV #      1
# open     0
LV Size     500 MB
Current LE    125
Allocated LE    125
Allocation    next free
Read ahead sectors   120
Block device    58:0
     
最后,在建立好的逻辑卷上创建文件系统,然后将文件系统挂载到现有的Linux文件系统中,就可以使用逻辑卷存储数据了。例如要在逻辑卷lv1上建立ext3文件系统,可以执行以下操作:
# mkfs.ext3  /dev/vg01/lv1

逻辑卷建立之后,其尺寸可以动态增加或减少。只要逻辑卷所在的卷组有足够的剩余磁盘空间,就可以使用lvextend命令扩展逻辑卷,操作实例如下所示:
# lvextend  -L  +200M  /dev/vg01/lv1

操作成功现实如下信息:
lvextend -- extending logical volume "/dev/vg01/lv1" to 700 MB
lvextend -- doing automatic backup of volume group "vg01"
lvextend -- logical volume "/dev/vg01/lv1" successfully extended
也可以使用lvreduce命令缩减逻辑卷的尺寸,操作实例如下所示:
# lvreduce  -L  -200M  /dev/vg01/lv1

操作成功现实如下信息:
lvreduce -- WARNING: reducing active logical volume to 500 MB
lvreduce -- THIS MAY DESTROY YOUR DATA (filesystem etc.)
lvreduce -- do you really want to reduce "/dev/vg01/lv1"? [y/n]: y
lvreduce -- doing automatic backup of volume group "vg01"
lvreduce -- logical volume "/dev/vg01/lv1" successfully reduced
注意:缩减一个活动的逻辑卷可能会破坏卷上的数据,执行时应提前检查数据存储情况。
如果卷组上已经没有足够的空间可供逻辑卷扩展,就需要扩展卷组以提供更多的磁盘空间。为了扩展卷组,需要先增加可用的物理卷,然后将卷组扩展到新的物理卷上。例如增加一个磁盘/dev/sdd,为了扩展卷组到/dev/sdd,需要执行以下操作:
1) 在新磁盘上建立物理卷:
# pvcreate  /dev/sdd

操作成功现实如下信息:
pvcreate -- physical volume "/dev/sdd" successfully created
2) 将卷组vg01扩展到新的物理卷上:
# vgextend vg01 /dev/sdd

操作成功现实如下信息:
vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte
vgextend -- doing automatic backup of volume group "vg01"
vgextend -- volume group "vg01" successfully extended

 

阅读(2419) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~