我有 XEN 4.0.xx 和 Cent os 5.5
/var/lib/xen/images 目录中存储了 dom0 上每个 VM 的 .image 文件。它是硬盘上的某个块,我可以从 dom0 挂载此文件并访问 dom0 的文件系统。
我真正想要做的是挂载虚拟机的文件系统,并访问 /etc/sysconfig/network-scripts 目录。有什么办法可以做到吗?
我尝试直接使用“mount -o loop /var/lib/xen/images/VMname.img”,但它无法询问文件系统类型。我使用“file”命令没有得到此映像的任何文件系统类型。此映像是可访问文件还是 XEN 创建的某种二进制或系统文件。如果它是一个二进制文件,我认为我们对它无能为力。但如果它是可访问格式,我们可以对它做些什么。我想知道我可以用什么方法做到这一点。
答案1
虚拟机映像更像是一个完整的硬盘,而不是可以挂载的单个文件系统,这意味着它有一个分区表。您可以使用该kpartx
工具使所有分区都可以挂载,如下所示:
# kpartx -av /var/lib/xen/images/VMname.img
add map loop0p1 : 0 29333504 linear /dev/loop0 2048
add map loop0p5 : 0 1380352 linear /dev/loop0 29337600
# mount /dev/mapper/loop0p1 /mnt
完成并卸载所有分区后,可以使用以下命令将它们从设备映射器中删除:
# kpartx -d /var/lib/xen/images/VMname.img
(注:例子摘自http://ppadala.net/blog/2010/09/kpartx-to-mount-vm-disk-images/)
如需进行更广泛的修改,您可能希望查看客鱼工具。
答案2
从上面的评论中可以看出,我无法挂载第二个循环,因为它又是一个 LVM 分区。我终于找到了一种方法来挂载 VM.img 文件并从 Dom-0 在客户机上进行任何配置。
请按照以下步骤挂载映像文件:
第一场火灾扫描命令在 dom-0 上,它将为您提供当前在 dom-0 上处于活动状态的逻辑卷。现在您可以放心地假设该命令显示的卷号属于您的 dom-0 机器,而不是任何客户的卷号。
现在执行kpartx -av /var/lib/xen/images/$machine_name.img 该命令将为VM的映像文件映射循环并激活客户VM的VolumeGroup。
现在又开火扫描命令,除了步骤 1 中看到的之外,您还将看到一个以上的 VolGroup。现在您可以确定这是您的客户虚拟机的卷组。
现在您应该知道 VolumeGroup 中的逻辑卷,以便成功挂载它。为此,请执行命令 vgchange -ay /VolGroup00(步骤 2 中新创建的卷组)/
现在执行命令 lvs,这将为您提供 VolGroup 中的逻辑卷。
现在创建一个挂载点并挂载您想要挂载的任何逻辑卷,如下所示
挂载 /dev/VolGroup00/LogVol00 $mount_path
现在,您可以通过这种方式访问 Guest VM 的任何目录并修改所需的任何配置。完成后,您可以按照相反的步骤进行操作,例如
a) 卸载 $mount_path
b)vgchange -an VolGroup00
c)kpartx -d /var/lib/xen/images/$machine_name.img
您已完成