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

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

我正在重新安排家里服务器上的一堆磁盘,发现自己想要将一堆 LVM 逻辑卷移动到另一个卷组。有没有简单的方法可以做到这一点?我看到提到了一个cplv命令,但这似乎要么是旧的,要么不是 Linux 上曾经可用的东西。

答案1

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

尽管 LVM 具有镜像功能,但您不能(理智地)使用它在卷组之间进行复制,因为镜像的两个分支必须位于同一个卷组 (vg) 上,并且关联不可破坏

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

答案2

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

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

答案3

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

或者,您也可以使用pvmove来移动物理范围。引用U&L:物理范围的目的

单个物理范围是 LVM 可以单独管理的最小磁盘空间单位。

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

摘要:我们创建vg1具有逻辑卷的卷组lv1,并vg2具有,并在中lv2复制。lv1vg2

创建文件。

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

在测试模式下运行合并命令。这会将 vg1 合并到 vg2 中。

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 镜像对lvconvertdest-pv参数指示lvconvert在 上创建镜像副本/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/lv1不活动。

lvchange -a n /dev/vg2/lv1

然后(测试模式)

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. 合并时, 中的逻辑卷必须处于非活动状态。拆分时,中vg1的逻辑卷必须处于非活动状态。在我们的例子中,这是。vg2vg1lv1

答案4

“pvmove -n lvol1 /dev/sdb1 /dev/sdc1”应该如果两个磁盘都在同一个卷组中,则可行……否则会失败并出现此错误

pvmove -v -n vm-100-disk-1 /dev/sda3 /dev/sdb1
  Physical Volume "/dev/sdb1" not found in Volume Group "pve".

如果 LV 很薄(例如:Proxmox 的默认值),它也可能会失败,因为 PVMove 假定为 LINEAR 类型。

lvdisplay -m

  --- Logical volume ---
  LV Path                /dev/pve/vm-100-disk-1
  LV Name                vm-100-disk-1
  VG Name                pve
  LV Pool name           data
  LV Size                100.00 GiB
  Current LE             25600
  Segments               1
   
  --- Segments ---
  Virtual extents 0 to 25599:
    Type        thin

而厚书卷:

  --- Logical volume ---
  LV Path                /dev/pve/swap
...   
  --- Segments ---
  Logical extents 0 to 2047:
    Type        linear
    Physical volume /dev/sda3
    Physical extents    0 to 2047

你也无法转换它

lvconvert --type linear /dev/pve/vm-100-disk-1 
  Operation not permitted on LV pve/vm-100-disk-1 type thin.

如果你尝试将精简卷移动到不同的 PV(磁盘)...它会给出错误消息

pvmove -v -n vm-100-disk-1 /dev/sda3 /dev/sdb1
  Creating logical volume pvmove0
  No data to move for pve.

因此,无论 LV 类型如何或 PV 位于何处(不同的 VG),OP 的解决方案是 1 - 在备用磁盘上创建 PV 2 - 使用 DD 移动数据,3 - 删除旧 LV,4 - 将新 LV 重命名为与旧 LV 相同的名称

# format disk partition as LVM
pvcreate /dev/sdX1

# add new PV to a new VG (or re-use an existing VG)
vgcreate VOLGROUP /dev/sdX1

# Create new LV
lvcreate -L 100G -n vm-100-disk-1-NEW VOLGROUP

# migrate data over, now it will be thick
dd if=/dev/pve/vm-100-disk-1 of=/dev/VOLGROUP/vm-100-disk-1-NEW bs=1M conv=fdatasync status=progress

# you may want to double check your new data is good first
# remove the old data
lvremove -v pve/vm-100-disk-1

# rename the new LV into the old name
lvrename /dev/VOLGROUP/vm-100-disk-1-NEW /dev/VOLGROUP/vm-100-disk-1

有关精简池内的精简卷和移动数据的更多信息

相关内容