磁盘的kvm部分镜像

磁盘的kvm部分镜像

我正在作为 KVM 主机运行 Linux 系统,并创建了一个运行旧 PC 物理磁盘的虚拟机(使用 --import)。该磁盘有多个分区,可双启动多个操作系统,还有一个暂存分区和一些视频数据……我真正想要虚拟化的是该磁盘上的 Linux 系统。我想我了解如何制作整个磁盘的映像,但我真正需要的只是 MBR、暂存区以及保存 / 和 /boot 的分区。有没有办法只将某些分区“提取”到映像中以进行虚拟化?我正在考虑暂时将感兴趣的分区复制到空白磁盘,安装 grub,然后对其进行虚拟化。但也许有更简单的方法来实现我想要的?

亲切的问候,

沃尔夫冈

答案1

假设包含旧 PC 系统的磁盘物理连接到 KVM 主机,您可以执行以下操作:

  1. 使用virshvirt-manager创建一个具有适当大小的磁盘映像文件和包含良好救援 CD 的 ISO 的虚拟机(我使用克隆齐拉或者gparted对于这样的事情。任何好的“实时”系统都应该可以。最好的不是使用任何发行版的安装程序 ISO)。

    不是尚未将物理硬盘附加到 VM。

  2. 使用 ISO 映像引导系统。根据需要对虚拟磁盘(可能位于/dev/vda虚拟机中)进行分区和格式化。将其安装为/target(以及其他分区,如果有的话,在 下/target

  3. 在 KVM 主机上,使用命令将包含旧系统的物理磁盘连接到 VM virsh attach-disk。您的问题中没有足够的详细信息来为您提供近似的命令行,但运行virsh help attach-disk以获取选项摘要。它最终会变成类似这样的内容:

    virsh attach-disk vmname /dev/sdX /dev/vdb --targetbus sata

    其中/dev/sdX是物理磁盘,/dev/vdb是虚拟机将看到的设备,目标总线将是 sata 或 scsi 甚至 virtio。

  4. 返回虚拟机,安装要虚拟化的操作系统分区/source以及该分区下的任何其他分区。将它们全部安装为只读,以mount -o ro /dev/vdbN /target/XXXXX防止拼写错误/错误。

  5. rsync -a /source/ /target(尾随//source/重要)

  6. umount下的一切/source。你不应该再需要它了。

  7. for i in proc dev sys dev/pts ; do mount -o bind /$i /target/$i done

    这确保了所有系统伪文件系统grub-install以及其他工具(例如lsblkblkid)所需的所有系统伪文件系统都是绑定安装的并且在chroot我们即将进入下一步的内部可见。

  8. chroot /target

  9. 编辑/etc/fstab以调整挂载条目以使用新的块设备名称(或标签或 UUID)。

    您可能想在此处更改其他内容,例如网络配置,或者您可能想将这些内容留到稍后基本系统运行时。我建议您保留所做的任何重大更改的副本,以防第一次事情进展不顺利而您必须重试。或者,只需记下您更改的内容,以便您知道在必须重新开始时需要做什么。

  10. grub-install /dev/vda

  11. exit # 离开 chroot 并返回到救援 CD 映像上的 shell。

  12. for i in proc dev/pts dev proc sys; do umount /target/$i ; done

  13. umount下的一切/target

  14. 在 KVM 主机上,使用 分离额外的磁盘virsh detach-disk

您现在应该能够重新启动虚拟机。您可能需要告诉它从硬盘而不是 ISO 映像虚拟“CD-ROM”启动。

相关内容