如果同一卷组内有 (2) 个精简池 (vg/pool1) 和 (vg/pool2),并且第一个池内有一个 LV,是否有 LVM 命令将该 LV 移动到第二个池? pvmove 会这样做吗?
或者,如果您有一个分布在两个不同 PV 上的精简 LVM 池,您是否可以轻松指定应使用 pvmove 命令将 LV X 的所有范围从 PV Y 移动到 Z?
答案1
我尝试使用 pvmove 来完成此操作,但没有成功。 Google 上有一个对源代码的修复的参考,该修复将使 pvmove 命令允许执行此操作,但在我的 CentOS 7 计算机上,它抱怨我的精简池,所以我不知道此修复是什么版本(如果有)我也不知道它是否有效。
也就是说,将 LV 从一个池移动到另一个池应该不会太难。事实上,我在两个位于不同 VG 的池之间移动了我的池(这在任何情况下都不重要)。这就是我所做的:
调用 LV my_logic_volume、VG first_vg 和 secondary_vg(这些在您的情况下是相同的)以及目标 my_logic_volume2。我在我的实例中更改了 LV 的名称;我不确定您是否可以在同一个 VG 中创建两个具有相同名称的 lvs,即使它们位于不同的精简池上。你可以尝试一下。无论如何,移动之后你总是可以做一个lvrename,很简单。
以下是事情的顺序:
# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
my_logical_volume first_vg Vwi-a-tz-- 10.74g thinpool0 31.39
thinpool1 second_vg twi-a-tz-- 1.20t 0.29
thinpool0 first_vg twi-a-tz-- 500.89g 86.87
请注意上面逻辑卷上的 LSize。这个命令:
# lvcreate -V 10.74g -n my_logical_volume2 -T second_vg/thinpool1
...创建适当数量的 LE 来匹配。只需使用与 lvs 显示的尺寸完全相同的尺寸即可。使用 lvdisplay 验证您已创建相同大小的逻辑卷;查看该Current LE
行(如果生成的 LE 计数较少,请删除然后重新创建 lv,但将 0.01 添加到您的大小 [-V 后面的数字]):
# lvdisplay first_vg/my_logical_volume
--- Logical volume ---
LV Path /dev/first_vg/my_logical_volume
LV Name my_logical_volume
VG Name first_vg
LV Pool name thinpool0
LV Size 10.74 GiB
Mapped size 31.39%
Current LE 2750
# lvdisplay second_vg/my_logical_volume2
--- Logical volume ---
LV Path /dev/second_vg/my_logical_volume2
LV Name my_logical_volume2
VG Name second_vg
LV Pool name thinpool1
LV Size 10.74 GiB
Mapped size 0.00%
Current LE 2750
所以现在只需从第一个 lv 复制到新创建的 lv 即可:
# time dd if=/dev/first_vg/my_logical_volume of=/dev/second_vg/my_logical_volume2 bs=4194304 conv=sparse
conv=sparse
对于 dd 至关重要,否则所有空间都将在您的目标精简池上配置,并且它将不再精简:-)。
验证您的新逻辑卷是否符合您的喜好。一旦 alles klarr,Kommissar 先生,如果您愿意,您可以重命名您的新 LV,删除原始的(您在处理它之前备份了它,对吧?),等等。