基本上,我想移动/复制将几个逻辑卷 (lv) 合并到一个新的卷组 (vg)。新卷组驻留在一组新的物理卷上。有人知道如何安全地执行此操作而不损坏这些逻辑卷内的数据吗?
答案1
答案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
lvremove
5)分别使用和删除快照和映像备份rm
。
就这些了,希望对大家有帮助:)
答案4
从 Debian 延伸版 (9.0) 中的 LVM(即 2.02.168-2)开始,可以使用 、 和 的组合跨卷组复制逻辑卷vgmerge
。lvconvert
由于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.