我一直在通过减少 lvmgroup 来减少 Centos 6.10 图像的大小。我已经能够运行这个命令了:
pvresize -tv --setphysicalvolumesize 1600G /dev/md125p2
它给了我以下错误信息:
/dev/md125p2: cannot resize to 409599 extents as later ones are allocated.
我试图了解如何构造 pvmove 命令以消除错误,但我不太明白这个概念。
这是此命令的输出 pvs -v --segments /dev/md125p
PV VG Fmt Attr PSize PFree Start SSize LV Start Type PE Ranges
/dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 0 384000 lv_mysql 0 linear /dev/md125p2:0-383999
/dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 384000 81947 0 free
/dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 465947 12800 lv_root 0 linear /dev/md125p2:465947-478746
/dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 478747 1998 lv_swap 0 linear /dev/md125p2:478747-480744
/dev/md125p2 vg_centos6svr lvm2 a--u 1.86t 320.11g 480745 7500 lv_home 0 linear /dev/md125p2:480745-488244
我知道移动命令必须看起来像这样:
pvmove --alloc anywhere /dev/md125p2 vg_centos6svr:yyyy-end
我只是不清楚如何计算 yyyy-end 部分。我认为这意味着移动从 384000 开始的 81947(块?),但是“yyyy”和“end”是什么?
减少 PV 需要将范围移动到所需大小之前的可用空间。在您的情况下,范围低于 409599。
首先,测试备份还原以确保可以在必要时恢复数据。
lvremove
您不需要的卷。pvmove
允许通过 LV 名称指定范围,并使用 + 表示法通过偏移量指定目标。提供目的地时,必须是 PV,而不是 VG。将一个 LV 移动到可用空间中的第一个扩展区。偏移量是要移动的段的大小。
再次获取新的段布局
pvs -v --segments
。pvmove
使用不同的 LV 和新的可用空间起始范围重复此操作。就个人而言,我更喜欢将数据 VG 与操作系统 VG 分开。但这是您的存储空间,您可以随意布置。
所以,我可以看到一切都已开启
/dev/md125p2
,我们想要减小这个 PV 的大小。您的输出
pvs -v --segments /dev/md125p
显示您SSize==81947
在lv_mysql
您的lv_root
. 这足以容纳物理布局中lv_root
的所有LV。所以,我建议的第一组数字是:
也就是说,将整个 移动
lv_home
到 之后直接开始的空闲空间lv_mysql
。然后重新运行
pvs -v --segments /dev/md125p
以查看修改后的数字,并将下一个块移动到剩余的任何可用空间中。这将有效地对您的 PV 进行碎片整理。
现在,
pvmove
可能有比我使用的更多的选项(也许指定 PV 而不是范围?)但我感到舒服的只是明确地使用块,所以我所有的源和目标都是形式/dev/<dev>:<Start>-<End>
或/dev/<dev>:<Start>+<SSize-1>
。我怀疑您的问题主要是缺少“源”规范的范围。
我已经看到了一些他们使用的例子
-end
——我不知道这是否应该起作用,但它会引出“什么结束?”的问题。所以我避免使用它并使用明确的块号。您只需要注意+
语法是加号,并且需要比 SSize 小一。额外的
好的,在源代码方面,您似乎可以
-name lv_home /dev/md125p2
作为简写/dev/md125p2:480745-488244
- 但还要注意,如果lh_home
被分割成多个范围,这将变得更加复杂(这是否意味着“所有片段?”) - 我想我仍然更喜欢数字接近。请注意,您在问题中的示例不包括 LV 名称,所以我不确定pvmove
从您给出的内容中会理解什么......