首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LV分裂成多个PV -移动到一个PV

LV分裂成多个PV -移动到一个PV
EN

Unix & Linux用户
提问于 2021-02-16 22:49:13
回答 1查看 630关注 0票数 4

我的系统里有三个驱动器。它们都是一个VG内部的PVs。

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

下面是我要说的,这是我的PVs (是的,我只是在整个驱动器上运行pvcreate,而不是分区):

代码语言:javascript
运行
复制
/dev/sda -> 10TB drive
/dev/sdb -> 4TB drive
/dev/sdc -> 3TB drive

我有一个VG和所有3个这样的PVs和一堆LVs。我只关心一件事:

代码语言:javascript
运行
复制
MyData -> 5TB LV

根据lsblk -f的说法,MyData LV同时位于/dev/sdb/dev/sdc上。基本上,这个系统从一个驱动器开始,我增加了更多。我还从一个小LV开始,并使用lvextend/lvresize使其更大。

我想要做的是将整个MyData移动到/dev/sda。查看pvmove的文档,我发现我可以做到:

代码语言:javascript
运行
复制
pvmove -n MyData /dev/sdb /dev/sda
pvmove -n MyData /dev/sdc /dev/sda

这应该能做我想做的对吧?

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

这样做会使/dev/sda上的所有区段都是连续的(而不是分段的)吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-02-17 00:51:55

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

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

代码语言:javascript
运行
复制
# 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

在这一点上,您应该有一个明确的想法,什么移动到哪里。

一步一步的例子:

代码语言:javascript
运行
复制
# 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实例,它将失败:

代码语言:javascript
运行
复制
  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并不是可逆的(不将所有内容移回原来的位置)。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/634878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档