感谢支持
我们一直在努力

LVM逻辑卷管理器配置使用详解

简介 
逻辑卷是一种device mapper技术,即可以将一个或者多个底层块设备组织成一个逻辑设备,从而提供动态改变大小不停机情况下添加磁盘快照以及备份 等功能,使得对于磁盘的管理更加方便。

 

Logical Volume Manager (LVM),逻辑卷管理LVM是一个多才多艺的硬盘系统工具,无论在Linux或者其他类似的系统,都是非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦,但是LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘,可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷,LVM并不需要重启就可以让内核知道分区的存在。文章详细记录在PV/VG/LV中3个阶段的创建/添加/扩展/减小/删除等实战操作步骤,方便自己回顾一些基础用法,也希望能够帮助大家更好的理解LVM的原理。

  • 逻辑卷的组成结构 
    逻辑卷的组成如下图所示:

从上图中可以看出,整个逻辑卷的体系分为3个层次: 
底层的PV 
中层的VG 
最上层的LV
 
最底层的PV作为整个逻辑卷体系的最底层,可以理解为打上了可以被纳入逻辑卷管理体系的标签的整块磁盘或者磁盘上的某个分区;中间层的VG是逻辑卷的卷组,由一个或者多个PV组成,并且用同一标准进行分块,每一块被称为PE(Physical Extent)或者PP(Physical Partition),作为LVM的最小寻址单元;最上层的LV是从VG中划分出来的卷,并且作为设备文件,可以在其上面创建各种linux支持的文件系统。在LV层面也有一个概念LE(Logical Extent)。LE与PE一一对应。

  • 针对LVM底层PV的一些基本操作 
    对于底层的PV而言,操作的命令如下表所示:

命令 解释
pvchange 控制指定PV是否可以分派新空间的权限
pvck 检查PV的LVM元数据的一致性
pvcreate 将指定磁盘或分区转化为PV
pvdisplay 详细地查看系统当前的PV情况
pvmove 在同一VG卷组里面移动一个PV的数据到另一个PV里面
pvremove 删除PV标签,即移除PV
pvs 简略地查看系统当前的PV情况
pvresize 当PV对应的设备分区(如md软raid)扩容之后,利用该命令可以扩容PV
pvscan 扫描所有打着PV标签的设备文件

      一些pv操作的实验如下所示:

$ lsblk /dev/sdb /dev/sdd1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb    8:16   0   7G  0 disk 
sdd1   8:49   0   7G  0 part
  
创建pv 
$ pvcreate /dev/sdb /dev/sdd1
  Physical volume "/dev/sdb" successfully created
  Physical volume "/dev/sdd1" successfully created
  
查看pv
$ pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb        lvm2 ---  7.00g 7.00g
  /dev/sdd1       lvm2 ---  7.00g 7.00g
  
扫描pv
$ pvscan
  PV /dev/sdb          lvm2 [7.00 GiB]
  PV /dev/sdd1         lvm2 [7.00 GiB]
  Total: 2 [14.00 GiB] / in use: 0 [0   ] / in no VG: 2 [14.00 GiB]
  
检查pv元数据
$ pvck /dev/sdb
  Found label on /dev/sdb, sector 1, type=LVM2 001
  Found text metadata area: offset=4096, size=1044480
$ pvck /dev/sdd1
  Found label on /dev/sdd1, sector 1, type=LVM2 001
  Found text metadata area: offset=4096, size=1044480
  
删除pv
$ pvremove /dev/sdd1
  Labels on physical volume "/dev/sdd1" successfully wiped 

  • 针对LVM中层VG的一些基本操作 
    对于中层的VG而言,操作的命令如下表所示

命令 命令解释
vgcfgbackup 备份VG描述文件(默认/etc/lvm/backup,亦可自由指定)
vgcfgrestore 从备份的VG描述文件对VG元数据进行恢复
vgck 检查VG
vgchange 修改特定VG的属性,包括是否激活,uuid号,……
vgconvert 修改VG元数据格式,例如从LVM1改为LVM2
vgcreate 创建VG卷组
vgs 简略地查看系统VG卷组情况
vgdisplay 详细地查看系统VG卷组的使用情况
vgexport 将特定VG变为未知状态,用于迁移卷组到别的系统上面
vgimport 将未知状态的特定VG卷组变为正常状态,用于迁移卷组到别的系统上面
vgextend 将PV添加到特定VG中
vgimportclone 用于导入重复的卷组(例如某卷组的快照),并修改其UUID
vgmerge 在满足特定条件下,对多个卷组进行归并
vgmknodes 重新创建卷组设备目录以及逻辑卷特殊文件
vgreduce 将未使用的PV从特定VG中移除
vgremove 移除特定VG
vgrename 重命名指定VG的名称
vgsplit 将指定的PV从一个VG里面挪动到另一个VG里面
vgscan 扫描系统的VG

        一些vg的操作如下所示

$ pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb        lvm2 ---  7.00g 7.00g
  /dev/sdc1       lvm2 ---  4.00g 4.00g
  /dev/sdd1       lvm2 ---  7.00g 7.00g
  
创建vg0和vg1
$ vgcreate vg0 /dev/sdb /dev/sdd1
  Volume group "vg0" successfully created
$ vgcreate vg1 /dev/sdc1
  Volume group "vg1" successfully created
  
查看vg
$ vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg0    2   0   0 wz--n- 13.99g 13.99g
  vg1    1   0   0 wz--n-  4.00g  4.00g
  
扫描vg
$ vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "vg0" using metadata type lvm2
  Found volume group "vg1" using metadata type lvm2
  
从vg0中移除/dev/sdd1
$ vgreduce vg0 /dev/sdd1
  Removed "/dev/sdd1" from volume group "vg0"
  
/dev/sdd1添加到vg1当中
$ vgextend vg1 /dev/sdd1
  Volume group "vg1" successfully extended
  
/dev/sdd1从vg1挪动到vg0当中
$ vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg0    1   0   0 wz--n-  7.00g  7.00g
  vg1    2   0   0 wz--n- 10.99g 10.99g
$ vgsplit vg1 vg0 /dev/sdd1
  Existing volume group "vg0" successfully split from "vg1"
$ vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg0    2   0   0 wz--n- 13.99g 13.99g
  vg1    1   0   0 wz--n-  4.00g  4.00g 

  • 针对LVM上层LV的一些基本操作 
    对于上层的LV而言,操作命令如下表所示:

命令 命令解释
lvchange 修改指定LV的一些属性,包括是否是激活状态、是否只读……
lvconvert 转换指定LV的属性,从线性转化为镜像或者快照
lvcreate 创建LV
lvs 简略地查看系统内的LV情况
lvdisplay 详细地查看系统内的LV情况
lvextend 扩展指定LV的容量大小
lvm 管理LVM的一个shell工具
lvmconf LVM配置修改器
lvmconfig 查看LVM配置的工具
lvmdiskscan 扫描所有LVM2可见的设备
lvmdump 创建LVM的dump文件,用于诊断
lvmetad 缓存LVM元数据的守护程序
lvmpolld LVM操作命令的轮询守护程序
lvreduce 缩容指定的LV
lvremove 删除指定的LV
lvrename 重命名指定的LV
lvresize 调整指定LV的大小,即可以扩容也可以缩容
lvscan 扫描系统的LV

        一些LV的操作如下所示:

创建逻辑卷lv0
$ lvcreate -n lv0 -L 10G vg0
  
查看系统内的逻辑卷情况
$ lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 10.00g                                                   
  
逻辑卷的扩容
$ lvextend -L +2G /dev/vg0/lv0
  Size of logical volume vg0/lv0 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).
  Logical volume lv0 successfully resized.
  
同步文件系统(如果是ext文件系统,则使用resize2fs命令)
$ xfs_growfs /dev/vg0/lv0
meta-data=/dev/mapper/vg0-lv0    isize=256    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
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 2621440 to 3145728
  
逻辑卷的缩容(只针对ext文件系统)
如何缩减lvs?
$ 首先,取消挂载
umount /mnt/lv0
其次,缩减文件系统
$ resize2fs /dev/vg/lv0 50G    ext文件系统缩减到50G
xfs文件系统只能扩不能缩。。。
然后,缩减逻辑卷
$ lvreduce -L 50G /dev/vg/lv0
最后,再挂载
mount /dev/vg/lv0 /mnt/lv0
  
  
注意!
lvextend -r 选项,就直接resizefs了,因此,就不需要再resize2fs或者xfs_growfs了 

  • 关于LVM的快照功能 
    LVM快照是一种以空间换时间时间的方式制作的lvm卷副本。它只在lvm中工作,并只在源逻辑卷发生改变时占用快照卷的空间。如果源卷的变化达到1GB这么大,快照卷同样也会产生这样大的改变。因而,对于空间有效利用的最佳途径,就是总是进行小的修改。如果快照将存储空间消耗殆尽,我们可以使用lvextend来扩容。而如果我们需要缩减快照所占用卷的大小,可以使用lvreduce。实验如下:

       目标逻辑卷信息如下:

$ pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb   vg0  lvm2 a--  7.00g    0 
  /dev/sdd1  vg0  lvm2 a--  7.00g 1.99g
$ vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg0    2   1   0 wz--n- 13.99g 1.99g
$ lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 12.00g

       现在对逻辑卷lv0创建快照,命名为snaplv0

$ lvcreate -s -n snaplv0 -p r -L 1G /dev/vg0/lv0
  Logical volume "snaplv0" created.
$ vgs
  VG   #PV #LV #SN Attr   VSize  VFree   
  vg0    2   2   1 wz--n- 13.99g 1016.00m
$ lvs
  LV      VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0     vg0  owi-aos--- 12.00g                                                   
  snaplv0 vg0  sri-a-s---  1.00g      lv0    0.00

        这里/dev/vg0/lv0的挂载点为/mnt。往/mnt里面写入300MB的随机文件,再观察快照情况,可以看    到,快照对应的Data一项有所增长:

dd if=/dev/urandom of=/mnt/2.txt bs=1M count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 27.5877 s, 11.4 MB/s
ls
1.txt  2.txt  data
$ lvs
  LV      VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0     vg0  owi-aos--- 12.00g                                                   
  snaplv0 vg0  sri-a-s---  1.00g      lv0    29.42
 

        用snaplv0对逻辑卷进行恢复,注意恢复之前需要先将对应的逻辑卷卸载。恢复之后可以看到,原有的snaplv0消失,因此可以得出结论,LVM的快照是一次性的

umount /mnt
$ lvconvert --merge /dev/vg0/snaplv0 
  Merging of volume snaplv0 started.
  lv0: Merged: 71.0%
  lv0: Merged: 91.9%
  lv0: Merged: 100.0%
ls /dev/vg0
lv0
mount /dev/vg0/lv0 /mnt
ls /mnt
1.txt  data

       如果想要删除LVM快照,用lvremove命令,后面跟上快照设备文件的绝对路径即可,例如:

$ lvremove /dev/vg0/snaplv0

更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2017-05/143774p2.htm

  • LVM实验:利用元数据恢复PV,VG,LV 
    目的是利用通过命令vgcfgbackup命令生成的元数据文件,在磁盘数据文件没有被损坏的前提下,进行恢复。

       目标PV,VG,LV如下所示:

$ pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb   vg0  lvm2 a--  7.00g    0 
  /dev/sdd1  vg0  lvm2 a--  7.00g 1.99g
$ vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg0    2   1   0 wz--n- 13.99g 1.99g
$ lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-ao---- 12.00g
 

       lv0的挂载点是/mnt,使用xfs文件系统,存在如下文件:

ls -al /mnt
total 8
drwxr-xr-x   3 root root   29 May  6 17:08 .
dr-xr-xr-x. 18 root root 4096 Apr 25 23:05 ..
-rw-r--r--   1 root root  292 May  6 17:08 1.txt
drwxr-xr-x   2 root root    6 May  6 17:08 data
 

       首先确保元数据的备份文件存在(需要利用这个文件进行恢复),这里利用命令生成最新的备份。之后将lv0,vg0,PV通通删掉:

$ vgcfgbackup -f /root/vg0.bak vg0
  Volume group "vg0" successfully backed up.
umount /mnt
$ lvremove vg0/lv0
Do you really want to remove active logical volume lv0? [y/n]: y
  Logical volume "lv0" successfully removed
$ vgremove vg0
  Volume group "vg0" successfully removed
$ pvremove /dev/sdb /dev/sdd1
  Labels on physical volume "/dev/sdb" successfully wiped
  Labels on physical volume "/dev/sdd1" successfully wiped
$ lvmdiskscan
  /dev/sda1 [     953.00 MiB] 
  /dev/sda2 [       1.91 GiB] 
  /dev/sda3 [      27.16 GiB] 
  /dev/sdb  [       7.00 GiB] 
  /dev/sdc1 [       4.00 GiB] 
  /dev/sdd1 [       7.00 GiB] 
  1 disk
  5 partitions
  0 LVM physical volume whole disks
  0 LVM physical volumes
 

       下面进行恢复:首先恢复PV。通过查询元数据备份文件,找到每个PV设备对应的id号,将这个id号作为对应设备的uuid,重新创建

$ pvcreate -u d6byj1-LWmt-uYoo-urlW-43ub-yphK-ehsv9L \
   --norestorefile /dev/sdb
  Physical volume "/dev/sdb" successfully created
$ pvcreate -u Cqmq98-FPWc-sqnk-Weql-5w9l-IHrM-7efcSi  \
   --norestorefile /dev/sdd1
  Physical volume "/dev/sdd1" successfully created
$ pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb        lvm2 ---  7.00g 7.00g
  /dev/sdd1       lvm2 ---  7.00g 7.00g

 

       恢复完PV之后,创建一个“空”的VG,命名为需要恢复的目标VG的名称,这里为vg0

$ vgcreate -v vg0 /dev/sdb /dev/sdd1
    Adding physical volume '/dev/sdb' to volume group 'vg0'
    Adding physical volume '/dev/sdd1' to volume group 'vg0'
    Archiving volume group "vg0" metadata (seqno 0).
    Creating volume group backup "/etc/lvm/backup/vg0" (seqno 1).
  Volume group "vg0" successfully created
$ vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg0    2   0   0 wz--n- 13.99g 13.99g
 

       下一步,利用之前的备份文件,将LV恢复至这个空的VG当中,并激活LV

$ vgcfgrestore -f /root/vg0.bak vg0
  Restored volume group vg0
$ lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg0/lv0
  LV Name                lv0
  VG Name                vg0
  LV UUID                95c1sX-vLDO-1QYI-RaYj-BI8P-h1ka-xFwVoK
  LV Write Access        read/write
  LV Creation host, time CentOS7-front1, 2017-05-06 17:08:02 +0800
  LV Status              NOT available
  LV Size                12.00 GiB
  Current LE             3072
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  
$ lvchange -ay vg0/lv0
$ lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg0/lv0
  LV Name                lv0
  VG Name                vg0
  LV UUID                95c1sX-vLDO-1QYI-RaYj-BI8P-h1ka-xFwVoK
  LV Write Access        read/write
  LV Creation host, time centos7-front1, 2017-05-06 17:08:02 +0800
  LV Status              available
  # open                 0
  LV Size                12.00 GiB
  Current LE             3072
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

 

      将lv0重新挂载,可以看到数据了

mount /dev/vg0/lv0 /mnt
cd /mnt
ls
1.txt  data 

  • LVM实验:同一VG当中已存有数据的PE块的数据移动 
    利用LVM的线性存储机制,将同一个VG当中某个PV上面的PE数据内容移动到另一个PV的PE上面。

       这里依然使用上面实验用到的vg0和lv0,信息如下

ls -al /mnt
total 56
drwxr-xr-x   3 root root    29 May  6 17:08 .
dr-xr-xr-x. 18 root root  4096 Apr 25 23:05 ..
-rw-r--r--   1 root root 49186 May  6 23:11 1.txt
drwxr-xr-x   2 root root     6 May  6 17:08 data
$ pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb   vg0  lvm2 a--  7.00g    0 
  /dev/sdd1  vg0  lvm2 a--  7.00g 1.99g
$ pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               vg0
  PV Size               7.00 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              1791
  Free PE               0
  Allocated PE          1791
  PV UUID               d6byj1-LWmt-uYoo-urlW-43ub-yphK-ehsv9L
  
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               vg0
  PV Size               7.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              1791
  Free PE               510
  Allocated PE          1281
  PV UUID               Cqmq98-FPWc-sqnk-Weql-5w9l-IHrM-7efcSi
  
$ vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg0    2   1   0 wz--n- 13.99g 1.99g
$ vgdisplay
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  21
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               13.99 GiB
  PE Size               4.00 MiB
  Total PE              3582
  Alloc PE / Size       3072 / 12.00 GiB
  Free  PE / Size       510 / 1.99 GiB
  VG UUID               1RD1In-314z-awRk-wDfS-FIVL-cB7i-BzrEwv

 

       将/dev/sdb这个PV当中的第0个到第200个PE,移动到/dev/sdd1这个PV上面。由上述信息可以观察到,在/dev/sdd1上面已经有1281个PE被使用了,因此,这里将/dev/sdb的PE移动到编号为1282开始往后200个的位置

$ pvmove /dev/sdb:0-200 /dev/sdd1:1282-1482
  /dev/sdb: Moved: 0.0%
  /dev/sdb: Moved: 91.0%
  /dev/sdb: Moved: 100.0%
$ pvs
  PV         VG   Fmt  Attr PSize PFree 
  /dev/sdb   vg0  lvm2 a--  7.00g 804.00m
  /dev/sdd1  vg0  lvm2 a--  7.00g   1.21g
$ vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg0    2   1   0 wz--n- 13.99g 1.99g
$ pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               vg0
  PV Size               7.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              1791
  Free PE               201
  Allocated PE          1590
  PV UUID               d6byj1-LWmt-uYoo-urlW-43ub-yphK-ehsv9L
  
  --- Physical volume ---
  PV Name               /dev/sdd1
  VG Name               vg0
  PV Size               7.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              1791
  Free PE               309
  Allocated PE          1482
  PV UUID               Cqmq98-FPWc-sqnk-Weql-5w9l-IHrM-7efcSi
  
$ vgdisplay
  --- Volume group ---
  VG Name               vg0
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  24
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               13.99 GiB
  PE Size               4.00 MiB
  Total PE              3582
  Alloc PE / Size       3072 / 12.00 GiB
  Free  PE / Size       510 / 1.99 GiB
  VG UUID               1RD1In-314z-awRk-wDfS-FIVL-cB7i-BzrEwv

       通过pvs再次看到的内容发现/dev/sdb的PFree由0增加到了804.1m,而/dev/sdd1的PFree由1.99g下降到了1.21g,正是由于移动PE所造成的结果。

  • LVM实验:卷组从A机器迁移到B机器 
    实验环境和上面的环境相同:

$ pvs
  PV         VG   Fmt  Attr PSize PFree 
  /dev/sdb   vg0  lvm2 a--  7.00g 804.00m
  /dev/sdd1  vg0  lvm2 a--  7.00g   1.21g
$ vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg0    2   1   0 wz--n- 13.99g 1.99g
$ lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv0  vg0  -wi-a----- 12.00g                                                   
mount /dev/vg0/lv0 /mnt
ls -al /mnt
total 56
drwxr-xr-x   3 root root    29 May  6 17:08 .
dr-xr-xr-x. 18 root root  4096 Apr 25 23:05 ..
-rw-r--r--   1 root root 49186 May  6 23:11 1.txt
drwxr-xr-x   2 root root     6 May  6 17:08 data
 

       在迁移之前,先给需要迁移的VG(vg0)和LV(lv0)改个名字,这么做一是为了给需要迁移的卷组逻辑卷做个标识,二是防止卷组和逻辑卷和迁移的目标机上面的名称重复

$ vgrename vg0 migratevg0
  Volume group "vg0" successfully renamed to "migratevg0"
$ lvrename migratevg0/lv0 migratelv0   
  Renamed "lv0" to "migratelv0" in volume group "migratevg0"
$ vgs
  VG         #PV #LV #SN Attr   VSize  VFree
  migratevg0   2   1   0 wz--n- 13.99g 1.99g
$ lvs
  LV         VG         Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  migratelv0 migratevg0 -wi-ao---- 12.00g
 

       下一步将该逻辑卷取消挂载,以防止有数据再写入。取消挂载之后,再禁用该卷组,并将其设定为导出状

$ pvs
  PV         VG         Fmt  Attr PSize PFree 
  /dev/sdb   migratevg0 lvm2 a--  7.00g 804.00m
  /dev/sdd1  migratevg0 lvm2 a--  7.00g   1.21g
umount /mnt
$ vgchange -an migratevg0
  0 logical volume(s) in volume group "migratevg0" now active
$ vgexport migratevg0
  Volume group "migratevg0" successfully exported
 

 

       由于vg0由两个PV组成,一个是/dev/sdb,另一个是/dev/sdd1。考虑到拆卸整个/dev/sdd比较麻烦,因此这里采用拷贝的方式进行迁移。首先用dd命令将/dev/sdb和/dev/sdd1拷贝到单独的文件当中

dd if=/dev/sdb of=vg0sdb
14680064+0 records in
14680064+0 records out
7516192768 bytes (7.5 GB) copied, 122.591 s, 61.3 MB/s
dd if=/dev/sdd1 of=vg0sdd1
14680064+0 records in
14680064+0 records out
7516192768 bytes (7.5 GB) copied, 147.627 s, 50.9 MB/s
 

    下一步将vg0sdb和vg0sdd1这两个文件拷贝到目标机器上面。拷贝完毕之后,在目标机器上面利用/dev/loop机制,将这两个文件挂载为loop设备

$ losetup -P /dev/loop0 /root/vg0sdb 
$ losetup -P /dev/loop1 /root/vg0sdd1
 

    利用pvscan命令扫描目标机上面的PV设备,可以看到目标机已经识别到了/dev/loop设备的PV

$ pvscan
  PV /dev/loop0    is in exported VG migratevg0 [7.00 GiB / 804.00 MiB free]
  PV /dev/loop1    is in exported VG migratevg0 [7.00 GiB / 1.21 GiB free]
  PV /dev/sdg1     is in exported VG newvg0 [3.98 GiB / 1.97 GiB free]
  PV /dev/sdh1     is in exported VG newvg0 [4.98 GiB / 0    free]
  Total: 4 [22.96 GiB] / in use: 4 [22.96 GiB] / in no VG: 0 [0   ]
$ vgs
  VG         #PV #LV #SN Attr   VSize  VFree
  migratevg0   2   1   0 wzx-n- 13.99g 1.99g
  newvg0       2   1   0 wzx-n-  8.97g 1.97g
  
  $ vgdisplay
  --- Volume group ---
  VG Name               newvg0
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             exported/resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               8.97 GiB
  PE Size               16.00 MiB
  Total PE              574
  Alloc PE / Size       448 / 7.00 GiB
  Free  PE / Size       126 / 1.97 GiB
  VG UUID               EqQ4Cn-5ZUD-C2g9-PEpH-tYf8-NMsD-CL264M
  
  --- Volume group ---
  VG Name               migratevg0
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  27
  VG Access             read/write
  VG Status             exported/resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               13.99 GiB
  PE Size               4.00 MiB
  Total PE              3582
  Alloc PE / Size       3072 / 12.00 GiB
  Free  PE / Size       510 / 1.99 GiB
  VG UUID               1RD1In-314z-awRk-wDfS-FIVL-cB7i-BzrEwv

       下一步导入VG,并设置该VG为激活状态,便可以进行挂载使用了

$ vgimport migratevg0
  Volume group "migratevg0" successfully imported
$ vgchange -ay migratevg0
  1 logical volume(s) in volume group "migratevg0" now active
mount /dev/migratevg0/migratelv0 /mnt
ls -al /mnt
total 56
drwxr-xr-x   3 root root    29 May  6 05:08 .
dr-xr-xr-x. 19 root root  4096 Mar 20 11:20 ..
-rw-r--r--   1 root root 49186 May  6  2017 1.txt
drwxr-xr-x   2 root root     6 May  6 05:08 data
 

       如果想要卸载这种作为loop设备挂载的LVM,需要将loop驱动重新加载

umount /mnt
$ vgchange -an migratevg0
  0 logical volume(s) in volume group "migratevg0" now active
$ vgexport migratevg0
  Volume group "migratevg0" successfully exported
$ losetup -d /dev/loop0
$ losetup -d /dev/loop1
$ dmsetup remove_all       #这一步非常重要
$ modprobe -r loop
$ modprobe loop

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-05/143774.htm

赞(0) 打赏
转载请注明出处:服务器评测 » LVM逻辑卷管理器配置使用详解
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏