LVM逻辑卷-创建、扩容、缩减、迁移、快照

简介:

LVM逻辑卷

逻辑卷管理工具,允许在多个物理设备之间重新组织文件系统,包括重新设定文件系统的大小

PE  物理盘区,类似于磁盘中的block

逻辑卷的基本存储单位就是PE

wKiom1mtGSCzpPPDAALwSFX6kJE225.png

dm:device mapper将一个或多个底层块设备组织成一个逻辑设备的模块

设备名:/dev/dm-#  //系统自动分配,常用软链接定义

软链接:两种方式表示

/dev/mapper/卷组-逻辑卷

/dev/卷组/逻辑卷

LVM可以弹性的修改容量



基本概念:

pv  //物理卷

vg  //卷组

lv  //逻辑卷

本次实验使用centos6版本,并在vmware虚拟机上操作

实验一 创建逻辑卷

第1步:准备三个磁盘sdb、sdc、sdd,创建物理卷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@CentOs6 ~] #fdisk /dev/sdb   #使用fdisk命令对磁盘sdb分区
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1                1         132     1060258+  8e  Linux LVM
#因为是实验这里只分1G容量,system类型修改成LVM
dd  if = /dev/sdb  of= /dev/sdc  bs=1 count=512
dd  if = /dev/sdb  of= /dev/sdd  bs=1 count=512
#将sdb的分区表复制到sdc和sdd,这样三块磁盘分区一致
partx -a  /dev/sd {b,c,d}   #同步磁盘与内存信息
lsblk   #检查同步结果
#上面步骤,我们从三块磁盘取出三个大小、类型一样的分区/dev/sdb1、 /dev/sdc1和/dev/sdd1
[root@CentOs6 ~] #pvcreate  /dev/sd{b,c,d}1  #创建3个物理卷pv
[root@CentOs6 ~] #pvs  #查看物理卷摘要信息
   PV         VG   Fmt  Attr PSize PFree   #VG为空,是因为我们还没创建卷组
   /dev/sdb1        lvm2 ---- 1.01g 1.01g
   /dev/sdc1        lvm2 ---- 1.01g 1.01g
   /dev/sdd1        lvm2 ---- 1.01g 1.01g
[root@CentOs6 ~] #pvdisplay  /dev/sdb1   
#pvdisplay显示详细的物理卷信息,此处只列出一个物理卷分析
   "/dev/sdb1"  is a new physical volume of  "1.01 GiB"
   --- NEW Physical volume ---
   PV Name                /dev/sdb1   #物理卷名称
   VG Name                            #因为没加入卷组,所以此处为空
   PV Size               1.01 GiB   #物理卷容量,跟我们规划的一样
   Allocatable           NO              #因为还未加入卷组,所以下面选项为空
   PE Size               0            #PE是物理卷的基本容量单位
   Total PE              0
   Free PE               0
   Allocated PE          0
   PV UUID               iRkKni-iG3a-U38w-bXGn-aIGV-bP14-Pua8bc

第2步:创建卷组,其容量为各个物理卷的总和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@CentOs6 ~] #vgcreate v-group /dev/sd{b,c,d}1  
#创建包含3个分区的卷组,名称为v-group
   Volume group  "v-group"  successfully created
[root@CentOs6 ~] #vgs  #显示卷组的摘要信息
   VG       #PV #LV #SN Attr   VSize VFree
   v -group   3   0   0 wz--n- 3.02g 3.02g
[root@CentOs6 ~] #vgdisplay   #显示卷组的详细信息
   --- Volume group ---
   VG Name                v -group          #卷组名称         
   VG Access              read /write   #卷组的访问形式是读写
   VG Status             resizable        #卷组容量大小可调
   MAX LV                0
   Cur LV                0
   Open LV               0
   Max PV                0             #未创建逻辑卷,所以包含LV选项的全为0
   Cur PV                3
   Act PV                3
   VG Size               3.02 GiB      #卷组容量,3个分区容量的累加
   PE Size               4.00 MiB      #PE是基本容量单位,默认大小为4MiB
   Total PE              774             #PE总数量,其与PE大小相乘就是VG大小
   Alloc PE / Size       0 / 0           #已经分配给逻辑卷的PE
   Free  PE / Size       774 / 3.02 GiB  #剩余PE,因为还没有创建逻辑卷
   VG UUID               aD3P8j-tNnP-KyXK-shWB-caTh-sCq8-j8B4qd

第3步:创建逻辑卷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@CentOs6 ~] #lvcreate -n logical-v -L 2G v-group  #创建2G大小的逻辑卷
   Logical volume  "logical-v"  created.
[root@CentOs6 ~] #lvs  #显示逻辑卷的摘要信息
   LV        VG      Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
   logical- v  v -group -wi-a----- 2.00g                                                    
[root@CentOs6 ~] #lvdisplay   
   --- Logical volume ---
   LV Path                 /dev/v-group/logical-v   #逻辑卷的物理路径
   LV Name                logical- v        #逻辑卷名称
   VG Name                 v -group      #逻辑卷所在的卷组
   LV UUID                zEU9qJ-fP3E-H2Dv-iULd-06Gy-yzH4-EnIwdw
   LV Write Access         read /write
   LV Creation host,  time  CentOs6.gao, 2017-08-12 09:42:53 +0800
   LV Status              available    #逻辑卷可用
   # open                 0
   LV Size                2.00 GiB    #逻辑卷大小2G
   Current LE             512          #当前使用的
#至此逻辑卷就创建完成。使用上文提到的命令查看物理卷、卷组信息会发现,创建完lv后好多信息条目都更新了
[root@CentOs6 ~] #ll /dev/v-group/logical-v 
lrwxrwxrwx. 1 root root 7 Aug 12 09:42  /dev/v-group/logical-v  -> .. /dm-0
#lv名称其实是软链接,指向的是我们前文说过的dm-#

第4步:将lv当作一块独立磁盘进行格式化、挂载、读写操作

1
2
3
4
[root@CentOs6 ~] #mkdir /mnt/lv  #创建挂载点目录
[root@CentOs6 ~] #mkfs.ext4 /dev/v-group/logical-v  #格式化成ext4文件系统 
[root@CentOs6 ~] #mount /dev/v-group/logical-v /mnt/lv/  #挂载
最后就可以进行读写操作了

整个过程是按照下述流程操作:

准备磁盘--创建物理卷--创建卷组--创建逻辑卷


实验二 扩展逻辑卷、缩减逻辑卷

扩展逻辑卷对用户是透明的,lv一直是挂载状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@CentOs6 ~] #lvextend -L +256M /dev/v-group/logical-v
#对逻辑卷logical-v扩展256M的容量,前提是卷组还有足够的剩余空间
[root@CentOs6 ~] #df -h /dev/mapper/v--group-logical--v 
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/v--group-logical--v
                       2.0G  3.1M  1.9G   1%  /mnt/lv
#df -h查看发现,lv实际大小还是2G,并未增加256M,是因为文件系统未同步
[root@CentOs6 ~] #resize2fs  /dev/mapper/v--group-logical--v 
root@CentOs6 ~] #df -h /dev/mapper/v--group-logical--v 
#同步文件系统,因为我们实验用的是ext4文件系统,所以使用sesize2fs来同步,如果是xfs文件系统则需要使用命令xfs_growfs来同步
#我们每次对lv进行扩展操作后都要记得同步文件系统
#最后再次df检查
[root@CentOs6 ~] #lvextend  -r -L +256M /dev/v-group/logical-v
#上述命令更简单,在扩展lv同时同步文件系统,一步搞定
#只要加上 -r 选项
如果还有一个分区想要加入vg,比如 /dev/sdb2 ,可以使用下述方法:
pvcreate  /dev/sdb2
vgextend  v -group  /dev/sdb2
#只需要这两步即可

逻辑卷缩减其实就是将一个逻辑卷占用的PE空间缩减,这样做一般会有风险,因为缩减的空间可能有数据。所以如果一定要缩减的话建议先备份。本实验环境无所谓

第1步:取消挂载逻辑卷

1
2
[root@CentOs6 ~] #umount /mnt/lv/
[root@CentOs6 ~] #df  #已经查看不到lv信了

第2步:检查文件系统完整性 fsck -f

1
2
[root@CentOs6 ~] #e2fsck -f /dev/v-group/logical-v 
#这一步必须得做

第3步:缩减文件系统

1
2
[root@CentOs6 ~] #resize2fs  /dev/v-group/logical-v  1G
#缩减文件系统容量为1G

第4步:缩减逻辑卷

1
2
3
[root@CentOs6 ~] #lvreduce -L 1G /dev/v-group/logical-v
#缩减逻辑卷容量为1G
#缩减fs或者lv时都会有警告提示,所以要考虑清楚再行动,做实验就没关系了

第5步:重新挂载 

1
2
3
[root@CentOs6 ~] #mount /dev/v-group/logical-v  /mnt/lv/
[root@CentOs6 ~] #df -h
#最后挂载,df检测,此外还可以使用vgdisplay、lvdisplay检查逻辑卷是否缩减

注意:

xfs文件系统不支持缩减


实验三 迁移卷组到新系统

源设备操作:

1、取消挂载卷组中的所有逻辑卷

1
2
[root@CentOs6 ~] #umount /mnt/lv/
#取消本机挂载

2、确保卷组名跟目标设备不一样

1
2
3
4
5
6
7
[root@CentOs6 ~] #vgrename v-group newvg0
   Volume group  "v-group"  successfully renamed to  "newvg0"
#修改卷组名为newvg0,或者提前查看目标设备的卷组名称,只要不一样就行
#只要卷组名不一样就行,逻辑卷名称可改也可不改
[root@CentOs6 ~] #lvrename  /dev/newvg0/logical-v  newlv0
   Renamed  "logical-v"  to  "newlv0"  in  volume group  "newvg0"
#逻辑卷改名为newlv0

3、设置逻辑卷为非活动状态,也就是说逻辑卷现在不可用

1
2
3
4
5
[root@CentOs6 ~] #vgchange  -a n newvg0 
   0 logical volume(s)  in  volume group  "newvg0"  now active
#卷组中0个逻辑卷是活动状态,-a n表示使逻辑卷无效
[root@CentOs6 ~] #lvdisplay 
  LV Status              NOT available   #LV无效

4、导出卷组

1
2
3
4
5
[root@CentOs6 ~] #vgexport  newvg0
   Volume group  "newvg0"  successfully exported
#导出卷组
[root@CentOs6 ~] #pvscan   #扫描磁盘物理卷
[root@CentOs6 ~] #pvdisplay  #会发现物理卷对应的卷组都是exported状态

5、拆除硬盘,换到目标设备上

在vmware上我们把磁盘文件挂载到目标设备上

我的是下面这三个虚拟机磁盘文件

CentOs6.9\CentOS6.9-3.vmdk

CentOs6.9\CentOS6.9-4.vmdk

CentOs6.9\CentOS6.9-5.vmdk

将这三个文件添加到目标设备上,我的目标设备是centos7

目标设备操作:

1、扫描发现磁盘

1
2
3
[root@CentOS7 ~] #echo '- - - ' > /sys/class/scsi_host/host2/scan 
[root@CentOS7 ~] #lsblk
#扫描磁盘,然后检查卷组是否存在

2、扫描物理卷,然后导入卷组

1
2
3
4
5
6
7
8
[root@CentOS7 ~] #pvscan  #扫描物理卷
   PV  /dev/sdb1     is  in  exported VG newvg0 [1.01 GiB / 8.00 MiB  free ]
   PV  /dev/sdc1     is  in  exported VG newvg0 [1.01 GiB / 1.01 GiB  free ]
   PV  /dev/sdd1     is  in  exported VG newvg0 [1.01 GiB / 1.01 GiB  free ]
   Total: 3 [3.02 GiB] /  in  use: 3 [3.02 GiB] /  in  no VG: 0 [0   ]
[root@CentOS7 ~] #vgimport newvg0   #导入卷组,使用新组名
   Volume group  "newvg0"  successfully imported
[root@CentOS7 ~] #vgdisplay newvg0   //检查卷组信息

3、激活逻辑卷

1
2
3
4
5
6
[root@CentOS7 ~] #vgchange  -a y newvg0 
   1 logical volume(s)  in  volume group  "newvg0"  now active
[root@CentOS7 ~] #lvdisplay 
#激活逻辑卷,并查看结果,这里我只做了一个逻辑卷
#还可以使用blkid、vgdisplay、pvdisplay等命令查看结果
#其实还可以在原设备逻辑卷中提前存放一些数据,等迁移完成到目标设备后,我们再查看逻辑卷内的数据是否还存在。


实验四 移除卷组中的磁盘

第1步:将要移除的磁盘的数据移到其他逻辑卷

把数据搬到同一卷组其他逻辑卷,要保证卷组有足够的空间,搬的是存储空间,里面可能有数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@CentOS7 ~] #pvmove /dev/sdb1 
  #把/dev/sdb磁盘PE空间迁移至其他逻辑卷,本实验1个磁盘上建1个分区
[root@CentOS7 ~] #pvdisplay  /dev/sdb1   #sdb已经没有空间在使用了
  --- Physical volume ---
   PV Name                /dev/sdb1
   VG Name               newvg0
   PV Size               1.01 GiB / not usable 3.41 MiB
   Allocatable            yes 
   PE Size               4.00 MiB
   Total PE              258
   Free PE               258
   Allocated PE          0
   PV UUID               iRkKni-iG3a-U38w-bXGn-aIGV-bP14-Pua8bc
#还可以查看其他逻辑卷的PE free空间减少,就是因为接收了sdb1转移的PE

第2步:从卷组中移除物理卷

1
2
3
[root@CentOS7 ~] #vgreduce newvg0 /dev/sdb1   #移除sdb
   Removed  "/dev/sdb1"  from volume group  "newvg0"
[root@CentOS7 ~] #vgdisplay    #查看信息

第3步:从物理卷中移除

1
2
3
4
[root@CentOS7 ~] #pvremove  /dev/sdb1   #移除
   Labels on physical volume  "/dev/sdb1"  successfully wiped.
[root@CentOS7 ~] #pvdisplay  
#移除物理卷后,就看不到原物理卷信息了


实验五 逻辑卷管理快照

快照是特殊的逻辑卷,快照存放的是改过的文件的最早的版本,只是备份修改的文件。快照与对应的逻辑卷必须在同一个卷组,而且恢复时的文件容量不能超过快照大小

测试环境使用快照较多

生产环境会消耗更多的性能,所以一般不用


第1步:创建快照

1
2
3
4
5
6
7
[root@CentOS7 ~] #lvcreate  -L 100M -s -n snap -p r /dev/newvg0/newlv0     
   Using default stripesize 64.00 KiB.
   Logical volume  "snap"  created.
#创建快照,-s表示快照,-L指定快照容量,-n是快照名,-p r快照权限只读
#我们对逻辑卷newlv0做快照
[root@CentOS7 ~] #lvdisplay
#此命令可以查看逻辑卷快照信息

第2步:挂载快照

1
2
3
4
[root@CentOS7 ~] #mkdir /mnt/snap
[root@CentOS7 ~] #mount /dev/newvg0/snap /mnt/snap/
mount /dev/mapper/newvg0-snap  is write-protected, mounting  read -only
#快照挂载到一个挂载点,挂载时提示写保护,但还是成功挂载,可以df查看

第3步:使用快照恢复数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
上述步骤对逻辑卷newlv0做了快照,而newlv0挂载到了 /mnt/lv 目录下,现在把此目录下的文件newlv0删除然使用快照恢复
[root@CentOS7 ~] #rm -f /mnt/lv/newlv0   #删除原文件
[root@CentOS7 ~] #umount /dev/newvg0/snap
[root@CentOS7 ~] #umount /dev/newvg0/newlv0
#首先取消挂载逻辑卷与快照
[root@CentOS7 ~] #lvconvert  --merge /dev/newvg0/snap 
   Merging of volume newvg0 /snap  started.
   newlv0: Merged: 100.00%
#使用快照恢复数据,此命令会自动识别逻辑卷的路径
[root@CentOS7 ~] #mount /dev/newvg0/newlv0 /mnt/lv
[root@CentOS7 ~] #ll /mnt/lv/                     
-rw-r--r--. 1 root root     0 Aug 12 14:45 newlv0
#最后我们再把逻辑卷挂载就可以看到被删除的文件了
#恢复完数据快照逻辑卷会自动消失

第4步:实验结束删除快照和逻辑卷(已经提前给逻辑卷newlv0创建一个快照snap-data,也要删除)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@CentOS7 ~] #umount /mnt/snap/
[root@CentOS7 ~] #umount /mnt/lv
[root@CentOS7 ~] #umount /mnt/lv1/
[root@CentOS7 ~] #lvremove /dev/newvg0/snap-data 
[root@CentOS7 ~] #lvremove  /dev/newvg0/newlv0
[root@CentOS7 ~] #lvremove  /dev/newvg0/newlv1
#先取消挂载,然后移除所有逻辑卷,包括快照
[root@CentOS7 ~] #vgs
   VG      #PV #LV #SN Attr   VSize VFree
   newvg0   3   0   0 wz--n- 4.01g 4.01g
#此时vg内的逻辑卷为空
[root@CentOS7 ~] #vgremove  newvg0 
   Volume group  "newvg0"  successfully removed
#删除卷组,这时候vgs查看都是空
[root@CentOS7 ~] #pvremove  /dev/sdc1
[root@CentOS7 ~] #pvremove  /dev/sdd1
[root@CentOS7 ~] #pvremove  /dev/sdd2
#删除物理卷,pvs就看不到任何信息了
至此所有的快照、逻辑卷、卷组和物理卷全部清空

删除逻辑卷顺序:

快照--逻辑卷--卷组--物理卷




本文转自  a_pan  51CTO博客,原文链接:http://blog.51cto.com/panpangao/1962595

相关文章
|
6月前
|
存储 Linux
|
数据可视化 Linux
LVM 扩容方法
LVM 扩容方法
|
数据可视化 Linux
LVM扩容
LVM扩容
4063 0
LVM扩容