LVM 导出和导入:如何将 VG 移动到具有同名卷组的另一台计算机

LVM 导出和导入:如何将 VG 移动到具有同名卷组的另一台计算机

我一直在VMWare服务器上使用VM linux(RHEL操作系统)。因此,我想将虚拟硬盘从一个虚拟机连接到另一个虚拟机。我怎样才能将其安装到新的虚拟机上?顺便说一句,我在两个 VM linux 上都使用 LVM。

旧机:

--- Physical volume ---

PV Name /dev/sdc -> VG Name u01_vg  -> LV Name u01_lv
PV Name /dev/sdd -> VG Name u01_vg  -> LV Name u01_lv

新机器:

--- Physical volume ---

PV Name /dev/sdb -> VG Name u01_vg  -> LV Name u01_lv
PV Name /dev/sdc -> VG Name u01_vg  -> LV Name u01_lv

我正在考虑如下的工作流程。我对么 ?如果我错了,请纠正我。

LVM 导出和导入工作流程:

  • 由于使用重复的卷组名称。首先在旧机器上重命名卷组

    • vgrename UUID 新_VG_名称
    • vgchange -ay New_VG_Name
  • 从旧虚拟 Linux/Unix 服务器卸载文件系统

    • umount /挂载点/
    • vgchange -新_VG_名称
    • vgeexport 新_VG_名称
    • 当机器下次关闭时,可以拔出磁盘,然后将其连接到新机器。
  • 将整个卷组移动到另一个系统

    • 光伏扫描
    • vgimport 新_VG_名称
    • vgchange -ay New_VG_Name
    • mkdir /旧数据/
    • 挂载 /dev/New_VG_Name/data_lv /olddata/

谢谢,

答案1

在您的场景中,vgexport/vgimport并不是真正必要的,正是因为您已经知道新机器中现有的 VG 名称。

要在旧系统上重命名 VG,您很可能需要先卸载并停用它,并且由于那里不存在 VG 名称冲突,因此您不必使用 VG UUID 代替旧 VG 名称(尽管如果你愿意的话也可以):

umount /mount-point/
vgchange -an Old_VG_Name
vgrename Old_VG_Name New_VG_Name
vgchange -ay New_VG_Name
<edit /etc/fstab to replace Old_VG_Name with New_VG_Name>
mount /mount-point

卸下磁盘之前:

<edit /etc/fstab to comment out/remove the line for the /mount-point/>
umount /mount-point/
vgchange -an Old_VG_Name   # technically the shutdown procedure would do this too

如果您在停用 VG 后执行此操作,甚至可以热拔出磁盘:

echo 1 > /sys/block/sdc/device/delete
echo 1 > /sys/block/sdd/device/delete

这告诉内核为这些设备即将发生的物理断开做好准备。 (如果您在虚拟机中使用半虚拟化驱动程序,则虚拟化主机可能会在热删除虚拟磁盘之前向驱动程序发送警告消息,从而无需执行此步骤。)

一旦磁盘移动到新系统,大多数发行版中的正常系统启动过程将自动执行pvscan和的等效项vgchange -ay,默认情况下自动激活所有不冲突的 VG。在这种情况下,您只需要创建一个挂载点目录,编辑/etc/fstab并挂载卷:

mkdir /olddata
<edit /etc/fstab>
mount /olddata

那么,您可能会问vgexport/的目的是什么?vgimport适用于不知道新系统中是否存在同名VG的情况。当导出 VG 时,磁盘上的 VG 元数据会被有效地标记为“跳过我”,因此 VG 将避免系统启动时的自动激活步骤,并且所有 LVM 管理命令将优先选择现有的未导出的 VG在新系统上,而不是可能命名冲突的新系统上,直到系统管理员开始重命名和导入它。vgimport删除此标记。它没有任何其他作用。

上述情况适用于 Linux LVM 版本 2,该版本从 2.6 内核系列开始就已存在。如果您处理 2.4.xx 或更旧的内核,您可能拥有 LVM 版本 1,其中vgexport/vgimport命令的工作方式可能有所不同(我不再记得这些细节)。

相关内容