我正在尝试增加其中一个卷组的 PE 大小。
我错误地将其设置为 4M 来启动,但它应该是 32M。
当我尝试改变尺寸时
vgchange -s 32M the_vol
New extent size is not a perfect fit
vgdisplay 说:
vgdisplay
--- Volume group ---
VG Name the_vol
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 173
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 43
Open LV 41
Max PV 0
Cur PV 1
Act PV 1
VG Size 864.25 GiB
PE Size 4.00 MiB
Total PE 221247
Alloc PE / Size 103680 / 405.00 GiB
Free PE / Size 117567 / 459.25 GiB
VG UUID uh25Y8-TOWR-pqBj-NyPV-ca6t-ec1k-jlqm4g
我可以做些什么来将此更改变为 32 而无需重新创建/删除数据?
或者使其接近 32。
谢谢
答案1
您可以使用pvmove
来移动物理卷上分配的物理范围。您应该让任何逻辑卷在范围边界上开始和结束(使用 增长lvresize
)。底层物理卷大小也应该是新范围大小的精确倍数(使用 修复pvresize
)。
正如在超级用户答案对于相关问题,您可以使用类似这样的内容:
pvmove --alloc anywhere /dev/sdc1:103680-221247 /dev/sdc1:0-103679
将扩展区移动103680-221247
到0-103679
物理卷上/dev/sdc1
。您可能需要分步移动段。使用pvdisplay --maps /dev/sdc1
显示物理卷上分配了哪些扩展区/dev/sdc1
。
请注意,范围大小不应影响 I/O 性能(在 LVM2 上),只有 LVM 工具本身的性能和 LVM 组件的最大大小会受到影响。
答案2
这是可能的,但很困难。如果可以选择,重新创建 VG 是一个更好的选择。
但是,这对我来说不是一个选择,所以这里是我如何将 PE 大小从 4MB 更改为 32MB 的。
- 首先,将 PV 缩小到可以被目标 PE 大小整除的大小,即:
pvresize /dev/sdb --setphysicalvolumesize 3778436m
- 接下来,使用 将所有 LV 的大小调整为可被预期的 PE 大小整除的大小
lvresize
,即:lvresize /dev/libvirtstorage/debian-8.7.1-amd64-netinst.iso --size 256
- 接下来是确保组成每个图像的各个部分与新 PE 对齐。这一点不太确定,因为您基本上必须对 VG 进行“碎片整理”。
我使用了“lvm2defrag“工具(您不需要在机器本身上运行它,您可以在任何安装了 PHP 的机器上运行它,它只会生成所需的命令) - 此后,如果您的总卷大小、LV 片段大小和可用空间都可以被目标 PE 大小整除,那么您应该能够更改 PE 大小:
vgchange -s 32m the_vol
整个过程无需停机,整个 VG 在此期间继续运行。还有一个需要注意的陷阱:注意和
之间的区别,LVM 命令将小写字母解释为 MiB,将大写字母 M 解释为 MB。 32m
32M
m
答案3
仅当无需移动现有物理扩展即可完成更改时,您才可以更改卷组的物理扩展大小。否则,您会收到上面发布的错误。
唯一的其他选择是重新创建具有正确大小的卷组。
引用手册页:
一旦设置了此值,除非重新创建卷组(这将涉及备份和恢复任何逻辑卷上的数据),否则很难更改它。但是,如果不需要移动任何区段来应用新值,则可以使用 vgchange -s 进行更改。