您的位置:首页 > 其它

LVM逻辑卷管理

2013-12-11 11:08 183 查看
要使用磁盘存储数据,必须要先分区、建立文件系统,之后才可以挂载并使用文件系统存储数据。但是一些系统中凸显了这种方式的弊端:随着应用的不断扩展,存储的数据越来越多(例如数据库、文件服务器等),分区大小不能在线扩充就成了一个棘手的问题。为了解决问题,管理员们不得不关闭正在提供的业务,然后在线下执行扩展和数据转移工作。由于数据量巨大,线下扩展通常花费的时间很长,这对与关键性业务而言可能是致命的。

可以使用LVM来解决这一难题。LVM(LogicalVolumeManager),逻辑卷管理。LVM可以将多个不同容量的分区合并在一起,然后重新分配使用空间。不仅如此,LVM还支持在线添加磁盘、删除磁盘、在线扩充文件系统等功能。

一、LVM的基本概念

1、基本术语

物理卷(PV,PhysicalVolume):构成LVM的基本存储设备。在实际应用中,物理卷可以是磁盘分区、RAID设备等。

卷组(VG,VolumeGroup):卷组就像一个可以扩充的磁盘(可以简单地理解为卷组是未分区的磁盘),由一个或多个物理卷组成。

逻辑卷(LV,LogicalVolume):逻辑卷就像是卷组中的一个分区,可以创建文件系统,挂载并存储数据。

将多个物理卷组成卷组后,就可以在卷组的基础上创建逻辑卷、文件系统并存储数据。由于逻辑卷在卷组的基础上创建,而卷组又由多个物理卷组成,因此一个逻辑卷可能位于不同的物理卷之上。

在磁盘中,系统会通过查找扇区的方式寻址并存取数据。由于逻辑卷可能会位于不同的磁盘上,因此不能使用扇区寻址。为解决逻辑卷寻址的问题,LVM引入了两个新的概念:物理块和逻辑块。

物理块(PE,PhysicalExtent),加入卷组的物理卷被划分为许多大小相等的物理块,物理块的大小通常为4MB。物理块的功能类似于磁盘上的扇区,每个物理块都具有唯一的地址,LVM通过物理块在磁盘中寻址。与磁盘中的扇区类似,物理块也是LVM中最小的可寻址存储单元。

逻辑快(LE,LogicalExtent),与物理卷一样,逻辑卷也被划分为许多大小相等的逻辑块,其大小和物理块大小相同。逻辑块是逻辑卷上可寻址的最小存储单元。

逻辑块和物理块之间的关系是一一对应的,即一个逻辑块对应一个物理块。在物理卷的起始处,有一个类似于分区表的区域,称为VGDA(卷组描述符区域)。LE和PE之间的对应关系就保存在VGDA的一个表中,除此之外VGDA还保存有卷组描述符等内容。

提示:读者可以简单地理解为:物理块是物理卷中的“扇区”,逻辑块是逻辑卷中的“扇区”。

2、LVM工作原理

存储数据时,LVM会为数据分配逻辑块,将数据存储到分配的逻辑块上。此时卷组会分配与逻辑块相对应的物理块,并将数据交给磁盘,磁盘会将数据存储到对应的物理块中。

在这个数据存储的例子中,卷组就像是逻辑卷与物理卷的“中间人”,它负责地址转换工作。读取、写入数据时,卷组会将逻辑卷分配的逻辑块地址转换为物理块地址。

二、创建物理卷

创建LVM的顺序依次是:物理卷、卷组、逻辑卷。

物理卷的实质是一个存储设备,通常可以使用的存储设备有磁盘分区、RAID设备等。创建物理卷的过程,就是向物理卷写入LVM信息的过程。

(1)创建并修改分区类型

创建物理卷PV之前,需要先对磁盘进行分区并修改分区类型,这个过程与创建组成RAID设备的分区类似:

[root@localhost~]#fdisk/dev/sda

Thenumberofcylindersforthisdiskissetto1958.
Thereisnothingwrongwiththat,butthisislargerthan1024,
andcouldincertainsetupscauseproblemswith:
1)softwarethatrunsatboottime(e.g.,oldversionsofLILO)
2)bootingandpartitioningsoftwarefromotherOSs
(e.g.,DOSFDISK,OS/2FDISK)

Command(mforhelp):n
Commandaction
eextended
pprimarypartition(1-4)
p
Partitionnumber(1-4):1
Firstcylinder(1-1958,default1):
Usingdefaultvalue1
Lastcylinderor+sizeor+sizeMor+sizeK(1-1958,default1958):
Usingdefaultvalue1958

#此处使用的分区类型是8e
Command(mforhelp):t
Selectedpartition1
Hexcode(typeLtolistcodes):8e
Changedsystemtypeofpartition1to8e(LinuxLVM)

Command(mforhelp):p

Disk/dev/sda:16.1GB,16106127360bytes
255heads,63sectors/track,1958cylinders
Units=cylindersof16065*512=8225280bytes

DeviceBootStartEndBlocksIdSystem
/dev/sda11195815727603+8eLinuxLVM

Command(mforhelp):w

创建分区的过程与前几节介绍的过程一样,不同的是需要将分区的类型设置为LinuxLVM,以便管理员查看和管理。

本例中还需要依次创建分区sdc2和sdd5.

(2)初始化物理卷

分区创建好之后,就可以使用pvcreate命令初始化物理卷。pvcreate命令没有任何选项,直接将要初始化的分区作为其参数即可。

[root@localhost~]#pvcreate/dev/sdb1/dev/sdc2/dev/sdd5
Phsicalvolume“/dev/sdb1”successfullycreated
Phsicalvolume“/dev/sdc2”successfullycreated
Phsicalvolume“/dev/sdd5”successfullycreated

三、创建卷组

所有的物理卷都初始化完成后,就可以创建卷组了。创建卷组的命令是vgcreate。

【命令格式】

vgcreatevg_namepv

vg_name是要创建的卷组名称,pv是组成卷组的物理卷列表。如果列表中有多个物理卷,需要使用空格作为分隔符。

【用法示例】

(1)使用上面创建的物理卷/dev/sdb1、/dev/sdc2和/dev/sdd5,创建一个名为LVM01_Volume的卷组。

[root@localhost~]#vgcreateLVM01_Volume/dev/sdb1/dev/sdc2/dev/sdd5

(2)常见完成后,可以使用vgdisplay查看新建立的卷组:

[root@localhost~]#vgdisplay-vLVM01_Volume

提示:如果需要查看更为详细的卷组信息,可以使用vgdisplay-vv或vgdisplay-vvv命令。

四、创建逻辑卷

创建卷组之后,就可以使用lvcreate命令在其基础上创建逻辑卷了。在创建逻辑卷之前,还需要规划逻辑卷的大小(按实际需要划分)、逻辑卷的模式等。

1、逻辑卷模式

按写入的方式不同,逻辑卷有如下两种模式:

线性模式:先写满组成线性逻辑卷的第一个物理卷,再向第2个物理卷中写入数据,以此类推。

交错模式:写入数据时交错地将数据写入组成逻辑卷的多个物理卷中(写入方式类似于RAID0)。

交错模式的理论写入速度比线性模式快。

2、创建逻辑卷

选择逻辑卷模式时,如果逻辑卷需要处理大量读写操作,通常建议使用交错模式,否则应该使用线性模式。

(1)创建一个名为file,大小为100GB的线性逻辑卷:

#选项L用于指定逻辑卷的大小
#选项n用于指定逻辑卷的名称
[root@localhost~]#lvcreate-L100G-nfileLVM01_Volume

(2)如果要创建交错逻辑卷,可以使用如下命令:

#选项i表示交错值为2
#选项I(大写字母i)表示指定逻辑卷的块大小,本例中为4MB
#选项l(小写字母L)表示块数量,本例中表示块数量为100个
[root@localhost~]#lvcreate-i2-I4-l100-ntestLVM01_Volume

3、查看逻辑卷

(1)新建的逻辑卷已经放在目录/dev中,可以使用ls命令查看逻辑卷的块设备文件:

[root@localhost~]#ls-l/dev/LVM01_Volume/file

逻辑卷文件以/dev/VGname/LVname的格式命名。

(2)如果要查看指定的逻辑卷的详细信息,可以使用命令lvdisplay:

[root@localhost~]#lvdispaly-v/dev/LVM01_Volume/file

提示:与查看卷组命令一样,查看更详细的逻辑卷信息,也可以使用lvdisplay-vv,lvdisplay-vvv命令。

4、使用逻辑卷

逻辑卷创建完成之后,其使用方法与分区相同,先创建文件系统,然后挂载并存储数据。

(1)为逻辑卷file创建ext3文件系统,并挂载到目录/mnt/file:

[root@localhost~]#mkfs.ext3/dev/LVM01_Volume/file
[root@localhost~]#mkdir/mnt/file
[root@localhost~]#mount/dev/LVM01_Volume/file/mnt/file/

(2)为了能在系统启动时自动挂载逻辑卷,可以在配置文件/etc/fstab的最后加入以下内容:

/dev/LVM01_Volume/file/mnt/fileext3defaults02

完成上述步骤之后,就可以使用逻辑卷存储数据了。

五、添加物理卷

随着逻辑卷中存储数据越来越多,其可用空间可能会不足,由于LVM支持在线扩展,可以使用这一功能在线扩充空间。扩展之前可以使用vgdisplay查看卷组中是否还有未分配的空间,如果空间不足,就需要为卷组添加物理卷。

添加物理卷时,应该先对物理卷进行初始化,之后再利用vgextend命令为卷组添加物理卷。

(1)例如为LVM01_Volume卷组添加新物理卷/dev/sde3:

[root@localhost~]#pvcreate/dev/sde3
Physicalvolume"/dev/sde3"successfullycreated
[root@localhost~]#vgextendLVM01_Volume/dev/sde3
Volumegroup"LVM01_Volume"successfullyextended

(2)除命令输出之外,还可以使用vgdisplay,查看物理卷是否添加成功。

六、扩充逻辑卷

如果卷组还有为分配的空间,就可以使用lvextend命令扩充逻辑卷了。扩充逻辑卷时,不必卸载已挂载的文件系统,也无需停止对逻辑卷的读写操作。

(1)要将当前的逻辑卷/dev/LVM01_Volume/file扩展到120GB可以使用如下命令:

[root@localhost~]#lvextend-L120G/dev/LVM01_Volume/file

注意上面的示例命令的作用是将逻辑卷扩展到120GB,而不是为其增加120GB。

(2)如果需要指定增加空间的大小,可以使用以下命令:

[root@localhost~]#lvextend-L+10G/dev/LVM01_Volume/file

(3)虽然逻辑卷已经扩充到了130GB,但使用df-h命令(用于查看已挂载的文件系统的使用情况)显示的结果却没有变化。原因在于,虽然逻辑卷的容量已经改变,但逻辑卷上的文件系统却没有发生变化,因此还需要在线扩充文件系统。在线扩充文件系统的命令为resize2fs。

注意:命令resize2fs只能用于调整ext2、ext3文件系统,如果逻辑卷使用的是其他文件系统,就需要参阅相关文档了解具体的命令。

例如,将逻辑卷file的文件系统在线扩充至130GB:

[root@localhost~]#resize2fs/dev/LVM01_Volume/file130G

接下来执行df-h命令就可以看到正确的容量了。

七、减少逻辑卷

有时不合理地分配了逻辑卷的容量,导致其他逻辑卷空间不足,也可能是调整空间以便于移除某个物理卷。这时就需要减少某个逻辑卷的空间。减少逻辑卷的空间可以使用命令lvreduce。

相对于逻辑卷的扩充过程而言,减小逻辑卷容量的过程比较麻烦,这时因为减少容量的过程中,需要移动某些数据,并修改文件信息。

(1)由于要修改文件信息,因此整个操作过程不能在线进行。首先需要卸载文件系统,并强制检查文件系统是否存在错误:

[root@localhost~]#umount/mnt/file/

[root@localhost~]#fsck-f/dev/LVM01_Volume/file

由于fsck命令会扫描所有数据块,因此当文件系统较大时,可能需要花费大量的时间。

(2)与扩充逻辑卷的过程相反,减小逻辑卷时,应该首先减小文件系统,减小文件系统仍然使用命令resize2fs。

例如将逻辑卷file的文件系统减少至50GB:

[root@localhost~]#resize2fs/dev/LVM01_Volume/file50GB

由于resize2fs命令会合并未使用的空间并移动数据,因此上面这个示例命令可能需要花费许多时间。

提示:减小文件系统之前,应该保证逻辑卷中存放的数据减小后的空间,否则可能会损坏逻辑卷中的数据。

(3)文件系统减小后,就可以使用lvreduce命令减小逻辑卷的容量了:

#使用lvreduce命令将逻辑卷减小至50GB
#选项L用于指定减小后的逻辑卷的大小
[root@localhost~]#lvreduce-L50G/dev/LVM01_Volume/file

八、移动数据并移除物理卷

有时需要将物理卷从卷组中删除,以便于添加更大容量的磁盘,以扩充逻辑卷的存储空间。此时可以使用pvremove命令。

移除物理卷时,一定要确保卷组中未分配的连续可用物理块,大于移除的物理卷中分配的物理块。只有这样,才能将物理卷中的数据移动到其他物理卷中。

(1)在本例中,演示如何从卷组中移除物理卷/dev/sdd5。首先需要使用pvdisplay查看物理卷的分配情况:

[root@localhost~]#pvdisplay–m
---Physicalvoluem---
PVName/dev/sdd5
VGNameLVM01_Volume
PVSize80.00GB/notusable1.32MB
Allocatableyes
PESize(KByte)4096
#注意sdd5中已分配的PE数目
TotalPE20479
FreePE10238
AllocatedPE10241
PVUUID*
#注意使用物理卷的逻辑卷为/dev/LVM01_Volume/file
---PhysicalSegments---
Phsicalextents0to10240:
Logicalvolume/dev/LVM01_Volume/file
Logicalextents20479to30719
Phsicalextent10241to20478:
FREE

尤其注意物理卷/dev/sdd5的分配情况,关注其被占用的物理块共有多少块,查看哪些物理卷的大小可以放的下这些物理块,就可以将这些物理卷确定为数据移动的目标物理卷。

(2)确认数据移动的目标物理卷后,就可以使用pvmove命令移动PE了。例如将/dev/sdd5上的数据移动到/dev/sde3中:

[root@localhost~]#pvmove/dev/sdd5/dev/sde3

移动数据时,命令会显示当前移动数据的进度。由于物理卷中可能会有很多数据。因此这个过程通常会很慢,建议在逻辑卷读写压力较小时进行。

移动物理卷数据的过程中,一定要确保没有新的逻辑卷被分配,否则可能又会占用要移除的物理卷。

如果卷组中的剩余PE足够,也可以使用以下命令移动数据:

#使用pvmove命令自动移动物理卷/dev/sdd5中的数据
#选项i表示移动指定百分比的数据,就向用户报告
[root@localhost~]#pvmove-i10/dev/sdd5

此命令将由系统自己决定将数据移动到哪个物理卷上。

(3)确认没有逻辑卷占用物理卷后,可以使用命令vgreduce将其移出卷组。例如移除物理卷/dev/sdd5:

[root@localhost~]#vgreduceLVM01_Volume/dev/sdd5

注意:移除物理卷操作非常危险,应该确认所有的数据均已移动到其他物理卷上,否则会造成数据丢失。

九、逻辑卷快照

对数据库文件进行备份时,由于数据库处于工作状态,因此不停地写入、删除数据库中的信息,会造成备份后的数据前后不一致。这时可以使用快照(snapshot)。

创建逻辑卷快照与创建逻辑卷一样,都使用lvcreate命令。

(1)创建快照卷之前,需要确认原始卷的大小,因为创建的快照卷通常都应该比原始卷大(1.1倍至1.2倍之间即可)。

例如要为/dev/LVM01_Volume/databases创建快照卷:

#使用lvcreate命令创建名为db_snapshot的快照卷
#选项L用于指定快照卷的大小
#选项s表示要创建的是快照卷
#选项n用于指定快照卷的名称
[root@localhost~]#lvcreate-L40G-s-ndb_snapshot/dev/LVM01_Volume/databases

快照卷创建完成后,就可以挂载并备份其中的数据文件了。

(2)完成备份之后,可以使用以下命令卸载并删除快照卷:

[root@localhost~]#umount/dev/LVM01_Volume/db_sanpshot

[root@localhost~]#lvremove/dev/LVM01_Volume/db_sanpshot

快照卷具有非常广泛的用途,例如快速还原虚拟机。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: