LVM管理

一、LVM基本概念 LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM是依附于DM的功能的,DM(Device Mapper

 一、LVM基本概念

LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM是依附于DM的功能的,DM(Device Mapper 即设备映射)是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略,当前比较流行的 Linux 下的逻辑卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等都是基于该机制实现的。Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在分区划分好之后改变其大小就会很麻烦,有可能调整分区的大小会丢失数据,当一个分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。

LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。通过LVM可将若干个磁盘分区连接为一个整块的卷组(Volume Group),形成一个存储池。可以在卷组上随意创建逻辑卷(Logical Volumes),并进一步在逻辑卷上创建文件系统,与直接使用物理存储在管理上相比,提供了更好灵活性。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。LVM本质上是一个虚拟设备驱动,处于物理设备和文件系统层之间,维护着逻辑盘区和物理盘区之间的映射。LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的。


二、LVM相关术语

1、物理卷-----PV(Physical Volume)
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,整个物理硬盘,者回环文件(loopback file),设备映射器设备(例如dm-crypt)。
注意:
不建议对整个磁盘做PV初始化工作。因为通过某些分区工具(parted)查看可用磁盘时可能不能识别LVM元数据,导致我们认为磁盘是空闲的,重新设置分区覆盖原有数据
如果是分区需要调整分区的类型为LVM(fdisk分区类型8e,gdisk下为8e00,Parted下分区标记为lvm),不调整也可以,但是为了方便识别分区时最好更改下分区的类型。方便后期要对分区操作时候,容易识别出分区的类型。本人理解分区类型就是分区软件下用来描述分区所要承载的文件系统的类型。

2、卷组-----VG(Volumne Group)
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理过程中可以只创建一个卷组,也可以创建多个卷组。

3、逻辑卷-----LV(Logical Volume)
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷要以属于同一个卷组,也可以属于不同的多个卷组,为了方便使用者利用 LVM 来管理其系统,因此 LV 的设备名通常指定为/dev/vgname/lvname 的样式!

4、物理区域-----PE(Physical Extent)
物理区域是物理卷中可用于分配的最小存储单元,创建卷组的过程实际就是将物理卷所对应的设备空间分割成一个个具有唯一编号物理区域,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。

5、逻辑区域-----LE(Logical Extent)
逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小,在同一个卷组中,LE和PE可以是一一对应的,也可以是一个LE对应多个PE,对应多个PE的时候又分为几种情况,一种是多个PE组成一个大的LE像RAID0一样,另一种是一个LE对应几份PE这几份PE互为镜像类似于RAID1,就是因为这个原因我们的LVM才可以创建支持RAID功能的LV。

6、卷组描述区域-----(Volume Group Descriptor Area)
卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中的逻辑卷及逻辑卷中物理区域的分配等所有信息,卷组描述区域是在使用pvcreate建立物理卷时建立的。

 

 

三、工作原理

1、物理磁盘被格式化为PV,空间被划分为一个个的PE。
2、不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内。
3、LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘。
4、LV现在就直接可以格式化后挂载使用了。
5、LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数

四、LVM写入方式:

1、线性模式(linear)---将多个分区的空间拼接起来使用,如一个lv跨度了/dev/sda1和/dev/sda2两个分区,当存储数据的时候先写入到/dev/sda1,当其写满的时再使用/dev/sda2,这种方式下如果某个分区坏掉,则数据并不会完全损坏。

2、交错模式(triped)---将数据交错存储,如一个lv跨度了/dev/sda1和/dev/sda2,保存一个包含四个数据块大小的文件,第一个数据块保存在/dev/sda1,第二个数据块保存在/dev/sda2,第三个保存在/dev/sda1,依次类推。这种方式下若lv跨度了两个磁盘/dev/sda1和/dev/sdb1,此时性能会有提升,但要是追求这种性能最好使用硬件raid来实现。而且这种模式下若某个分区坏掉,数据会损坏。所以lvm默认存储模式是线性模式(linear)

3、注意事项:LVM最主要的用途是在实现一个可以弹性调整容量的文件系统上,而不是在新建一个以性能为主的磁盘上,所以我们应该利用的是LVM可以弹性管理整个分区大小的用途上,而不是着眼在性能上。因此,LVM默认的读写模式是线性模式。如果你使用triped模式,要注意,当任何一个分区出现故障,所有的数据都会损坏。所以不是很适合使用这种模式。

五、Snapshots(快照)

这是LVM提供的一个非常棒的功能就是快照了,他允许管理员创建一个新的块设备来呈现一个逻辑卷的的精确副本,在某个时间冻结,管理员可以及时备份指定一致状态下的数据,备份完毕就可以删除设备了。
快照最初包含有关快照的一些元数据,但没有来自源逻辑卷的实际数据。快照使用写时复制(copy on write)技术来检测数据在原始数据块中何时更改。它将拍摄快照时保存的值复制到快照卷中的块中,然后允许将新数据存储在源块中。
随着更多块从源逻辑卷上的原始值发生更改,快照大小也会增加。如果快照卷变满,它将被丢弃,所以分配足够的空间是非常重要的,具体取决于你数据的变换情况,如果快照大小和原始数据一样大,它将永远不会溢出的。

六、优缺点

1、优点
比起普通的硬盘分区管理方式,LVM更富于灵活性:

将多块硬盘看作一块大硬盘
使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。
可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。
在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。
可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。不过LVM上的文件系统也需要重新调整大小,好在某些文件系统(例如ext4)也支持在线操作。
无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。
允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。
支持各种设备映射目标(device-mapper targets),包括透明文件系统加密和缓存常用数据(caching of frequently used data)。这将允许你创建一个包含一个或多个磁盘、并用LUKS加密的系统,使用LVM on top 可轻松地管理和调这些整独立的加密卷 (例如. /, /home, /backup等) 并免去开机时多次输入密钥的麻烦。
2、缺点
在系统设置时需要更复杂的额外步骤。
Windows系统并不支持LVM,若使用双系统,你将无法在Windows上访问LVM分区。

七、安装LVM

1、查看是否安装lvm2软件
-----------------------------------------------
OpenSUSE-VBox:~ # rpm -qa | grep lvm2 #openSUSE15 已经默认安装
lvm2-2.02.177-lp150.5.1.x86_64
-----------------------------------------------
[root@CentOS7 ~]# rpm -qa | grep lvm2 #CentOS7-1810 已经默认安装
lvm2-2.02.177-4.el7.x86_64
-----------------------------------------------
root@debian:~# dpkg -l | grep lvm2 #Debian9.5 默认没有安装

2、Debian9.5安装lvm2
-----------------------------------------------
root@debian:~# apt install lvm2
-----------------------------------------------

八、常用命令简介
-----------------------------------------------
root@debian:~# pv # 使用tab按键获取pv相关命令
pvchange   pvck   pvcreate    pvdisplay   pvmove   pvremove   pvresize   pvs    pvscan
root@debian:~# vg # 使用tab按键获取vg相关的命令
vgcfgbackup   vgck    vgdisplay   vgimport    vgmknodes    vgrename    vgsplit
vgcfgrestore    vgconvert   vgexport    vgimportclone   vgreduce    vgs
vgchange  vgcreate    vgextend    vgmerge   vgremove   vgscan
root@debian:~# lv 使用tab按键获取lv先关的命令
lvchange   lvdisplay   lvmchange   lvmdiskscan   lvmpolld   lvreduce    lvresize
lvconvert    lvextend    lvmconf   lvmdump   lvmsadc   lvremove   lvs
lvcreate   lvm   lvmconfig   lvmetad    lvmsar   lvrename   lvscan
root@debian:~#
-----------------------------------------------
上面的命令比较多,简单介绍几个常用的命令。

pv打头的:  代表pv相关的命令
vg带头的:  代表vg相关的命令
lv带头的:   代表lv相关的命令

1、 物理卷命令
常用维护命令:
#pvs--------pvs命令用于输出格式化的物理卷信息报表。使用pvs命令仅能得到物理卷的概要信息,如果要得到更加详细的信息可以使用pvdisplay命令。

#pvdisplay  [选项] [参数]--------用于显示物理卷的属性,显示的信息包括:物理卷的名称、所属的卷组、物理卷的大小、PE大小、可用PE数、以分配的PE数、PV的UUID

选项:
-s,以短格式输出,和pvs输出的信息差不多
-m,显示PE到LE的映射

参数:可以指定某个特定的物理卷,或不指定,如果不指定就会显示所有物理卷信息

#pvscan  [选项] --------扫描系统中所有硬盘,列出找到的物理卷列表

-d,调试模式
-e,仅显示属于输出卷组的物理卷
-n,仅显示不属于任何卷组的物理卷
-s,短格式输出
-u,显示UUID


#pvcreate [选项] [参数]-------- 用于将磁盘或磁盘分区初始化为物理卷,以便对该物理卷进行逻辑卷管理。

选项
-f,强制创建物理卷,不需要用户确认
-u,指定设备的UUID
-y,所有问题都回答yes
-Z,是否利用前4个扇区

参数:通常为整个硬盘(硬盘下不能有分区)或分区的完整路径名

#pvremove [选项] [参数]-------- 删除一个存在的物理卷。删除物理卷时,它将LVM分区上的物理卷信息删除,使其不再被视为一个物理卷

选项:
-d,调试模式
-f,强制删除
-y,对提问回答yes

参数:指定要删除的物理卷对应的设备文件全路径

#pvmove [选项] [参数] --------用于把某物理卷中的PE转移到同卷组中其他的物理卷中。

选项:
-v,输出更多的命令执行细节
-i,后跟的秒数为间隔来显示命令的执行进度更新

参数:要转移的物理卷的全路径,如果不指定目的物理卷那么将会把源物理卷的PE转移到同VG的其他物理卷,这个命令在删除PV的时候很有用。

#pvchange --------更改物理卷的属性。

#pvresize --------调整LVM2使用的磁盘或分区的大小


2、 卷组命令
常用命令
#vgs -------- vgs命令用于输出创建的卷组信息报表。使用gs命令仅能得到卷组的概要信息,如果要得到更加详细的信息可以使用vgdisplay命令

#vgscan --------扫描所有磁盘的卷组并重建缓存

#vgdisplay [选项] [参数] -------- 显示卷组的详细信息,如过不指定具体的卷组,则显示系统中所以卷组的详细信息

选项:
-s, 以短格式输出,和vgs输出的信息差不多
-A, 近显示活动卷组的属性

参数:具体的卷组或不指定

#vgcreate [选项] [参数]-------- 创建LVM卷组,创建卷组的同时可以指定物理卷PE的大小

选项:
-l,卷组上允许创建的最大逻辑卷数
-p,卷组中允许添加的最大物理卷数
-s,卷组上物理卷的PE大小

参数:卷组名,要创建的卷组名称。物理卷列表,可以在创建卷组的时候同时把物理卷一起加入,也可以创建完卷组后用vgextend命令动态的添加

#vgrename [原卷组名] [新卷组名]--------重命名指定VG的名称

#vgchange [选项] [参数]--------修改特定VG的属性,包括是否激活,uuid号等

选项:
-a, y|n 是否激活卷组,-ay 为激活,-an为关闭激活
-l, 更改允许创建的最大逻辑卷数
-p, 更改允许添加的最大物理卷数

参数:卷组名

卷组的扩充与缩小命令
#vgextend [选项] [参数]-------- 用于动态的扩展LVM卷组,用它向卷组中添加物理卷来增加卷组的容量

选项:
-t,仅测试

参数:卷组名,指定要操作的卷组名。物理卷列表,卷组中的物理卷可以在使用vgcreate命令创建卷组时添加,也可以vgextend命令动态的添加

#vgreduce [选项] [参数]-------- 删除LVM卷组中的物理卷来减少卷组的容量,不能删除卷组中剩余的最后一个物理卷

选项:
-a,如果命令行中没有指定要删除的物理卷,则删除所有空的物理卷
--removemissing,删除卷组中丢失的物理卷,使卷组恢复正常状态

参数:卷组名,指定要操作的卷组名称。物理卷列表,指定要删除的物理卷列表


#vgcfgbackup [选项] [参数] --------备份VG描述文件(默认/etc/lvm/backup,亦可自由指定),在对VG做变更时,切记先用vgcfgbackup备份好VG的信息,避免意外

选项:
-f,不使用默认路径,指定备份的路径

参数:备份路径及备份文件名。要备份的卷组名

#vgcfgrestore [选项] [参数] --------物理卷全路命名 从备份的VG描述文件对VG元数据进行恢复

选项:
-f,指定用于恢复的文件

参数:备份文件的全面名。要恢复的卷组名


卷组的合并与拆分
#vgmerge [目的卷组名] [源卷组名] --------合并两个已经存在的卷组,要求两个卷组的物理区域(PE)大小相等且源卷组是非活动的。
#vgsplit [现有卷组] [新卷组] [物理卷全路径名]-------- 把物理卷上的已有卷组拆分成原卷组和新卷组


卷组的迁移
#vgexport [卷组名] -------- 将特定VG变为未知状态,用于迁移卷组到别的系统上面
#vgimport [卷组名] -------- 将未知状态的特定VG卷组变为正常状态,用于迁移别的卷组到系统上面

#vgmknodes --------重新创建卷组设备目录以及逻辑卷特殊文件

#vgck [卷组名]-------- 用于检查卷组中卷组描述区域信息的一致性。

#vgremove [参数] [选项] --------用于删除LVM卷组,当要删除的卷组上已经创建了逻辑卷时,vgremove命令需要进行确认删除,防止误删除数据,使用这个命令前最好先用vgcfgbackup 命令备份下VG

选项:
-f,强制删除

参数:指定要删除的卷组名

 

3、 逻辑卷命令
常用命令

#lvs--------lvs命令用于输出创建的逻辑卷信息报表。使用lvs命令仅能得到逻辑卷的概要信息,如果要得到更加详细的信息可以使用lvdisplay命令

#lvscan--------用于扫描当前系统中存在的所有的LVM逻辑卷,可以发现系统中所有逻辑卷,及其对应的设备文件

#lvdisplay --------用于显示LVM逻辑卷空间大小,读写状态和快照信息等属性。如果省略逻辑卷名则命令会显示所有逻辑卷的属性

#lvrename [原逻辑卷名] [新逻辑卷名]-------重命名指定的LV

#lvchange-------修改指定LV的一些属性,包括是否是激活状态、是否只读等

#lvcreate [选项][参数]-------用于创建LVM的逻辑卷,逻辑卷对应的设备文件保存在卷组目录下和/dev/mapper/目录下,其实这两个目录下的文件都是链接文件,链接到/dev/dm-n设备,dm-n就是LVM通过设备映射生成的逻辑设备,n代表数字从0开始,生成几个逻辑卷就有成对应的数字。比如:卷组名为vg0,逻辑卷为lv0是生成的第一个逻辑卷,那么对应的设备文件为/dev/vg0/lv0和/dev/mapper/vg0-lv0

选项:
-L,指定逻辑卷的大小,单位为“kKmMgGtT”字节
-l,指定逻辑卷的大小(LE数)
-n,指定逻辑卷的名字

参数:指定要从那个卷组创建逻辑卷,如果在卷组的后面加上PV,可以指定一个或多个PV,那么LVM分配的数据空间就会在指定的PV上创建,如过VG里有SSD的PV,可以指定LV用SSD的资源


逻辑卷的扩充与缩小命令
#lvextend [选项] [参数]-------用于在线扩展逻辑卷的空间大小,而不中断应用程序对逻辑卷的访问

选项:
-L,指定逻辑卷的大小,单位为“kKmMgGtT”字节,如果在大小前有加号,则增加对应的大小,如果没有加号,则为增加后的大小,增加后的大小不能小于现有大小。
-l,指定逻辑卷的大小(LE数)
-r,调整逻辑卷时同时调整其中的文件系统(支持ext2, ext3, ext4, ReiserFS 和 XFS )

参数:指定要扩展空间的逻辑卷

#lvreduce [选项] [参数]-------用于减少LVM逻辑卷占用的空间大小。如果在大小前有减号,则减少对应的大小,如果没有减号,则为减少后的大小,减少后的大小不能大于于现有大小。减少空间的过程中可能会删除逻辑卷已有的数据,所以在操作前必须进行确认做好数据备份

选项:
-L,指定逻辑卷的大小,单位为“kKmMgGtT”字节
-l,指定逻辑卷的大小(LE数)
-r,调整逻辑卷时同时调整其中的文件系统(支持ext2, ext3, ext4, ReiserFS ,XFS不支持 )

参数:指定要减小空间的逻辑卷

#lvresize[选项] [参数]-------调整指定LV的大小,即可以扩容也可以缩容,lvresize提供一些与lvextend和lvreduce相同的命令与选项,并同时允许两种类型的操作使用这个命令,调整逻辑卷的大小和缩小空间的大小时要谨慎,因为有可能导致数据的丢失

选项:
-L:指定逻辑卷的大小,单位为“kKmMgGtT”字节,如果在大小前有加号,则增加对应的大小,如果在大小前有减号,则减少对应的大小,如果没有加减号,则为最终的大小
-l,指定逻辑卷的大小(LE数)
-r,调整逻辑卷时同时调整其中的文件系统(支持ext2, ext3, ext4, ReiserFS , XFS不支持减小 )

参数:指定要操作的逻辑卷

#lvremove [选项] [参数]-------用于删除指定逻辑卷,如果逻辑卷以挂载,必须先卸载逻辑卷后才能删除

选项:
-f,强制删除

参数:指定要删除的逻辑卷的全路径

九、LVM的使用举例:

注意:
不建议对整个磁盘做PV初始化工作。因为通过某些分区工具(parted)查看可用磁盘时可能不能识别LVM元数据,导致我们认为磁盘是空闲的,重新设置分区覆盖原有数据
如果是分区需要调整分区的类型为LVM(fdisk分区类型8e,gdisk下为8e00,Parted下分区标记为lvm),不调整也可以,但是为了方便识别分区时最好更改下分区的类型。方便后期要对分区操作时候,容易识别出分区的类型。本人理解分区类型就是分区软件下用来描述分区所要承载的文件系统的类型。

1、PV管理

1.1,通过lvmdiskscan命令列出可被用作物理卷的设备,同时用fdisk -l 或parted -l 查看下分区是否已经被用,后面的操作很重要,防止误操作:
-------------------------------------------------------------------------
root@debian:~# lvmdiskscan
/dev/sda1 [ 18.00 GiB]                #列出来也不可用这是/分区
/dev/sda5 [ 2.00 GiB]            #列出来也不可用这是swap分区
/dev/sdb1 [ 2.00 GiB]            #可用,分区没有格式化
/dev/sdc [ 5.00 GiB]               #可用,有分区,但是已经不用了
1 disk
3 partitions
0 LVM physical volume whole disks
0 LVM physical volumes
root@debian:~#
-------------------------------------------------------------------------

1.2,创建PV
-------------------------------------------------------------------------
root@debian:~# pvcreate /dev/sdc                        #将整个磁盘初始化成PV,不建议这样操作,建议分成一个分区后操作
WARNING: dos signature detected on /dev/sdc at offset 510. Wipe it? [y/n]: y      #提示这个磁盘上有分区表,输入y回车擦除分区表
Wiping dos signature on /dev/sdc.                         #擦除分区表成,有分区的磁盘不允许创建PV,删除分区后才可以
Physical volume "/dev/sdc" successfully created.                   #创建PV成功

root@debian:~# pvcreate /dev/sdb1                        #将分区初始化成PV
WARNING: ext4 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n]: y      #提示分区上有ext4文件系统,输入y回车擦除文件系统
Wiping ext4 signature on /dev/sdb1.                         #擦除文件系统成功
Physical volume "/dev/sdb1" successfully created.                    # 创建PV成功
root@debian:~#
-------------------------------------------------------------------------

1.2,查看分区状态
-------------------------------------------------------------------------
root@debian:~# parted -l
............

Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 1049kB 2149MB 2147MB primary lvm            #分区类型为lvm,标记后很容易知道这个分区用以lvm了


Error: /dev/sdc: unrecognised disk label          #已经初始化成PV,但是还是显示没有分区表,很容易以为是没有被利用的磁盘,所以不推荐将
Model: ATA VBOX HARDDISK (scsi)             #整个硬盘不分区就直接PV
Disk /dev/sdc: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

root@debian:~#
-------------------------------------------------------------------------

1.3,查看已经创建的PV
-------------------------------------------------------------------------
root@debian:~# pvs                         #简单的查看,PV的命令,所属VG,PV的大小
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 2.00g 2.00g
/dev/sdc lvm2 --- 5.00g 5.00g                     #可以看出来已经创建了2个PV

root@debian:~# pvdisplay                      #查看PV的详细信息
"/dev/sdb1" is a new physical volume of "2.00 GiB"          #简要信息
--- NEW Physical volume ---
PV Name /dev/sdb1                          #PV的名字
VG Name                              #PV所属的VG,还没创建所以没有
PV Size 2.00 GiB                           #PV的大小
Allocatable NO
PE Size 0                               #PE的大小,加入VG后才会才会创建PE
Total PE 0                             #总PE数
Free PE 0                              #可用的PE数
Allocated PE 0                              #以分配的PE数
PV UUID Q9L0el-2PXV-bLy4-eVck-MsWm-1bBL-ODGByA         #PV的UUID

"/dev/sdc" is a new physical volume of "5.00 GiB"         #另外一个PV
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID sApAs0-0s6C-02Tb-Y70L-PDkZ-ZxRG-o4zaJK

root@debian:~#
-------------------------------------------------------------------------


2、VG的管理

2.1,创建VG
-------------------------------------------------------------------------
root@debian:~# vgcreate vg0 /dev/sdb1          #创建卷组名字为vg0 同时把/dev/sdb1这个PV一同加入到vg0
Volume group "vg0" successfully created
root@debian:~#
-------------------------------------------------------------------------

2.2,扩展VG的大小
-------------------------------------------------------------------------
root@debian:~# vgextend vg0 /dev/sdc                       #将没有加入vg0的PV加入到vg0,可以创建vg的时候一起加入,也可以后续逐个加入
Volume group "vg0" successfully extended         #扩展成功
root@debian:~#
-------------------------------------------------------------------------

2.3,查看创建的VG
-------------------------------------------------------------------------
root@debian:~# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 2 0 0 wz--n- 6.99g 6.99g         #vg的简要信息VG的名字,PV的数量,LV的数量,可用的容量

root@debian:~# vgdisplay
--- Volume group ---
VG Name vg0               #VG的名字
System ID
Format lvm2                #lvm版本
Metadata Areas 2              #元数据信息区域
Metadata Sequence No 2
VG Access read/write              #VG访问许可,可读写
VG Status resizable               #VG的状态,可调整大小
MAX LV 0                  #最大LV数
Cur LV 0                    #当前LV数
Open LV 0                    #打开的LV数
Max PV 0                   #最大PV数
Cur PV 2                    #当前PV数
Act PV 2                   #起作用的PV数
VG Size 6.99 GiB                #VG的大小
PE Size 4.00 MiB                #PE的大小
Total PE 1790                      #VG里PE的总数
Alloc PE / Size 0 / 0                  #以使用的PE数/大小
Free PE / Size 1790 / 6.99 GiB           #可用的PE数/大小
VG UUID lrQKvq-cygM-FyS1-yU1F-20lu-KYmF-GrDDaZ      #VG的UUID

root@debian:~#
-------------------------------------------------------------------------

2.4,重命名卷组
将卷组vg0重命名为VGa0
-------------------------------------------------------------------------
root@debian:~# vgrename vg0 VGa0            #vg0为原卷组名,即使卷组中的逻辑卷已经挂载也能重命名,但是不推荐这么作,最好先卸载已经挂载的逻辑卷后重命名。
Volume group "vg0" successfully renamed to "VGa0"
root@debian:~# vgs
VG #PV #LV #SN Attr VSize VFree
VGa0 3 3 0 wz--n- 9.99g 2.99g               #修改成功
root@debian:~#
-------------------------------------------------------------------------

3、LV的管理

3.1,创建LV
-------------------------------------------------------------------------
root@debian:~# lvcreate -L 1G vg0               #在vg0上创建1G大小的lv不指定lv的名字,如果不指定名字会自动用默认的命名
Logical volume "lvol0" created.

root@debian:~# lvcreate -L 1G -n lv0 vg0           #在vg0上创建1G大小的lv指定lv的名字为lv0
Logical volume "lv0" created.


#你可以指定一个或多个物理卷来限制LVM分配数据空间的位置。比如你希望在较小的SSD硬盘上创建根文件系统,并在较慢的机械硬盘上创建家目录卷,仅需把物理卷设备加入到命令中,例如下面的操作:
root@debian:~# lvcreate -L 1G -n lv1 vg0 /dev/sdc        #/dev/sdc为固态硬盘

#如果你想让要创建的逻辑卷拥有卷组的所有未使用空间,请使用以下命令:
root@debian:~# lvcreate -l +100%FREE -n lv2 vg0        #-l +100%FREE表示全部剩余
Logical volume "lv2" created.

逻辑卷创建完后会设备映射生成的逻辑设备/dev/dm-n,会同时生成“/dev/卷组名”目录,以后在卷组上创建的逻辑卷都会在这个目录里,你可以通过“/dev/卷组名/逻辑卷名” 或“/dev/mapper/卷组名-逻辑卷名” 来访问它对应的逻辑卷。例如vg0卷组中的lv0卷创建完成后就会有/dev/vg0/lv0 和/dev/mapper/vg0-lv0两个链接文件链接到/dev/dm-1
-------------------------------------------------------------------------

3.2,查看创建的LV
-------------------------------------------------------------------------
root@debian:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-a----- 1.00g
lvol0 vg0 -wi-a----- 1.00g             #lv的简要信息,名字,所属组,大小

root@debian:~# lvdisplay                #lv的相信信息
--- Logical volume ---
LV Path /dev/vg0/lvol0                 #lv设备的全路径
LV Name lvol0                    #lv的名字
VG Name vg0                        #lv所属VG
LV UUID fi2Pc5-xdPW-vsg3-26Oj-xbDQ-6jkj-NUX1iF           #lv的UUID
LV Write Access read/write #lv访问许可,可读写
LV Creation host, time debian, 2019-09-02 14:12:16 +0800    #lv创建时间
LV Status available                      #lv的状态,可用
# open 0
LV Size 1.00 GiB              #lv的大小
Current LE 256                #lv使用LE的数量
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:0

..........

root@debian:~# parted -l

..........

Error: /dev/sdc: unrecognised disk label     #都创建完lv了,还提示没有分区表,太容易当成没有被占用的磁盘了
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdc: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Error: /dev/mapper/vg0-lv0: unrecognised disk label      #lv生成的设备,分区工具会把它当成磁盘一样对待,提示没有分区表
Model: Linux device-mapper (linear) (dm)              #设备类型为,设备映射器生成的逻辑设备
Disk /dev/mapper/vg0-lv0: 1074MB              #设备的全路径
Sector size (logical/physical): 512B/512B
Partition Table: unknown                    #未知分区表
Disk Flags:

Model: Linux device-mapper (linear) (dm)           #lv生成的另一个设备
Disk /dev/mapper/vg0-lvol0: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: loop                     #我们对块设备不分区就直接对整个设备格式化后,分区类型就显示为loop
Disk Flags:

Number Start End Size File system Flags
1 0.00B 1074MB 1074MB ext4

..........
注意:正常我们创建完lv设备会对它直接格式化,不会在对他进行分区后格式化,虽然可以,但是不推荐这样作

root@debian:~# pvdisplay -m         #显示PE到LE的映射
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg0
PV Size 2.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 511
Free PE 0
Allocated PE 511
PV UUID Q9L0el-2PXV-bLy4-eVck-MsWm-1bBL-ODGByA

--- Physical Segments --- #/dev/sdb1      #物理卷上有/dev/vg0/lvol0和/dev/vg0/lv2连个逻辑卷
Physical extent 0 to 255:           #/dev/vg0/lvol0卷的容量由0到255的PE组成
Logical volume /dev/vg0/lvol0
Logical extents 0 to 255            #/dev/vg0/lvol0卷的容量由0到255的LE组成
Physical extent 256 to 510:          #/dev/vg0/lv2卷的容量由256到510的PE组成
Logical volume /dev/vg0/lv2
Logical extents 1534 to 1788         #/dev/vg0/lv2卷的容量由1534到1534的LE组成

--- Physical volume ---
PV Name /dev/sdb2
VG Name vg0
PV Size 3.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 767
Free PE 0
Allocated PE 767
PV UUID zMP4oN-GbB2-h2Xg-Ksxi-KM94-hesj-s3s3FA

--- Physical Segments ---
Physical extent 0 to 255:
Logical volume /dev/vg0/lv0
Logical extents 0 to 255
Physical extent 256 to 766:
Logical volume /dev/vg0/lv2
Logical extents 1023 to 1533

--- Physical volume ---
PV Name /dev/sdc
VG Name vg0
PV Size 5.00 GiB / not usable 4.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 1279
Free PE 0
Allocated PE 1279
PV UUID sApAs0-0s6C-02Tb-Y70L-PDkZ-ZxRG-o4zaJK

--- Physical Segments ---
Physical extent 0 to 255:
Logical volume /dev/vg0/lv1      #指定lv1卷所属的PV后,就会在对应的PV上创建逻辑卷
Logical extents 0 to 255
Physical extent 256 to 1278:
Logical volume /dev/vg0/lv2
Logical extents 0 to 1022

root@debian:~#

通过上面的映射关系可以知道,/dev/vg0/lvol0在/dev/sdb1上创建,/dev/vg0/lv0在/dev/sdb2上创建,/dev/vg0/lv1在/dev/sdc上创建,前面这个三个逻辑卷都没能用完所在
的物理卷,/dev/vg0/lv2用完了卷组中所有的剩余空间,所以在所有物理卷中都有lv2的LE与PE的对应关系。
逻辑卷在创建时逻辑卷的LE与卷组中的物理卷的PE对应关系是从某一个物理卷的起始PE开始一直到满足逻辑卷的容量或用完PE为止,如果用完本物理卷的PE后还没有达到逻辑卷所需要的容量就会从有剩余PE的物理卷那里继续使用,直到达到逻辑卷所需的容量。如果创建了多个逻辑卷,多个逻辑卷会从卷组中的不同物理卷同时创建,不是用完一个物理卷后在从下一个物理卷创建的这种连续的方式。

-------------------------------------------------------------------------

3.3,格式化并挂载LV
-------------------------------------------------------------------------
root@debian:~# mkfs.ext4 /dev/vg0/lvol0       #指定要格式化LV的全路径
mke2fs 1.43.4 (31-Jan-2017)
创建含有 262144 个块(每块 4k)和 65536 个inode的文件系统
文件系统UUID:5f5354ec-35ea-40ac-b2f0-54abef0f4e97
超级块的备份存储于下列块:
32768, 98304, 163840, 229376

正在分配组表: 完成
正在写入inode表: 完成
创建日志(8192 个块)完成
写入超级块和文件系统账户统计信息: 已完成

root@debian:~# mount /dev/vg0/lvol0 /mnt/
root@debian:~# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
...........

/dev/mapper/vg0-lvol0 ext4 976M 2.6M 907M 1% /mnt      # 以成功挂载lvol0

root@debian:~# ls -l /dev/mapper/
总用量 0
crw------- 1 root root 10, 236 9月 2 14:12 control
lrwxrwxrwx 1 root root 7 9月 2 14:12 vg0-lv0 -> ../dm-1
lrwxrwxrwx 1 root root 7 9月 2 15:10 vg0-lvol0 -> ../dm-0     #/dev/mapper/vg0-lvol0链接到/dm-0
root@debian:~# ls -l /dev/vg0/
总用量 0
lrwxrwxrwx 1 root root 7 9月 2 14:12 lv0 -> ../dm-1
lrwxrwxrwx 1 root root 7 9月 2 15:10 lvol0 -> ../dm-0       #/dev/vg0/lvol0链接到/dm-0
root@debian:~#

/dev/mapper/vg0-lvol0和/dev/vg0/lvol0都是链接到/dm-0,所以对两个文件的那个文件操作都是一样的
-------------------------------------------------------------------------


3.4,扩展LV

3.4.1,对下面两个LV进行扩展,分别增加1G的容量,lv0和lv1分别已经格式化挂载
-------------------------------------------------------------------------
root@debian:~# df -hT             #查看两个lv的状态
文件系统 类型 容量 已用 可用 已用% 挂载点
.......
/dev/mapper/vg0-lv0 ext4 976M 2.6M 907M 1% /mnt/lv0
/dev/mapper/vg0-lv1 xfs 1014M 34M 981M 4% /mnt/lv1
root@debian:~#
-------------------------------------------------------------------------
在对LV进行扩展前必须确认LV所属的VG是否有可用的剩余空卷,如果没有需要向VG里增加PV,从而提高VG的可用容量,我这里的VG空间充足就不用添加PV了,添加了PV
VG中的PE也就增多了,其实对LV容量的增加就是增加LV的PE数量,减少容量就是减少PE数量

3.4.2,查看VG可用的容量
-------------------------------------------------------------------------
root@debian:~# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 3 3 0 wz--n- 9.99g 6.99g       #VFree表示VG可用空间,这里还有6.99g增加2G容量空间充足
root@debian:~#
-------------------------------------------------------------------------

3.4.3,通过命令lvextend扩大lv0和lv1的容量
-------------------------------------------------------------------------
root@debian:~# lvextend -L +1G /dev/vg0/lv0        #扩大1G, +1G表示在原有基础上扩大1G
Size of logical volume vg0/lv0 changed from 1.00 GiB (256 extents) to 2.00 GiB (512 extents).
Logical volume vg0/lv0 successfully resized.          #扩大成功
root@debian:~# lvextend -L +1G /dev/vg0/lv1
Size of logical volume vg0/lv1 changed from 1.00 GiB (256 extents) to 2.00 GiB (512 extents).
Logical volume vg0/lv1 successfully resized.
root@debian:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-ao---- 2.00g        # 扩大成功
lv1 vg0 -wi-ao---- 2.00g        #扩大成功
lv2 vg0 -wi-a----- 1.00g
root@debian:~# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
........
/dev/mapper/vg0-lv0 ext4 976M 2.6M 907M 1% /mnt/lv0 #lv已经扩大到2G了,但是df-hT查看还是1G容量,这是因为文件系统还没有更新
/dev/mapper/vg0-lv1 xfs 1014M 34M 981M 4% /mnt/lv1 #还需要对文件系统进行更新已对增加的空间进行管理
root@debian:~#

-------------------------------------------------------------------------

3.4.4,扩大lv0和lv1的容量后对文件系统进行更新从而接管增加的容量

ext系列的文件系统可以使用resieze2fs在线的调整,xfs该文件系统只能扩展无法收缩
-------------------------------------------------------------------------
root@debian:~# resize2fs /dev/vg0/lv0       #更新ext4文件系统
resize2fs 1.43.4 (31-Jan-2017)
/dev/vg0/lv0 上的文件系统已被挂载于 /mnt/lv0;需要进行在线调整大小

old_desc_blocks = 1, new_desc_blocks = 1
/dev/vg0/lv0 上的文件系统现在为 524288 个块(每块 4k)。

root@debian:~# xfs_growfs /dev/vg0/lv1         #更新xfs文件系统
meta-data=/dev/mapper/vg0-lv1 isize=512 agcount=8, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1 spinodes=0 rmapbt=0
= reflink=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

root@debian:~# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
...........
/dev/mapper/vg0-lv0 ext4 2.0G 3.1M 1.9G 1% /mnt/lv0        #ext4已经更新成功
/dev/mapper/vg0-lv1 xfs 2.0G 35M 2.0G 2% /mnt/lv1             #xfs已经更新成功
root@debian:~#
-------------------------------------------------------------------------

3.4.5通过命令lvextend -r扩大lv0和lv1的容量,同时调整其中的文件系统(原始容量为2G)
-------------------------------------------------------------------------
root@debian:~# lvextend -r -L 3G /dev/vg0/lv0      #扩展到3G,3G前面不能有加号,有加号是增加3G(增加完就是5G)
Size of logical volume vg0/lv0 changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents).
Logical volume vg0/lv0 successfully resized.
resize2fs 1.43.4 (31-Jan-2017)
/dev/mapper/vg0-lv0 上的文件系统已被挂载于 /mnt/lv0;需要进行在线调整大小

old_desc_blocks = 1, new_desc_blocks = 1
/dev/mapper/vg0-lv0 上的文件系统现在为 786432 个块(每块 4k)。

root@debian:~# lvextend -r -L 3G /dev/vg0/lv1       #扩展到3G
Size of logical volume vg0/lv1 changed from 2.00 GiB (512 extents) to 3.00 GiB (768 extents).
Logical volume vg0/lv1 successfully resized.
meta-data=/dev/mapper/vg0-lv1 isize=512 agcount=8, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1 spinodes=0 rmapbt=0
= reflink=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 524288 to 786432
root@debian:~# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
udev devtmpfs 991M 0 991M 0% /dev
tmpfs tmpfs 201M 3.4M 198M 2% /run
/dev/sda1 ext4 18G 3.2G 14G 19% /
tmpfs tmpfs 1003M 0 1003M 0% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 1003M 0 1003M 0% /sys/fs/cgroup
tmpfs tmpfs 201M 4.0K 201M 1% /run/user/112
tmpfs tmpfs 201M 12K 201M 1% /run/user/1000
/dev/mapper/vg0-lv1 xfs 3.0G 36M 3.0G 2% /mnt/lv1
/dev/mapper/vg0-lv0 ext4 3.0G 3.1M 2.8G 1% /mnt/lv0
root@debian:~#

-------------------------------------------------------------------------

3.4.6通过命令lvresize -r扩大lv0和lv1的容量,同时调整其中的文件系统(原始容量为3G)
-------------------------------------------------------------------------
root@debian:~# lvresize -r -L +1G /dev/vg0/lv0        #扩大1G, +1G表示在原有基础上扩大1G
Size of logical volume vg0/lv0 changed from 3.00 GiB (768 extents) to 4.00 GiB (1024 extents).
Logical volume vg0/lv0 successfully resized.
resize2fs 1.43.4 (31-Jan-2017)
/dev/mapper/vg0-lv0 上的文件系统已被挂载于 /mnt/lv0;需要进行在线调整大小

old_desc_blocks = 1, new_desc_blocks = 1
/dev/mapper/vg0-lv0 上的文件系统现在为 1048576 个块(每块 4k)。

root@debian:~# lvresize -r -L +1G /dev/vg0/lv1       #扩大1G, +1G表示在原有基础上扩大1G
Size of logical volume vg0/lv1 changed from 3.00 GiB (768 extents) to 4.00 GiB (1024 extents).
Logical volume vg0/lv1 successfully resized.
meta-data=/dev/mapper/vg0-lv1 isize=512 agcount=12, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1 spinodes=0 rmapbt=0
= reflink=0
data = bsize=4096 blocks=786432, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 786432 to 1048576
root@debian:~# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
.............
/dev/mapper/vg0-lv1 xfs 4.0G 37M 4.0G 1% /mnt/lv1
/dev/mapper/vg0-lv0 ext4 4.0G 4.0M 3.8G 1% /mnt/lv0
root@debian:~#
-------------------------------------------------------------------------


3.5,缩小LV

相比于扩容逻辑卷来讲,对逻辑卷的缩小操作存在着更高丢失数据的风险,所以在生产环境中一定要提前备份好数据,ext系列的文件系统不支持在线操作,必须先卸载已经挂载的LV设备,另外还要先检查文件系统的完整性,这也是在保证数据的安全。xfs文件系统只支持增大分区空间的情况,不支持减小的情况(切记!!!!!),硬要减小的话,只能在减小后将逻辑分区重新通过mkfs.xfs命令重新格式化才能挂载上,这样的话这个逻辑分区上原来的数据就丢失了。

3.5.1,卸载已经挂载的LV设备/dev/mapper/vg0-lv0 缩小到2G
-------------------------------------------------------------------------
root@debian:~# df -hT           #确保缩减后的空间大小依然能存储原有的所有数据
root@debian:~# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
...........
/dev/mapper/vg0-lv1 xfs 4.0G 37M 4.0G 1% /mnt/lv1
/dev/mapper/vg0-lv0 ext4 4.0G 4.0M 3.8G 1% /mnt/lv0
root@debian:~#

root@debian:~# umount /dev/mapper/vg0-lv0          #卸载/dev/mapper/vg0-lv0

root@debian:~# df -hT                  #查看是否卸载成功
root@debian:~# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
...........
/dev/mapper/vg0-lv1 xfs 4.0G 37M 4.0G 1% /mnt/lv1
root@debian:~#

root@debian:~# e2fsck -f /dev/mapper/vg0-lv0         #对lv强制执行文件系统检测
e2fsck 1.43.4 (31-Jan-2017)
第 1 步:检查inode、块和大小
第 2 步:检查目录结构
第 3 步:检查目录连接性
第 4 步:检查引用计数
第 5 步:检查组概要信息
/dev/mapper/vg0-lv0:12/196608 文件(0.0% 为非连续的), 21309/786432 块

root@debian:~# resize2fs /dev/vg0/lv0 2G         #使用resize2fs对lv逻辑卷的文件系统边界空间大小调整为缩减后的大小2G
resize2fs 1.43.4 (31-Jan-2017)
将 /dev/vg0/lv0 上的文件系统调整为 524288 个块(每块 4k)。
/dev/vg0/lv0 上的文件系统现在为 524288 个块(每块 4k)。

root@debian:~# lvreduce -L 2G /dev/vg0/lv0         #使用lvreduce对lv逻辑卷缩减后最终的容量为2G(2G前不要有加号)
WARNING: Reducing active logical volume to 2.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv0? [y/n]: y       #提示可能会破坏您的数据(文件系统等)输入y回车继续
Size of logical volume vg0/lv0 changed from 4.00 GiB (1024 extents) to 2.00 GiB (512 extents).
Logical volume vg0/lv0 successfully resized.

root@debian:~# mount /dev/vg0/lv0 /mnt/lv0      #重新挂载设备
root@debian:~# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
...........
/dev/mapper/vg0-lv1 xfs 4.0G 37M 4.0G 1% /mnt/lv1
/dev/mapper/vg0-lv0 ext4 2.0G 3.1M 1.9G 1% /mnt/lv0     #lv已经缩减成功
root@debian:~#

注意:使用lvreduce在对逻辑卷进行缩减的时候一定要输入最终的容量,不要输入减少的容量(带减号),输入减少的容量得到的最终结果很容以使缩减失败。
-------------------------------------------------------------------------

3.5.1,通过lvreduce -r命令对已经卸载的LV设备/dev/mapper/vg0-lv0 缩小到1G(现有容量为2G)
-------------------------------------------------------------------------
root@debian:~# lvreduce -r -L 1G /dev/vg0/lv0
fsck from util-linux 2.29.2
/dev/mapper/vg0-lv0:没有问题,12/131072 文件,17197/524288 块
resize2fs 1.43.4 (31-Jan-2017)
将 /dev/mapper/vg0-lv0 上的文件系统调整为 262144 个块(每块 4k)。
/dev/mapper/vg0-lv0 上的文件系统现在为 262144 个块(每块 4k)。

Size of logical volume vg0/lv0 changed from 2.00 GiB (512 extents) to 1.00 GiB (256 extents).
Logical volume vg0/lv0 successfully resized.

root@debian:~# mount /dev/vg0/lv0 /mnt/lv0     #挂载
root@debian:~# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
...........
/dev/mapper/vg0-lv1 xfs 4.0G 37M 4.0G 1% /mnt/lv1
/dev/mapper/vg0-lv0 ext4 976M 2.6M 914M 1% /mnt/lv0     #缩减成功
-------------------------------------------------------------------------

3.5.2,通过lvresize -r命令对已经卸载的LV设备/dev/mapper/vg0-lv0 缩小到2G(现有容量为3G)
-------------------------------------------------------------------------
root@debian:~# lvresize -r -L 2G /dev/vg0/lv0
fsck from util-linux 2.29.2
/dev/mapper/vg0-lv0:没有问题,12/196608 文件,21309/786432 块
resize2fs 1.43.4 (31-Jan-2017)
将 /dev/mapper/vg0-lv0 上的文件系统调整为 524288 个块(每块 4k)。
/dev/mapper/vg0-lv0 上的文件系统现在为 524288 个块(每块 4k)。

Size of logical volume vg0/lv0 changed from 3.00 GiB (768 extents) to 2.00 GiB (512 extents).
Logical volume vg0/lv0 successfully resized.
root@debian:~# mount /dev/vg0/lv0 /mnt/lv0
root@debian:~# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
...........
/dev/mapper/vg0-lv1 xfs 4.0G 37M 4.0G 1% /mnt/lv1
/dev/mapper/vg0-lv0 ext4 2.0G 3.1M 1.9G 1% /mnt/lv0
root@debian:~#
-------------------------------------------------------------------------
通过lvreduce -r或lvresize -r命令缩减逻辑卷比较方便,推荐用这种方法进行缩减

 

3.8重命名卷
将lv0卷重命名为LVa0
-------------------------------------------------------------------------
root@debian:~# lvrename vg0 lv0 LVa0        #vg0为卷组名,即使lv0已经挂载也能重命名,但是不推荐这么作,最好先卸载后重命名。
Renamed "lv0" to "LVa0" in volume group "vg0"
root@debian:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
LVa0 VGa0 -wi-ao---- 2.00g              #修改成功
lv1 VGa0 -wi-ao---- 4.00g
lvol0 VGa0 -wi-a----- 1.00g
root@debian:~#

-------------------------------------------------------------------------

3.7,删除逻辑卷
-------------------------------------------------------------------------
root@debian:~# lvremove /dev/vg0/lvol0                      #这里要输入逻辑卷的全路径
Do you really want to remove active logical volume vg0/lvol0? [y/n]: y      #让你确认输入y回车
Logical volume "lvol0" successfully removed
root@debian:~#
-------------------------------------------------------------------------

 

3.8,安全的将PV从VG中移除(要移除的硬盘为/dev/sdb)
有些时候因为某种原因我们需要把某个硬盘从LVM中移除,移除不是用pvremove命令直接移除就行,因为要移除的硬盘上很有可能有数据存在,所以移除前需要把硬盘上的数据转移到
其他硬盘,转移成功后在移除。步骤如下:

3.8.1,先查看硬盘上是否有PE被用
-------------------------------------------------------------------------
root@debian:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg0 lvm2 a-- 2.00g 1020.00m
/dev/sdb2 vg0 lvm2 a-- 3.00g 0 #/dev/sdb上有2个分区都存在PE,因为PFree小于PSize
/dev/sdc vg0 lvm2 a-- 5.00g 4.99g

root@debian:~# pvdisplay -m      #更直观的查看
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg0
PV Size 2.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 511
Free PE 255
Allocated PE 256          #以用PE数
PV UUID Q9L0el-2PXV-bLy4-eVck-MsWm-1bBL-ODGByA

--- Physical Segments ---
Physical extent 0 to 255:
Logical volume /dev/vg0/lvol0      #PV被lvol0占用一部份
Logical extents 0 to 255
Physical extent 256 to 510:
FREE

--- Physical volume ---
PV Name /dev/sdb2
VG Name vg0
PV Size 3.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 767
Free PE 0
Allocated PE 767         #以用PE数
PV UUID zMP4oN-GbB2-h2Xg-Ksxi-KM94-hesj-s3s3FA

--- Physical Segments ---
Physical extent 0 to 255:
Logical volume /dev/vg0/lv0      #PV被lv0占用一部份
Logical extents 0 to 255
Physical extent 256 to 511:
Logical volume /dev/vg0/lv1      #PV被lv1占用一部份
Logical extents 0 to 255
Physical extent 512 to 766:
Logical volume /dev/vg0/lv0      #PV被lv0占用一部份
Logical extents 256 to 510

--- Physical volume ---
PV Name /dev/sdc
VG Name vg0
PV Size 5.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 1279
Free PE 1278        #可用PE数
Allocated PE 1
PV UUID sApAs0-0s6C-02Tb-Y70L-PDkZ-ZxRG-o4zaJK

--- Physical Segments ---
Physical extent 0 to 513:
FREE
Physical extent 514 to 514:
Logical volume /dev/vg0/lv0
Logical extents 511 to 511
Physical extent 515 to 1278:
FREE

root@debian:~#
-------------------------------------------------------------------------
通过pvdisplay -m 命令可以更直观的查看PE的使用情况, /dev/sdb硬盘两个分区一共被占用了256+767=1023个PE,而/dev/sdc有1278个可用的PE,同时三个PV在同一个
卷组vg0中,所以我们可以通过命令pvmove把物理卷/dev/sdb1和/dev/sdb2中的PE转移到同卷组中的/dev/sdc物理卷中,如果物理卷中没有剩余PE请添加PV扩充PE。


3.8.1,通过命令pvmove把物理卷中的PE转移到同卷组中其他的物理卷中
-------------------------------------------------------------------------
root@debian:~# pvmove /dev/sdb1 /dev/sdc           #将/dev/sdb1中以用的PE转移到 /dev/sdc中
/dev/sdb1: Moved: 16.41%
root@debian:~# pvmove -v /dev/sdb2 /dev/sdc       #将/dev/sdb2中以用的PE转移到 /dev/sdc中,同时显示详细过程
Cluster mirror log daemon is not running.
Wiping internal VG cache
Wiping cache of LVM-capable devices
Archiving volume group "vg0" metadata (seqno 53).
Creating logical volume pvmove0
Moving 511 extents of logical volume vg0/lv0
Moving 256 extents of logical volume vg0/lv1
activation/volume_list configuration setting not defined: Checking only host tags for vg0/lv0.
activation/volume_list configuration setting not defined: Checking only host tags for vg0/lv1.
Setting up pvmove in on-disk volume group metadata.
Creating vg0-pvmove0
Loading vg0-pvmove0 table (254:3)
Loading vg0-lv0 table (254:1)
Loading vg0-lv1 table (254:2)
Suspending vg0-lv0 (254:1) with device flush
Suspending vg0-lv1 (254:2) with device flush
activation/volume_list configuration setting not defined: Checking only host tags for vg0/pvmove0.
Resuming vg0-pvmove0 (254:3)
Loading vg0-pvmove0 table (254:3)
Suppressed vg0-pvmove0 (254:3) identical table reload.
Resuming vg0-lv0 (254:1)
Resuming vg0-lv1 (254:2)
Creating volume group backup "/etc/lvm/backup/vg0" (seqno 54).
Checking progress before waiting every 15 seconds.
/dev/sdb2: Moved: 1.30%
/dev/sdb2: Moved: 33.38%
/dev/sdb2: Moved: 66.62%
/dev/sdb2: Moved: 100.00%
Polling finished successfully.

root@debian:~# pvdisplay -m
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg0
PV Size 2.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 511
Free PE 511
Allocated PE 0            #/dev/sdb1中没有占用的PE,转移成功
PV UUID Q9L0el-2PXV-bLy4-eVck-MsWm-1bBL-ODGByA

--- Physical Segments ---
Physical extent 0 to 510:
FREE

--- Physical volume ---
PV Name /dev/sdb2
VG Name vg0
PV Size 3.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 767
Free PE 767
Allocated PE 0            #/dev/sdb2中没有占用的PE,转移成功
PV UUID zMP4oN-GbB2-h2Xg-Ksxi-KM94-hesj-s3s3FA

--- Physical Segments ---
Physical extent 0 to 766:
FREE

--- Physical volume ---
PV Name /dev/sdc
VG Name vg0
PV Size 5.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 1279
Free PE 255
Allocated PE 1024
PV UUID sApAs0-0s6C-02Tb-Y70L-PDkZ-ZxRG-o4zaJK

--- Physical Segments ---        #全部转移到/dev/sdc 中
Physical extent 0 to 255:
Logical volume /dev/vg0/lv0
Logical extents 0 to 255
Physical extent 256 to 511:
Logical volume /dev/vg0/lv1
Logical extents 0 to 255
Physical extent 512 to 513:
FREE
Physical extent 514 to 514:
Logical volume /dev/vg0/lv0
Logical extents 511 to 511
Physical extent 515 to 770:
Logical volume /dev/vg0/lvol0
Logical extents 0 to 255
Physical extent 771 to 1025:
Logical volume /dev/vg0/lv0
Logical extents 256 to 510
Physical extent 1026 to 1278:
FREE

root@debian:~#

-------------------------------------------------------------------------


3.8.2,通过命令vgreduce 删除卷组中的物理卷
-------------------------------------------------------------------------
root@debian:~# vgreduce vg0 /dev/sdb1 /dev/sdb2      #删除卷组中的2个物理卷
Removed "/dev/sdb1" from volume group "vg0"
Removed "/dev/sdb2" from volume group "vg0"

root@debian:~# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 lvm2 --- 2.00g 2.00g                #删除成功
/dev/sdb2 lvm2 --- 3.00g 3.00g
/dev/sdc vg0 lvm2 a-- 5.00g 1020.00m
root@debian:~#
-------------------------------------------------------------------------

3.8.3,通过命令pvremove删除物理卷
-------------------------------------------------------------------------
root@debian:~# pvremove /dev/sdb1 /dev/sdb2         #删除连个物理卷
Labels on physical volume "/dev/sdb1" successfully wiped.
Labels on physical volume "/dev/sdb2" successfully wiped.
-------------------------------------------------------------------------
root@debian:~# pvs
PV VG Fmt Attr PSize PFree            #删除成功
/dev/sdc vg0 lvm2 a-- 5.00g 1020.00m
root@debian:~#

 

十、LVM的高级功能

LVM中创建RAID卷

RAID是一种创建逻辑卷的方法,它使用多个物理设备来提高性能或容错能力。在LVM中,这些物理设备是单个卷组中的物理卷。
LVM RAID支持RAID 0,RAID 1,RAID 5,RAID 6和RAID 10,至少要存在两个来自不同的物理磁盘的物理卷,因为RAID 0和RAID 1最少需要两块硬盘,RAID 5最少需要3块,RAID 6和RAID 10最少需要4块,RAID0是用来提高读写性能的,如果逻辑卷上的LE对应的PE都来自同一个物理磁盘显然不能提高性能,同样如果逻辑卷上的LE对应的PE都来自同一个物理磁盘,对于RAID1显然不能提可靠性,其余的这里就不在阐述了。

1、创建物理卷

-------------------------------------------------------------------------
root@debian:~# pvcreate /dev/sdb1 /dev/sdc1
-------------------------------------------------------------------------


2、创建卷组
-------------------------------------------------------------------------
root@debian:~# vgcreate raidvg /dev/sdb1 /dev/sdc1
-------------------------------------------------------------------------


3、创建raid1的逻辑卷

-------------------------------------------------------------------------
root@debian:~# lvcreate --type raid1 -m 1 -L 1G -n raid1lv1 raidvg /dev/sdc1 /dev/sdb1
  Logical volume "raid1lv1" created.
root@debian:~#
-------------------------------------------------------------------------
--type, 用来指定RAID的级别
-m,     用来指定镜像的数量,1表示源数据有一个镜像数据

raidvg卷组后面的两个物理卷用来指明,在这两个物理卷上创建源数据和镜像数据

4、创建raid0的逻辑卷

-------------------------------------------------------------------------
root@debian:~# lvcreate --type raid0  -L 1G -n raid0lv1 raidvg /dev/sdc1 /dev/sdb1
  Using default stripesize 64.00 KiB.    #使用默认的条带的大小我们可以用--stripesize参数来制定条带的大小
  Logical volume "raid0lv1" created.
root@debian:~#
-------------------------------------------------------------------------

 

参考资料:

http://manpages.ubuntu.com/manpages/bionic/man7/lvmraid.7.html

https://wiki.archlinux.org/index.php/LVM_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

https://linux.cn/article-3965-1.html

 

以下您可能有感兴趣的文章: