博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LVM逻辑卷管理
阅读量:4709 次
发布时间:2019-06-10

本文共 8199 字,大约阅读时间需要 27 分钟。

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

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

一、LVM的基本概念

1、基本术语

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

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

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

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

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

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

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

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

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

2、LVM工作原理

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

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

二、创建物理卷

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

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

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

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

[root@localhost ~]# fdisk /dev/sdaThe number of cylinders for this disk is set to 1958.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): nCommand action   e   extended   p   primary partition (1-4)pPartition number (1-4): 1First cylinder (1-1958, default 1): Using default value 1Last cylinder or +size or +sizeM or +sizeK (1-1958, default 1958): Using default value 1958#此处使用的分区类型是8eCommand (m for help): tSelected partition 1Hex code (type L to list codes): 8eChanged system type of partition 1 to 8e (Linux LVM)Command (m for help): pDisk /dev/sda: 16.1 GB, 16106127360 bytes255 heads, 63 sectors/track, 1958 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes   Device Boot      Start         End      Blocks   Id  System/dev/sda1               1        1958    15727603+  8e  Linux LVMCommand (m for help): w

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

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

(2)初始化物理卷

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

[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc2 /dev/sdd5
Phsical volume “/dev/sdb1” successfully created
Phsical volume “/dev/sdc2” successfully created
Phsical volume “/dev/sdd5” successfully created

三、创建卷组

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

【命令格式】

vgcreate vg_name pv

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

【用法示例】

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

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

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

[root@localhost ~]# vgdisplay -v LVM01_Volume

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

四、创建逻辑卷

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

1、逻辑卷模式

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

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

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

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

2、创建逻辑卷

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

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

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

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

#选项i表示交错值为2#选项I(大写字母i)表示指定逻辑卷的块大小,本例中为4MB#选项l(小写字母L)表示块数量,本例中表示块数量为100个[root@localhost ~]# lvcreate -i 2 -I 4 -l 100 -n test LVM01_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/file    ext3    defaults    0 2

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

五、添加物理卷

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

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

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

[root@localhost ~]# pvcreate /dev/sde3  Physical volume "/dev/sde3" successfully created[root@localhost ~]# vgextend LVM01_Volume /dev/sde3  Volume group "LVM01_Volume" successfully extended

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

六、扩充逻辑卷

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

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

[root@localhost ~]# lvextend -L 120G /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/file 130G

接下来执行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/file 50GB

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

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

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

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

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

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

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

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

[root@localhost ~]# pvdisplay –m
--- Physical voluem ---
PV Name                 /dev/sdd5
VG Name                 LVM01_Volume
PV Size                 80.00 GB / not usable 1.32MB
Allocatable             yes
PE Size (KByte)         4096
#注意sdd5中已分配的PE数目
Total PE                20479
Free  PE                10238
Allocated PE            10241
PV UUID                 *
 
#注意使用物理卷的逻辑卷为/dev/LVM01_Volume/file
--- Physical Segments ---
Phsical extents 0 to 10240:
Logical volume        /dev/LVM01_Volume/file
Logical extents       20479 to 30719
Phsical extent 10241  to 20478:
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 -i 10 /dev/sdd5

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

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

[root@localhost ~]# vgreduce LVM01_Volume /dev/sdd5

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

九、逻辑卷快照

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

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

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

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

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

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

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

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

快照卷具有非常广泛的用途,例如快速还原虚拟机。

转载于:https://www.cnblogs.com/nufangrensheng/p/3468911.html

你可能感兴趣的文章
基于dubbo的分布式系统(一)安装docker
查看>>
Recursion
查看>>
66. Plus One
查看>>
COMP30023 Computer Systems 2019
查看>>
CSS选择器分类
查看>>
Kali学习笔记39:SQL手工注入(1)
查看>>
C# MD5加密
查看>>
Codeforces Round #329 (Div. 2)D LCA+并查集路径压缩
查看>>
移动应用开发测试工具Bugtags集成和使用教程
查看>>
Java GC、新生代、老年代
查看>>
Liferay 6.2 改造系列之十一:默认关闭CDN动态资源
查看>>
多线程
查看>>
折线切割平面
查看>>
获取当前路径下的所有文件路径 :listFiles
查看>>
图像形态学及更通用的形态学的原理及细节汇总
查看>>
linux开启coredump的3种方法
查看>>
数据驱动之 python + requests + Excel
查看>>
小鸡啄米问题求解
查看>>
Castle.net
查看>>
HDU1532 网络流最大流【EK算法】(模板题)
查看>>