![LVM 命令 - 在两个磁盘之间复制 LV](https://linux22.com/image/727334/LVM%20%E5%91%BD%E4%BB%A4%20-%20%E5%9C%A8%E4%B8%A4%E4%B8%AA%E7%A3%81%E7%9B%98%E4%B9%8B%E9%97%B4%E5%A4%8D%E5%88%B6%20LV.png)
我想简单地将 LV 从一个磁盘复制到另一个磁盘,但听起来很简单,经过大量谷歌搜索后,找到正确的流程对我来说变得非常抽象。所以我认为我需要朝着正确的方向努力。
-如何将 lv.root 移动到 md10,我得到提示,我需要扩展 vg.system 以覆盖 md10 和 md20,然后复制 lv。vg* 和 lv* 命令有很多种可能性,我不确定哪一个最适合此目的。
現象是:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 119.2G 0 disk
|-sda1 8:1 0 9M 0 part
`-sda2 8:2 0 119.2G 0 part
`-md0 9:0 0 119.2G 0 raid1
|-vg.system-lv.root 253:0 0 30G 0 lvm /
`-vg.system-lv.cache 253:1 0 80G 0 lvm /mnt/cdn-cache
sdb 8:16 0 119.2G 0 disk
|-sdb1 8:17 0 9M 0 part
|-sdb2 8:18 0 29.3G 0 part
| `-md10 9:10 0 29.3G 0 raid1
`-sdb3 8:19 0 90G 0 part
`-md20 9:20 0 89.9G 0 raid0
预期结果应该类似于 cca:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 119.2G 0 disk
|-sda1 8:1 0 9M 0 part
`-sda2 8:2 0 119.2G 0 part
`-md0 9:0 0 119.2G 0 raid1
|-vg.system-lv.root 253:0 0 30G 0 lvm /
`-vg.system-lv.cache 253:1 0 80G 0 lvm /mnt/cdn-cache
sdb 8:16 0 119.2G 0 disk
|-sdb1 8:17 0 9M 0 part
|-sdb2 8:18 0 29.3G 0 part
| `-md10 9:10 0 29.3G 0 raid1
vg.system-lv.root
`-sdb3 8:19 0 90G 0 part
`-md20 9:20 0 89.9G 0 raid0
-vg.system-lv.cache
我猜目的并不是那么重要,但以防万一 - 稍后我将格式化 sda2 并以与 sdb 相同的方式对其进行分区,然后将磁盘合并到准备好的 raid 池中,以期望从缓存分区获得更高的性能。
编辑:谢谢大家,我意识到尺寸略有偏差,所以我纠正了它,现在它完全匹配,奇怪的是尺寸不同 -
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 119.2G 0 disk
|-sda1 8:1 0 9M 0 part
`-sda2 8:2 0 119.2G 0 part
`-md0 9:0 0 119.2G 0 raid1
|-vg.system-lv.root 253:0 0 30G 0 lvm /
`-vg.system-lv.cache 253:1 0 80G 0 lvm /mnt/cdn-cache
sdb 8:16 0 119.2G 0 disk
|-sdb1 8:17 0 10M 0 part
|-sdb2 8:18 0 30G 0 part
| `-md10 9:10 0 30G 0 raid1
`-sdb3 8:19 0 80.1G 0 part
`-md20 9:20 0 80G 0 raid0
PV Name /dev/md0
VG Name vg.system
PV Size 119.17 GiB / not usable 1.31 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 30507
Free PE 2347
Allocated PE 28160
PV UUID 97qFfS-qcNo-Wp8W-QfWj-Ilqx-e7Jw-uMLXX7
--- Physical Segments ---
Physical extent 0 to 7679:
Logical volume /dev/vg.system/lv.root
Logical extents 0 to 7679
Physical extent 7680 to 28159:
Logical volume /dev/vg.system/lv.cache
Logical extents 0 to 20479
Physical extent 28160 to 30506:
FREE
--- Physical volume ---
PV Name /dev/md10
VG Name vg.system
PV Size 30.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 7679
Free PE 7679
Allocated PE 0
PV UUID gLYsRF-kNlb-F7c9-9BS5-Xi05-pfCY-z093pb
--- Physical Segments ---
Physical extent 0 to 7678:
FREE
--- Physical volume ---
PV Name /dev/md20
VG Name vg.system
PV Size 80.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 20479
Free PE 20479
Allocated PE 0
PV UUID vYljv8-tNc3-9jdE-p5rk-eI3y-8FVs-l1bCSF
--- Physical Segments ---
Physical extent 0 to 20478:
奇怪。我设法使用
pvmove -v -n lv.cache /dev/md20 /dev/md0
之前,然后我甚至将它放回 md0,因为之后我使用 gparted 来调整磁盘大小,以便总 PE 计数匹配并且没有发生溢出并继续。
我现在有两个问题。上面的命令不再起作用
pvmove -v -n lv.cache /dev/md20 /dev/md0
Cluster mirror log daemon is not running.
Wiping internal VG cache
Wiping cache of LVM-capable devices
Archiving volume group "vg.system" metadata (seqno 28).
Creating logical volume pvmove0
No data to move for vg.system
而且我也有点担心尺寸上的轻微不匹配,即 80G 到 80.1G,会在稍后组装到 RAID 池时产生问题 :/ 不确定为什么尺寸不同而总 PE 完全相同。
答案1
我认为,通过创建新卷并简单地复制数据可能会比尝试以下操作更好:
步骤大致如下(当然,没有经过测试,所以首先检查数据备份):
将新的块设备转换为适合 LVM 的存储
pvcreate /dev/md10 pvcreate /dev/md20
将新存储添加到名为“vg.system”的现有卷组
vgextend vg.system /dev/md10 vgextend vg.system /dev/md20
通常您现在将运行
pvmove /dev/md01
并将vgreduce vg.system /dev/md01
所有数据从 /dev/md01 移出,但想要控制哪些 lvm 数据去往何处,因此:我认为您可以更改现有的逻辑卷以使用特定的物理卷作为后端存储
lvconvert
:lvconvert --replace /dev/md01 vg.system/lv.root /dev/md10 lvconvert --replace /dev/md01 vg.system/lv.cache /dev/md20
确认进度
lvs -a -o name,copy_percent,devices
最后从 lv 卷组中删除 md01 块设备,所有数据都将被迁移。
vgreduce vg.system /dev/md01