Answers:
如果可以将逻辑卷安排在与源卷组其余部分不同的物理卷子集中(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
的快照,然后复制快照。
dd
(如果您不急着放弃旧卷),请不要忘记更改新文件系统的UUID:tune2fs -U random / dev / targetvg / targetlv
pvmove -n lvol1 /dev/sdb1 /dev/sdc1
pvmove可以在物理卷之间移动数据:LVM管理员指南
vgextend
带有新pv的vg1,然后是pvmove
您的lv到新pv,vgsplit
即您vgmerge
在vg2中的临时vg 。然后pvmove
再次将lv转换为vg2原始pv,vgreduce
vg2读取中间pv。为了避免中间副本,您可以简单地首先将vg1合并到vg2,pvmove
lv1中,然后vgsplit
再合并来自vg2的vg1。这应该可以回答@ MattBianco和@kissgyorgy的异议,并且等同于@Gilles的解决方案,但可以替换快照和低级的dd
pvmove
如在Debian的拉伸(9.0),即2.02.168-2的LVM的,有可能使用的组合,以做跨卷组的逻辑卷的副本vgmerge
,lvconvert
和vgsplit
。由于移动是复制和删除的组合,因此这也适用于移动。
另外,您可以使用pvmove
来移动音量。
使用循环设备的完整自包含示例会话及其后
lvconvert
。
摘要:我们创建卷组vg1
逻辑卷lv1
,并vg2
用lv2
,使副本lv1
在vg2
。
创建文件。
truncate pv1 --size 100MB
truncate pv2 --size 100MB
在文件上设置循环设备。
losetup /dev/loop1 pv1
losetup /dev/loop2 pv2
在循环设备上创建物理卷(初始化循环设备以供LVM使用)。
pvcreate /dev/loop1 /dev/loop2
创建卷组vg1
并vg2
在/dev/loop1
和/dev/loop2
分别。
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
创建逻辑卷lv1
并lv2
在vg1
和vg2
分别。
lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2
在上创建ext4文件系统 lv1
和lv2
。
mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2
(可选)在 lv1
以便以后可以检查副本是否正确创建。使其vg1
不活动。
vgchange -a n vg1
在测试模式下运行merge命令。这合并lv1
为lv2
。
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.