我的系统里有三个驱动器。它们都是一个VG内部的PVs。
在这个VG里面有几个LVs。其中一个相当大,跨越两个驱动器/PV。第三个驱动器足够大,足以容纳整个LV,这就是我想要做的。
下面是我要说的,这是我的PVs (是的,我只是在整个驱动器上运行pvcreate
,而不是分区):
/dev/sda -> 10TB drive
/dev/sdb -> 4TB drive
/dev/sdc -> 3TB drive
我有一个VG和所有3个这样的PVs和一堆LVs。我只关心一件事:
MyData -> 5TB LV
根据lsblk -f
的说法,MyData
LV同时位于/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
上的所有区段都是连续的(而不是分段的)吗?
发布于 2021-02-17 00:51:55
在最简单的情况下,是的,它就是这样工作的。
但是,如果您大量地创建、删除和调整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
并不是可逆的(不将所有内容移回原来的位置)。
https://unix.stackexchange.com/questions/634878
复制相似问题