LV 拆分为多个 PV - 移动到一个 PV

LV 拆分为多个 PV - 移动到一个 PV

我的系统中有 3 个驱动器。它们都是一个VG内的PV。

这个VG里面有一些LV。其中之一相当大,跨越两个驱动器/PV。第三个驱动器足够大,可以容纳整个 LV,这就是我想要做的。

这就是我所说的,这是我的 PV(是的,我只是pvcreate在整个驱动器上运行,而不是在分区上运行):

/dev/sda -> 10TB drive
/dev/sdb -> 4TB drive
/dev/sdc -> 3TB drive

我有一个 VG,其中包含所有 3 个 PV 和一堆 LV。我只关心一个:

MyData -> 5TB LV

根据lsblk -fMyDataLV 已开启两个都 /dev/sdb/dev/sdc。基本上这个系统从一个驱动器开始,然后我添加了更多。我也从一个小的 LV 开始,并使用lvextend/lvresize将其变得更大。

我想做的是移动整体MyData/dev/sda。查看 的文档pvmove,我发现我可以这样做:

pvmove -n MyData /dev/sdb /dev/sda
pvmove -n MyData /dev/sdc /dev/sda

这应该能达到我想要的效果,对吗?

有没有办法用一个命令来做到这一点?可以tmux同时运行这两个命令吗?

这样做会使所有范围连续(而不是碎片化)吗/dev/sda

答案1

在最简单的情况下,是的,它就是这样工作的。

但是,如果您大量创建、删除 LV、调整 LV 大小,最终可能会出现范围碎片。在这种情况下,可能值得仔细研究一下。

# check where there is free space
pvs

# check in detail if free space is contiguous
pvdisplay --maps /dev/sda

# show LV segments that require moving, in order
lvs -o seg_le_ranges VG/LV

此时您应该清楚地将什么移动到哪里。


分步示例:

# pvdisplay --maps /dev/sdx1
  --- Physical volume ---
  PV Name               /dev/sdx1
  VG Name               HDD
  [...]
  Physical extent 10650 to 11174:
    FREE

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdz1:11128-11143
  MyData HDD /dev/sdz2:7450-7457 
  MyData HDD /dev/sdz3:0-11      

# pvmove -n HDD/MyData /dev/sdz1:11128-11143 /dev/sdx1:10650-11174
  /dev/sdz1: Moved: 100.00%

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdx1:10650-10665
  MyData HDD /dev/sdz2:7450-7457 
  MyData HDD /dev/sdz3:0-11      

# pvmove -n HDD/MyData /dev/sdz2:7450-7457 /dev/sdx1:10666-11174
  /dev/sdz2: Moved: 100.00%

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdx1:10650-10673
  MyData HDD /dev/sdz3:0-11      

# pvmove -n HDD/MyData /dev/sdz3:0-11 /dev/sdx1:10674-11174
  /dev/sdz3: Moved: 100.00%

# lvs -o lv_name,vg_name,seg_le_ranges HDD/MyData
  LV     VG  LE Ranges                       
  MyData HDD /dev/sdx1:10650-10685

如果您尝试并行运行两个实例pvmove,它将失败:

  Skipping locked LV VG/MyData.
  All data on source PV skipped. It contains locked, hidden or non-top level LVs only.
  No data to move for VG.

所以必须按顺序进行。否则它应该工作得很好。


一种完全不同的方法是只创建lvcreate一个新的 LV,复制数据,然后 - 一旦你确定副本是好的并且一切正常 -lvremove旧的。

基本上是老派的离线方法。它有缺点(您可能会复制错误,丢失数据),但也有优点:源文件系统保持不变,因此可以逆转,但并不pvmove意味着可逆转(无需将所有内容移回原来的位置)。

相关内容