如何将逻辑卷(lv)移动/复制到另一个卷组(vg)?

如何将逻辑卷(lv)移动/复制到另一个卷组(vg)?

基本上,我想移动/复制将几个逻辑卷 (lv) 合并到一个新的卷组 (vg)。新卷组驻留在一组新的物理卷上。有人知道如何安全地执行此操作而不损坏这些逻辑卷内的数据吗?

答案1

合并允许您合并两个 VG。您还可以使用移动在 VG 内移动数据,以及虚线分割如果您想返回多个 VG。

答案2

没有必要先将其复制到 .img 文件,只需先执行 lvcreate,然后直接将其复制过去:

lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume
lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name
dd if=/dev/volume-group/snapshot-name of=/dev/new-volume-group/new-logical-volume

答案3

好吧,我能够以自己的方式处理这种情况。以下是我采取的步骤:

1)对目标逻辑卷进行快照。

lvcreate --snapshot --name <the-name-of-the-snapshot> --size <the size> /dev/volume-group/logical-volume

注意:快照的大小可以根据您的需要而定。重要的是有足够的空间来捕获快照期间的更改。

2)使用以下方式创建快照内容的映像副本dd

dd if=/dev/volume-group/snapshot-name of=/tmp/backup.img

3)在目标(新)卷组中创建足够大小的新逻辑卷。

lvcreate --name <logical-volume-name> --size <size> the-new-volume-group-name

4)使用以下方法将数据从映像备份写入新的逻辑卷:dd

dd if=/tmp/backup.img of=/dev/new-volume-group/new-logical-volume

lvremove5)分别使用和删除快照和映像备份rm

就这些了,希望对大家有帮助:)

答案4

从 Debian 延伸版 (9.0) 中的 LVM(即 2.02.168-2)开始,可以使用 、 和 的组合跨卷组复制逻辑卷vgmergelvconvert由于vgsplit移动是复制和删除的组合,因此这也适用于移动。

或者,您也可以使用pvmove它来移动音量。

使用循环设备的完整独立示例会话 lvconvert如下。

总结:我们用逻辑卷lv1创建卷组vg1,用lv2创建卷组vg2,并在vg2中复制lv1。

创建文件。

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

在文件上设置循环设备。

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

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

pvcreate /dev/loop1 /dev/loop2

分别在/dev/loop1和/dev/loop2上创建卷组vg1和vg2。

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

在vg1和vg2上分别创建逻辑卷lv1和lv2。

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

在 lv1 和 lv2 上创建 ext4 文件系统。

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

可选地,在 lv1 上写一些内容,以便您稍后可以检查副本是否正确创建。使 vg1 处于非活动状态。

vgchange -a n vg1

在测试模式下运行合并命令。这会将 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

lv1然后使用创建 RAID 1 镜像对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.

相关内容