Linux系统管理13:LVM逻辑卷管理

一、认识LVM

​ lvm(logical volume manager)逻辑卷管理器。主要作用是动态分配磁盘分区及调整磁盘分区大小,并且可以让多个分区或物理硬盘作为一个逻辑卷(相当于一个逻辑硬盘)来使用。

​ 一个硬盘/dev/sda划分了三个主分区:/dev/sda1,/dev/sda2,/dev/sda3,对应挂载点/boot,/,/home还有一部分磁盘空间没有划分

问题:当系统用户增多,/home分区空间不够用了,如何处理?

解决方法
传统方法:在未划分的空间中分割一个分区,挂载到/home下,并把sda3的内容复制到新分区上。或者把该新分区挂载到另外的挂载点上,然后在/home下创建链接,链接到该新挂载点。

结果:浪费了/dev/sda3,并且若新分区容量小于/sda3如何解决?
需要每次额外创建链接,比较麻烦。

最佳方法
利用lvm解决。lvm的好处在于,可以动态调整逻辑卷(相当于一个逻辑分区)的容量大小。
即若sda3是一个lvm逻辑分区,比如/dev/rootvg/lv3,那么lv3就可以被动态放大。这样就解决了动态容量调整的问题。

二、lvm的基本概念

1.简介:

PV:物理卷,处于lvm的最底层,可以是整个物理磁盘,也可以是硬盘中的分区。
VG:卷组,将多个物理卷合起来就组成了卷组。组成同一个卷组的物理卷可以是同一硬盘的不同分区,也可以是不同硬盘的不同分区。
LV:逻辑卷。卷组是一个逻辑硬盘,硬盘必须分区之后才能使用,这个分区就叫逻辑卷,逻辑卷可以写入数据和格式化。
PE:物理区域,用来保存数据的最小单元,数据实际上都是写入PE,PE大小可以配置,默认是4MB。

在这里插入图片描述

2.建立lvm的步骤:

  • 首先需要把物理硬盘分区,也可以是整块物理硬盘。
  • 然后把物理分区建立成为物理卷(PV),也可以把整块硬盘都建立为物理卷。
  • 把物理卷整合成为卷组(VG)。卷组就已经可以动态调整大小了。可以将物理分区加入卷组,也可以把物理分区从卷组删除(可能造成数据丢失)。
  • 最后把卷组再划分为逻辑卷(LV),逻辑卷也是可以直接调整大小的。逻辑卷也需要格式化和挂载。

PV–>VG–>LV

3.物理卷管理

3.1 硬盘分区

​ 创建方式就是使用fdisk交互命令,不过需要注意的是分区的系统ID不再是Linux默认的分区ID号83了,而要改LVM的ID号8e

3.2 建立物理卷

命令pvcreate [设备文件名]

建立物理卷时,我们说即可以把整块硬盘都建立成物理卷,也可以把某个分区建立成物理卷。

如果要把整块硬盘都建立成物理卷,命令:pvcreate /dev/sdb

在我们的使用中,是要把分区建立成为物理卷,执行以下命令pvcreate /dev/sdb5

3.3 查看物理卷

命令1:pvscan

>>>pvscan
PV /dev/sdb5                      lvm2 [1.01 GiB]  
PV /dev/sdb6                      lvm2 [1.01 GiB]  
PV /dev/sdb7                      lvm2 [1.01 GiB]  
Total: 3 [3.03 GiB] / in use: 0 [0   ] / in no VG: 3 [3.03 GiB]

我们可以看到在我的系统中,/dev/sdb5-7这三个分区是物理卷。最后一行的意思是:总共3个物理卷[大小] / 使用了0个卷[大小] / 空闲3个卷[大小]

命令2:pvdisplay

该命令可以查看更加详细的物理卷信息。

>>>pvdisplay
"/dev/sdb5" is a new physical volume of "1.01 GiB"  
--- NEW Physical volume ---   
PV Name               /dev/sdb5 <-PV名  
VG Name               		 	<-属于的VG名,还没有分配,所以空白  
PV Size               1.01 GiB	<-PV的大小  
Allocatable           NO		<-是否已经分配  
PE Size               0   		<-PE大小,因为还没有分配,所以PE大小也没有指定  
Total PE              0 		<-PE总数  
Free PE               0 		<-空闲PE数  
Allocated PE          0 		<-可分配的PE数  
PV UUID               CEsVz3-f0sD-e1w0-wkHZ-iaLq-O6aV-xtQNTB	<-PV的UUID

3.4 删除物理卷

命令:pvremove

四、卷组管理

4.1 建立卷组

命令:vgcreate [选项] 卷组名 物理卷名

选项:

​ -s PE大小:指定PE的大小,单位可以是MB,GB,TB等。如果不写默认PE大小事4MB

我们有三个物理卷/dev/sdb5-7,我们先把/dev/sdb5和/dev/sdb6加入卷组,留着/dev/sdb7一会实验调整卷组大小,命令如下:

>>>vgcreate -s 8MB scvg /dev/sdb5 /dev/sdb6  
Volume group "scvg" successfully created

4.2 查看卷组

查看卷组的命令同样是两个,vgscan主要是查看系统中是否有卷组,而vgdisplay则是查看卷组的详细状态的。命令如下:

>>>vgscan
Reading all physical volumes.  This may take a while...
Found volume group "scvg" using metadata type lvm2
#scvg的卷组确实存在

>>>vgdisplay
--- Volume group ---
VG Name               scvg				->卷组名
System ID                
Format                lvm2
Metadata Areas        2   
Metadata Sequence No  1   
VG Access             read/write		->卷组访问状态  
VG Status             resizable			->卷组状态  
MAX LV                0 				->最大逻辑卷数  
Cur LV                0   
Open LV               0   
Max PV                0 				->最大物理卷数  
Cur PV                2 				->当前物理卷数  
Act PV                2   
VG Size               2.02 GiB         	->卷组大小  
PE Size               8.00 MiB			->PE大小  
Total PE              258				->PE总数  
Alloc PE / Size       0 / 0   			->已用PE数量/大小  
Free  PE / Size       258 / 2.02 GiB	->空闲PE数量/大小  
VG UUID               Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ

4.3 增加卷组容量

>>>vgextend scvg /dev/sdb7   
Volume group "scvg" successfully extended
#把/dev/sdb7物理卷也加入scvg卷组


>>>vgdisplay   --- Volume group ---  
VG Name               scvg  
System ID                
Format                lvm2  
Metadata Areas        3  
Metadata Sequence No  2   
VG Access             read/write  
VG Status             resizable  
MAX LV                0   
Cur LV                0   
Open LV               0   
Max PV                0
Cur PV                3   
Act PV                3   
VG Size               3.02 GiB		->卷组容量增加  
PE Size               8.00 MiB  
Total PE              387			->PE总数增加  
Alloc PE / Size       0 / 0     
Free  PE / Size       387 / 3.02 GiB  
VG UUID               Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ

4.4 减少卷组容量

>>>vgreduce scvg /dev/sdb7   
Removed "/dev/sdb7" from volume group "scvg"
#在卷组中删除/dev/sdb7物理卷

>>>vgreduce -a  
#删除所有的未使用物理卷

4.5 删除卷组

>>>vgremove scvg
  Volume group "scvg" successfully removed

卷组删除之后,才能删除删除物理卷。还要注意的是scvg卷组还没有添加任何的逻辑卷,那如果拥有了逻辑卷,记得先删除逻辑卷再删除卷组。还记得我刚说的吗?删除就是安装的反过程,每一步都不能跳过。

五、逻辑卷管理

5.1 建立卷组

命令lvcreate [选项] [-n 逻辑卷名] 卷组名

选项

  • ​ -L 容量:指定逻辑卷大小,单位MB,GB,TB等
  • ​ -l 个数:按照PE个数指定逻辑卷大小,这个参数需要换算容量,太麻烦
  • -n 逻辑卷名:指定逻辑卷名

那我们就建立一个1.5GB的userlv逻辑卷吧,建立命令如下:

>>>lvcreate -L 1.5G -n userlv scvg  
	Logical volume "userlv" created
#在scvg卷组中建立1.5GB的userlv逻辑卷

建立完逻辑卷之后,还要格式化和挂载之后逻辑卷才能正常使用。格式化和挂载命令和操作普通分区时是一样的,不过需要注意的是逻辑卷的设备文件名是/dev/卷组名/逻辑卷名,如我们的userlv 的设备文件名就是“/dev/scvg/userlv”,具体命令如下:

>>>mkfs -t ext4 /dev/scvg/userlv 
#格式化
>>>mkdir /disklvm
>>>mount /dev/scvg/userlv /disklvm/
#建立挂载点,并挂载
>>>mount 
...省略部分输出... 
/dev/mapper/scvg-userlv on /disklvm type ext4 (rw)
#已经挂载了

当然如果需要开机自动挂载,也要修改/etc/fstab文件。

5.2 查看逻辑卷

同样的查看命令是两个,第一个命令lvscan只能看到系统中是否拥有逻辑卷,命令如下:

>>>lvscan   
ACTIVE            '/dev/scvg/userlv' [1.50 GiB] inherit
#能够看到激活的逻辑卷,大小事1.5GB 

第二个命令:lvdisplay

>>>lvdisplay   
--- Logical volume ---   
LV Path                /dev/scvg/userlv		->逻辑卷设备文件名  
LV Name                userlv  				->逻辑卷名  
VG Name                scvg					->所属的卷组名  
LV UUID                2kyKmn-Nupd-CldB-8ngY-NsI3-b8hV-QeUuna  
LV Write Access        read/write  
LV Creation host, time localhost, 2013-04-18 03:36:39 +0800  
LV Status              available  
# open                 1  
LV Size                1.50 GiB				->逻辑卷大小  
Current LE             192  
Segments               2  
Allocation             inherit  
Read ahead sectors     auto  
- currently set to     256  
Block device           253:0

5.3 调整逻辑卷大小

命令lvresize [选项] 逻辑卷设备文件名

选项

  • -L 容量:安装容量调整大小,单位KB,GB,TB等。使用+代表增加空间,-号代表减少空间。如果直接写容量, 代表设定逻辑卷大小为指定大小。
  • -l 个数:按照PE个数调整逻辑卷大小`

我们先在/disklvm中建立点文件,一会调整完大小,我们看看数据是否会丢失:

>>>cd /disklvm/
>>>touch testf
>>>mkdir testd
>>>lslost+found  testd  testf

我们刚刚的userlv的大小事1.5GB,我们的scvg中还有1.5GB的空闲空间,那么增加我们的userlv逻辑卷的大小到2.5GB吧:

>>>lvresize -L 2.5G /dev/scvg/userlv   
Extending logical volume userlv to 2.50 GiB  
Logical volume userlv successfully resized
#增加user  lv逻辑卷的大小到2.5GB
#当然命令也可以这样写[root@localhost disklvm]# lvresize -L +1G    /dev/scvg/user  lv 

>>>lvdisplay   
--- Logical volume ---   
LV Path                /dev/scvg/userlv  
LV Name                userlv   
VG Name                scvg  
LV UUID                2kyKmn-Nupd-CldB-8ngY-NsI3-b8hV-QeU una   
LV Write Access        read/write  
LV Creation host, time localhost, 2013-04-18 03:36:39 +0800  
LV Status              available  
# open                 1  
LV Size                2.50 GiB        	->大小改变了  
Current LE             320  
Segments               3   
Allocation             inherit  
Read ahead sectors     auto  
- currently set to     256  
Block device           253:0

逻辑卷的大小已经改变了,但是好像有些问题啊:

>>>df -h /disklvm/
文件						系统容量	已用	可用	  已用%%   挂载点
/dev/mapper/scvg-userlv  1.5G      35M    1.4G   3% 	/disklvm

怎么/disklvm分区的大小还是1.5GB啊?刚刚只是逻辑卷的大小改变了,如果需要让分区使用这个新逻辑卷,我们还要使用resize2fs命令来调整分区的大小。不过这里就体现了LVM的优势,我们不需要卸载分区,直接就能调整分区的大小resize2fs命令如下:

命令:resize2fs [选项] [设备文件名] [调整的大小] 
选项:    
-f:强制调整
设备文件名:指定调整哪个分区的大小
调整的大小:指定把分区调整到多大,要加M,G等单位。如果不加大小,会使用整个分区

那么我们已经把逻辑卷调整到了2.5GB,这时我们就需要把整个逻辑卷都加入/disklvm分区,命令如下:

>>>resize2fs /dev/scvg/userlv  
resize2fs 1.41.12 (17-May  -2010)
Filesystem at /dev/scvg/userlv is mounted on /disklvm; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/scvg/userlv to 655360 (4k) blocks. 
The filesystem on /dev/scvg/userlv is now 655360 blocks long.
#已经调整了分区大小
>>>df -h /disklvm/
文件系统			容量	已用	可用	已用%% 挂载点
/dev/mapper/scvg-userlv  2.5G   35M  2.4G   2% /disklvm
#分区大小已经是2.5GB了
>>>ls /disklvm/
lost+found  testd  testf 
#而且数据并没有丢失

5.4 删除逻辑卷

命令lvremove 逻辑卷设备文件名

我们删除userlv这个逻辑卷,记得删除时要先卸载。命令如下:

>>>umount /dev/scvg/userlv  
>>>lvremove /dev/scvg/userlv

ng.
#已经调整了分区大小

df -h /disklvm/
文件系统 容量 已用 可用 已用%% 挂载点
/dev/mapper/scvg-userlv 2.5G 35M 2.4G 2% /disklvm
#分区大小已经是2.5GB了

ls /disklvm/
lost+found testd testf
#而且数据并没有丢失


#### 5.4 删除逻辑卷

**命令**:`lvremove 逻辑卷设备文件名`

我们删除userlv这个逻辑卷,记得删除时要先卸载。命令如下:

umount /dev/scvg/userlv
lvremove /dev/scvg/userlv


猜你喜欢

转载自blog.csdn.net/jiangSummer/article/details/105796970