精简 LV 可以移动到不同的 LVM 池吗?

tgh*_*old 6 lvm

如果我在同一个卷组中有 (2) 个精简池 (vg/pool1) 和 (vg/pool2),第一个池中有一个 LV,是否有 LVM 命令将该 LV 移动到第二个池?pvmove 会这样做吗?

或者,如果您有一个分布在两个不同 PV 上的精简 LVM 池,您能否使用 pvmove 命令轻松指定 LV X 的所有范围都应从 PV Y 移动到 Z?

Mik*_*e S 6

我尝试使用 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(您在处理它之前确实备份了它,对吗?)等等。