如果我在同一个卷组中有 (2) 个精简池 (vg/pool1) 和 (vg/pool2),第一个池中有一个 LV,是否有 LVM 命令将该 LV 移动到第二个池?pvmove 会这样做吗?
或者,如果您有一个分布在两个不同 PV 上的精简 LVM 池,您能否使用 pvmove 命令轻松指定 LV X 的所有范围都应从 PV Y 移动到 Z?
我尝试使用 pvmove 来做到这一点,但没有奏效。谷歌上有一个对源代码的修复的参考,该修复可以使 pvmove 命令允许这样做,但在我的 CentOS 7 机器上,它抱怨我的精简池,所以我不知道是什么版本,如果有的话,这个修复是包括在。我也不知道它是否有效。
也就是说,将 LV 从一个池移动到另一个池应该不会太难。事实上,我在不同 VG 中的两个池之间移动了我的池(这在任何情况下都无关紧要)。这是我所做的:
调用 LV my_logical_volume、VGs first_vg 和 second_vg(这些在您的情况下是相同的)以及目标 my_logical_volume2。在我的实例中,我更改了 LV 的名称;我不确定您是否可以在同一个 VG 中创建两个同名的 lv,即使它们位于不同的精简池中。你可以试试看。无论如何,在移动之后你总是可以做一个lvrename,简单的peasy。
这是事情的顺序:
# 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
Run Code Online (Sandbox Code Playgroud)
注意上面逻辑卷上的 LSize。这个命令:
# lvcreate -V 10.74g -n my_logical_volume2 -T second_vg/thinpool1
Run Code Online (Sandbox Code Playgroud)
...创建要匹配的适当数量的 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
Run Code Online (Sandbox Code Playgroud)
所以现在只需从第一个 lv 复制到新创建的一个:
# time dd if=/dev/first_vg/my_logical_volume of=/dev/second_vg/my_logical_volume2 bs=4194304 conv=sparse
Run Code Online (Sandbox Code Playgroud)
conv=sparse 对 dd 至关重要,否则所有空间都将在您的目标精简池上进行配置,并且不再是精简池:-)。
验证您的新逻辑卷是否符合您的喜好。一旦 alles klarr,Kommissar 先生,您可以根据需要重命名您的新 LV,删除原始 LV(您在处理它之前确实备份了它,对吗?)等等。