是否可以将逻辑卷从一个卷组整体移动到另一个卷组?
可以创建一个(或多或少)匹配的 lv 并复制数据,但是有没有办法单独使用 LVM 工具来做到这一点?
如果没有,是否存在理论上的原因或技术限制(范围大小)?
Gil*_*il' 16
卷组由整个物理卷组成。一个物理卷由许多盘区组成(盘区通常为 4MB);每个范围可能属于不同的逻辑卷。要将逻辑卷传输到不同的组,您不能简单地传输盘区,因为这可能会在源 VG 和目标 VG 之间拆分物理卷。
您可以做的是使用命令将一个或多个 PV 从源 VG 传输到目标 VG vgsplit
。您可以指定要传输的 PV,或哪个 LV(但一次只能传输一个)。如果指定一个 LV,则它和源 VG 中的其他 LV 必须位于不同的 PV 上。如果指定名称的 VG 不存在,则将创建目标 VG。
vgsplit -n source_group/volume_to_copy source_group target_group
vgsplit source_group target_group /dev/sdy99 /dev/sdz99
Run Code Online (Sandbox Code Playgroud)
您可能需要首先使用pvmove
将要移动的逻辑卷安排在单独的 PV 上。
如果您打算保留 VG 的物理边界并移动数据,则没有内置工具,但您可以制作镜像然后删除原始.
Fah*_*tha 11
As of the LVM in Debian stretch (9.0), namely 2.02.168-2, it's
possible to do a copy of a logical volume across volume groups using a
combination of vgmerge
, lvconvert
, and vgsplit
. Since a move is
a combination of a copy and a delete, this will also work for a move.
Alternatively, you can use pvmove
to just move the volume.
A complete self-contained example session using loop devices and
lvconvert
follows.
Summary: we create volume group vg1
with logical volume lv1
, and vg2
with lv2
, and make a copy of lv1
in vg2
.
Create files.
truncate pv1 --size 100MB
truncate pv2 --size 100MB
Run Code Online (Sandbox Code Playgroud)
Set up loop devices on files.
losetup /dev/loop1 pv1
losetup /dev/loop2 pv2
Run Code Online (Sandbox Code Playgroud)
Create physical volumes on loop devices (initialize loop devices for use by LVM).
pvcreate /dev/loop1 /dev/loop2
Run Code Online (Sandbox Code Playgroud)
Create volume groups vg1 and vg2 on /dev/loop1 and /dev/loop2 respectively.
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
Run Code Online (Sandbox Code Playgroud)
Create logical volumes lv1 and lv2 on vg1 and vg2 respectively.
lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2
Run Code Online (Sandbox Code Playgroud)
Create ext4 filesystems on lv1 and lv2.
mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2
Run Code Online (Sandbox Code Playgroud)
Optionally, write something on lv1 so you can later check the copy was correctly created. Make vg1 inactive.
vgchange -a n vg1
Run Code Online (Sandbox Code Playgroud)
Run merge command in test mode. This merges vg1 into vg2.
vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1
Run Code Online (Sandbox Code Playgroud)
And then for real.
vgmerge -A y -l -v vg2 vg1
Run Code Online (Sandbox Code Playgroud)
Then create a RAID 1 mirror pair from lv1
using lvconvert
. The
dest-pv
argument tells lvconvert
to make the mirror copy
on /dev/loop2
.
lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2
Run Code Online (Sandbox Code Playgroud)
Then split the mirror. The new LV is now lv1_copy
.
lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1
Run Code Online (Sandbox Code Playgroud)
Make vg2/lv1
inactive.
lvchange -a n /dev/vg2/lv1
Run Code Online (Sandbox Code Playgroud)
Then (testing mode)
vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1
Run Code Online (Sandbox Code Playgroud)
For real
vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1
Run Code Online (Sandbox Code Playgroud)
Resulting output:
lvs
[...]
lv1 vg1 -wi-a----- 12.00m
lv1_copy vg2 -wi-a----- 12.00m
lv2 vg2 -wi-a----- 12.00m
Run Code Online (Sandbox Code Playgroud)
NOTES:
1) 这些命令中的大多数都需要以 root 身份运行。
2) 如果两个卷组中的逻辑卷名称有任何重复, vgmerge
将拒绝继续。
3) 在合并时,逻辑卷vg1
必须处于非活动状态。并且在拆分时,vg2
属于的逻辑卷vg1
必须处于非活动状态。在我们的例子中,这是lv1
.
小智 6
我将提供我自己的:
umount /somedir/
lvdisplay /dev/vgsource/lv0 --units b
lvcreate -L 12345b -n lv0 vgtarget
dd if=/dev/vgsource/lv0 of=/dev/vgtarget/lv0 bs=1024K conv=noerror,sync status=progress
mount /dev/vgtarget/lv0 /somedir/
Run Code Online (Sandbox Code Playgroud)
如果一切正常,请删除源
lvremove vgsource/lv0
Run Code Online (Sandbox Code Playgroud)
小智 6
这个问题的准确答案是:“不,不可能(从逻辑上)将逻辑卷 (LV) 从一个卷组 (VG1)移动到另一个卷组 (VG2)。数据必须进行物理复制。”
原因:逻辑卷数据物理存储在分配给特定卷组的块设备(磁盘、分区)上。将逻辑卷从 VG1 移动/dev/sda
到/dev/sdb
VG2/dev/sdc
需要将数据从/dev/sda
至少两个块设备(或分区)/dev/sdb
之间/dev/sdc
进行物理复制操作。
PS 如果所有的LV数据都存储在物理卷上,可以完全排除在VG1之外,那么这个物理卷就可以分配给VG2。但是,它将把物理卷从一个卷组移动到另一个卷组,而不是移动逻辑卷。
归档时间: |
|
查看次数: |
48973 次 |
最近记录: |