是否有一种简单的方法将逻辑卷从一个卷组移动/复制到另一个卷组?(LVM2)


15

我正在家里的服务器上重新布置一堆磁盘,但我发现自己想将一堆LVM逻辑卷移至另一个卷组。有没有简单的方法可以做到这一点?我看到了一个cplv命令的提法,但这似乎很旧,或者不是Linux所能使用的。

Answers:


20

如果可以将逻辑卷安排在与源卷组其余部分不同的物理卷子集中(lvconvert sourcevg/sourcelv /dev/pv1 ...可能会有所帮助),则可以用于vgsplit将lv拆分为新的vg并将新的vg vgmerge合并到目标vg。

尽管LVM具有镜像功能,但是您不能(明智地)使用它在卷组之间进行复制,因为镜像的两条腿必须位于同一vg上并且关联不能断开

您可以使用将LVM卷复制到另一卷的方法复制到另一卷:创建适当大小的目标lv,然后使用复制内容dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M。如果源卷处于活动状态,则可以利用LVM进行一致的复制:首先使用制作源lv lvcreate -s的快照,然后复制快照。


1
出色的Gilles .... vgsplit / vgmerge可能还不错:在那之后,我可以使用pvmove将物理盘区移动到新磁盘,然后从VG中删除旧卷。
jkp 2010年

遗憾的是,由于范围大小不同,这最终对我不起作用。如果那对您来说不是一个问题,我建议使用这种方法最简单。
jkp 2010年

之后dd(如果您不急着放弃旧卷),请不要忘记更改新文件系统的UUID:tune2fs -U random / dev / targetvg / targetlv
midenok 2014年

2
pvmove -n lvol1 /dev/sdb1 /dev/sdc1

pvmove可以在物理卷之间移动数据:LVM管理员指南


10
但是不在卷组之间。
MattBianco 2013年

我再说一遍:这不适用于两个单独的卷组
kissgyorgy

首先是vgextend带有新pv的vg1,然后是pvmove您的lv到新pv,vgsplit即您vgmerge在vg2中的临时vg 。然后pvmove再次将lv转换为vg2原始pv,vgreducevg2读取中间pv。为了避免中间副本,您可以简单地首先将vg1合并到vg2,pvmovelv1中,然后vgsplit再合并来自vg2的vg1。这应该可以回答@ MattBianco和@kissgyorgy的异议,并且等同于@Gilles的解决方案,但可以替换快照和低级的ddpvmove
marcz

1

如在Debian的拉伸(9.0),即2.02.168-2的LVM的,有可能使用的组合,以做跨卷组的逻辑卷的副本vgmergelvconvertvgsplit。由于移动是复制和删除的组合,因此这也适用于移动。

另外,您可以使用pvmove来移动音量。

使用循环设备的完整自包含示例会话及其后 lvconvert

摘要:我们创建卷组vg1逻辑卷lv1,并vg2lv2,使副本lv1vg2

创建文件。

truncate pv1 --size 100MB
truncate pv2 --size 100MB

在文件上设置循环设备。

losetup /dev/loop1 pv1
losetup /dev/loop2 pv2

在循环设备上创建物理卷(初始化循环设备以供LVM使用)。

pvcreate /dev/loop1 /dev/loop2

创建卷组vg1vg2/dev/loop1/dev/loop2 分别。

vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2

创建逻辑卷lv1lv2vg1vg2分别。

lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2

在上创建ext4文件系统 lv1lv2

mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2

(可选)在 lv1以便以后可以检查副本是否正确创建。使其vg1不活动。

vgchange -a n vg1

在测试模式下运行merge命令。这合并lv1lv2

vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1

然后是真实的。

vgmerge -A y -l -v vg2 vg1

然后从创建RAID 1反射镜对lv1使用lvconvert。在<>参数告诉lvconvert使镜像副本 lv1_copy/dev/loop2

lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2

然后分裂镜子。现在是新的LV lv1_copy

lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1

使其vg2不活动。

vgchange -a n vg2

然后(测试模式)

vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1

真的

vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1

结果输出:

lvs
[...]
lv1        vg1       -wi-a-----  12.00m
lv1_copy   vg2       -wi-a-----  12.00m
lv2        vg2       -wi-a-----  12.00m

笔记:

1)这些命令大多数将需要以root用户身份运行。

2)如果两个卷组中逻辑卷的名称重复, vgmerge将拒绝继续。

3)合并时:

Logical volumes in `vg1` must be inactive

然后拆分:

Logical volume `vg2/lv1` must be inactive.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.