经过一番搜索,我认为 lvm2 重新条带化(即获取活动 LV 的所有范围并将它们均匀地重新分配到 VG 中所有当前 PV 上)是不可能的?
例如:
- 1 个卷组,其中包含 6 个基于 HDD 的物理卷和 1 个基于 SSD 的物理卷。
- 使用 lvcreate 选项在 SSD PV 上专门创建一个新的 LV,以应对高写入 IOPS。
- 后来,IOPS 下降,LV 占用了宝贵的 SSD 空间,因此应将其移动到 6 个物理卷,并进行条带化以跟上中等写入 IOPS。
(在同一个 VG 中混合使用 SSD 和 HDD 基本上是一件有趣的事情,因为 pvmove 可以将 LV 在线从 SSD 移动到 HDD 并移回,但不幸的是它无法在移动时进行条带化)
离线情况很简单:在硬盘上创建一个新的条带化 LV,将所有内容从旧内容复制到新内容,重命名,然后重新上线。但是有没有办法在线完成这个操作呢?
我能想到的最接近的办法是编写一个运行 pvmove 的 bash 脚本来分散范围,但这并不相同(因为范围大小高达 4 MiB,而典型的条带大小为 64 KiB)。
答案1
由于您澄清了您的设置,我将再次经历 md 层。
- 使用 mdadm 创建降级 Raid 1,其中包含原始 LV(在 SSD 上)
- 重新挂载该 md 设备,而不是 LV
- 将由 6 个 HD 组成的 LV 添加到该团队,让它稳定下来
- 从 md 设备中移除 SSD-LV(从而再次降级 md raid 1)
可选:卸载 md-device,改用挂载 HD-LV。
- 5.可能会导致短暂的停机时间(如果重新安装无法在线进行)。
但是:md-raid1 镜像比 pvmove 快得多 - 并且几乎不会中断服务就会导致新的布局。
答案2
恐怕您最好的方法是完全转储 VG 内的 LV;销毁 VG;使用新的条带化参数重新创建 VG;重新创建 LV;从转储中恢复 LV。