简介
逻辑卷是一种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