使用 LVM 将数据从许多小型驱动器移至一个大驱动器

使用 LVM 将数据从许多小型驱动器移至一个大驱动器

使用的空间我有这样构建的LVM

NAME                         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0                           11:0    1 1024M  0 rom
vda                          252:0    0   10G  0 disk
└─vda1                       252:1    0   10G  0 part /
vdb                          252:16   0   10G  0 disk
└─pro103-home--files (dm-2)  253:2    0   10G  0 lvm  /home/pro103by
vdc                          252:32   0   50G  0 disk
└─pro103by--sql-mysql (dm-1) 253:1    0   90G  0 lvm  /data
vdd                          252:48   0   30G  0 disk
└─dbbackup-data (dm-0)       253:0    0   30G  0 lvm  /dbbackup
vde                          252:64   0   30G  0 disk
└─pro103by--sql-mysql (dm-1) 253:1    0   90G  0 lvm  /data
vdf                          252:80   0   10G  0 disk
└─pro103by--sql-mysql (dm-1) 253:1    0   90G  0 lvm  /data
vdg                          252:96   0  150G  0 disk
└─vdg1                       252:97   0  150G  0 part

pro103by-sql 卷组中包含的驱动器

lvs -o +devices /dev/pro103by-sql/mysql
  LV    VG           Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  mysql pro103by-sql -wi-ao---- 89.99g                                                     /dev/vdc(0)
  mysql pro103by-sql -wi-ao---- 89.99g                                                     /dev/vde(0)
  mysql pro103by-sql -wi-ao---- 89.99g                                                     /dev/vdf(0)

已用空间

pvs -o+pv_used
  PV         VG           Fmt  Attr PSize   PFree   Used
  /dev/vdb   pro103       lvm2 a--u  10.00g   4.00m  9.99g
  /dev/vdc   pro103by-sql lvm2 a--u  50.00g      0  50.00g
  /dev/vdd   dbbackup     lvm2 a--u  30.00g      0  30.00g
  /dev/vde   pro103by-sql lvm2 a--u  30.00g      0  30.00g
  /dev/vdf   pro103by-sql lvm2 a--u  10.00g      0  10.00g
  /dev/vdg1  pro103by-sql lvm2 a--u 150.00g 150.00g     0

我需要将数据从所有三个驱动器 - /dev/vdc /dev/vde /dev/vdf 移动到一个更大的驱动器 我知道如何使用 pvmove 将数据从一个驱动器移动到另一个驱动器,但不确定这在这种情况下是否有效。

答案1

免责声明:做好备份。

由于前 3 个 PV 上使用的空间总和 (50+30+10=80g) 小于第 4 个 PV 上的可用空间 (150g),因此这是可能的。

这不是一项复杂的任务,(第一个和)第二个示例pvmove的手册页适合您的情况:

将指定 PV 上的简单 LV 使用的所有物理盘区移至 VG 中其他位置的可用物理盘区。

pvmove /dev/sdb1

移动物理范围时使用特定的目标 PV。

pvmove /dev/sdb1 /dev/sdc1

因此适合您的情况,这可以通过三个命令完成,一次一个:

pvmove /dev/vdc /dev/vdg1
pvmove /dev/vde /dev/vdg1
pvmove /dev/vdf /dev/vdg1

手册页还告诉这不应该对单个 LV 并行完成。不会造成任何伤害,但所有动作都不会完成,并且必须再次运行:

如果多个 pvmove 正在从不同源 PV 移动数据,则可以同时运行多个 pvmove,但额外的 pvmoves 将忽略任何已经在更改过程中的 LV,因此某些数据可能不会被移动。

这可以在数据库运行的情况下在线完成(在幕后,该pvmove操作通过使用临时镜像映射等确保平滑迁移。详细信息请参阅手册页的注释.)。但是,如果这不是保持服务运行所必需的,那么最好在执行备份之前进行备份并使数据库脱机:这样可以在出现不可预见的问题时从备份进行回滚。

/dev/vdg1然后,您可以通过运行以下命令之一来验证所有数据是否确实在 PV 中:

pvdisplay --maps

或者具体来说:

pvdisplay --maps /dev/vdc
pvdisplay --maps /dev/vde
pvdisplay --maps /dev/vdf
pvdisplay --maps /dev/vdg1

然后将仅显示/dev/vdg1(all for /dev/pro103by-sql/mysql) 中使用的物理范围。

正交命令为:

lvdisplay --maps /dev/pro103by-sql/mysql

这将表明它的所有逻辑范围都在 中/dev/vdg1

相关内容