![合并 LVM 卷组](https://linux22.com/image/43752/%E5%90%88%E5%B9%B6%20LVM%20%E5%8D%B7%E7%BB%84.png)
情况:
我的服务器在 LVM 中有 4 个 1TB 驱动器,如下所示。服务器是一个openvz硬件节点,有十几个openvz容器。此时每个容器仅使用一张磁盘。当时设计这个的目的是为了保持对磁盘 io 负载的大部分控制和分离。
# pvdisplay -s
Device "/dev/sdd1" has a capacity of 227.51 GiB
Device "/dev/sdc1" has a capacity of 427.51 GiB
Device "/dev/sdb1" has a capacity of 427.51 GiB
Device "/dev/sda2" has a capacity of 407.02 GiB
ATM 每个 PV 都设置有它自己的单独 VG:
# vgdisplay -s
"vg04" 931.51 GiB [704.00 GiB used / 227.51 GiB free]
"vg03" 931.51 GiB [504.00 GiB used / 427.51 GiB free]
"vg02" 931.51 GiB [504.00 GiB used / 427.51 GiB free]
"vg01" 931.02 GiB [524.00 GiB used / 407.02 GiB free]
在这些 VG 之上存在许多 LV:
# lvdisplay | grep Name
LV Name /dev/vg04/swap
VG Name vg04
LV Name /dev/vg04/vz
VG Name vg04
LV Name /dev/vg03/swap
VG Name vg03
LV Name /dev/vg03/vz
VG Name vg03
LV Name /dev/vg02/swap
VG Name vg02
LV Name /dev/vg02/vz
VG Name vg02
LV Name /dev/vg01/swap
VG Name vg01
LV Name /dev/vg01/root
VG Name vg01
LV Name /dev/vg01/vz
VG Name vg01
问题:
现在,一个容器已增长到我需要将其拆分为两个磁盘才能处理负载的大小。
本质上,我想将两个 LV - /dev/vg03/vz 和 /dev/vg04/vz 合并到一个分布在两个磁盘上的 LV 中。
我怎样才能最好地实现这一目标? vgmerge 能做到这一点吗? vgmerge 的联机帮助页相当简短,我无法找到有关其使用的任何更深入的讨论。
最后,我可以通过移动东西来实现目标,但有大量数据在起作用,而且这些是生产服务器,所以如果可能的话,我宁愿尽量避免这种情况。
答案1
如果我正确地阅读你的问题,你真正想做的是将两个 LV 合并到单独的 VG 上。这将需要您将数据从一个 LV 移动到另一个 LV,没有办法直接合并 LV。
所以你正在考虑某种停机时间。
您可以通过执行以下操作来限制它: LVA - 即将变得更大的逻辑卷 LVB - 即将被删除的逻辑卷
- rsync LVB 到 LVA 上的位置(最耗时)
- ** 停机开始 ** - 禁用远程访问
- 执行最终 rsync 以确保所有数据在 LVA 上都是最新的
- 卸载直播
- 将 LVA 上的同步数据移动到其所在位置,就像安装了 LVB 一样(这应该在 LVA 中,因此 mv 只是一个 inode 操作,因此非常短)。
- ** 停机时间结束 ** - 重新启用远程访问
- 闲暇的时候,吹掉直播,把VGB VGMerge成VGA
- 然后您可以扩展 LVA(也可能在线扩展文件系统)
答案2
虽然,您将能够合并两个 VG,但我认为如果不先删除并重新创建它,您就无法将 LV 转换linear
为LV。striped
在任何情况下,您都可以轻松地使用循环设备对几乎不占用任何磁盘空间的稀疏文件进行测试:
truncate -s500G a
truncate -s500G b
sudo losetup /dev/loop0 a
sudo losetup /dev/loop1 b
sudo pvcreate /dev/loop0
sudo pvcreate /dev/loop1
sudo vgcreate A /dev/loop0
sudo vgcreate B /dev/loop1
sudo lvcreate ...
答案3
我不知道如何在不破坏两个逻辑卷/dev/vg03/vz
和 的情况下做到这一点/dev/vg04/vz
,并在重新组织空间后创建一个新的 LV。
以下策略应该(我没有测试过)让您获得所需的配置,而其他卷不会停机。您可能需要在暂存盘上留出一些临时空间,最多可达要删除的最大 LV 的大小。
- 备份要删除的两个 LV 中的所有数据。
- 停用 LV (
lvchange -an
)。 - 在暂存空间 ( ) 上创建物理卷
pvcreate
。 - 将暂存空间添加到
vg03
(vgextend
)。将末尾的范围移动vg03
到暂存空间(用适当的分区说明符和正确的范围编号pvmove /dev/sdXX:MMM-NNN
替换)。移动要转换的范围以供新的条带 LV 使用。sdXX
MMM
NNN
- 调用
pvresize
以收缩您刚刚在最后释放了一些空间的卷组上的物理卷。 - 使用
fdisk
或parted
来收缩包含刚刚收缩的物理卷的分区。当您这样做时,为其余空间创建一个新分区。 - 再次调用
pvmove
将所有数据从暂存空间移回其原始(现已缩小)PV。 - 对 重复前面 4 个步骤
vg04
。此后,您不再需要暂存空间。 - 现在有两个新分区,上面什么也没有。将它们转换为物理卷 (
pvcreate
),并为这两个 PV 创建卷组 (vgcreate
)。 - 在新的 VG 上创建条带化 LV。