我的系统中有 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 -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
?
答案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
意味着可逆转(无需将所有内容移回原来的位置)。