# cat test.vmdk
# Disk DescriptorFile
version=1
CID=fffffffe
parentCID=ffffffff
createType="twoGbMaxExtentSparse"
# Extent description
RW 4192256 SPARSE "test-s001.vmdk"
RW 4192256 SPARSE "test-s002.vmdk"
RW 2101248 SPARSE "test-s003.vmdk"
# The Disk Data Base
#DDB
ddb.adapterType = "ide"
ddb.geometry.sectors = "63"
ddb.geometry.heads = "16"
ddb.geometry.cylinders = "10402"
同时这个文件中还包含着文件系统的数据,那么怎样在不启动虚拟操作系统的前提下来访问vmdk中的文件系统内容呢?vmware提供了一套虚拟磁盘工具包,该包中有一个工具叫vmware-mount,借助于该工具我们就可以直接访问vmdk中的内容了。下面简单介绍一下vmware-mount的用法:
1. 列出vmdk中的分区信息
# vmware-mount -p "Red Hat Enterprise Linux 5.vmdk"
Nr Start Size Type Id Sytem
-- ---------- ---------- ---- -- ------------------------
1 63 208782 BIOS 83 Linux
2 208845 16563015 BIOS 8E Unknown
该vmdk中包含了一个LVM分区,被显示成了Unknown。
2. 将vmdk中的特定分区mount到一个目录
#vmware-mount "Red Hat Enterprise Linux 5.vmdk" 1 /mnt/rhel5
该命令将第一个分区mount到/mnt/rhel5
3.以flat方式将vmdk mount到一个目录
除了指定分区序号的方式来mount外,vmware-mount还支持将整个vmdk文件以flat的方式mount到一个目录。
#vmware-mount -f "Red Hat Enterprise Linux 5.vmdk" /mnt/rhel5
此时你可以在/mnt/rhel5下面看到一个叫flat的文件
# ls -l
total 8388608
-rw------- 1 root root 8589934592 Feb 4 15:35 flat
# file flat
flat: x86 boot sector; partition 1: ID=0x83, active, starthead 1, startsector 63, 208782 sectors; partition 2: ID=0x8e, starthead 0, startsector 208845, 16563015 sectors, code offset 0x48
不难看出我们完全可以将这个flat文件当成是一块硬盘来看待,甚至我们可以用fdisk来查看分区信息
# fdisk -l flat
last_lba(): I don't know how to handle files with mode 8180
You must set cylinders.
You can do this from the extra functions menu.
Disk flat: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
flat1 * 1 13 104391 83 Linux
flat2 14 1044 8281507+ 8e Linux LVM
Partition 2 has different physical/logical endings:
phys=(1023, 254, 63) logical=(1043, 254, 63)
我尝试着将这个flat文件dd到一块真实的硬盘上,并修改initrd(为什么要修改initrd的原因在于,通过vmware安装的系统会加载vmware自己磁盘驱动,即buslogic或者lsi,如果想从物理机启动的话则需要加载另外的磁盘驱动)然后我把这块磁盘装到一台物理机上面,启动成功!
4.列出系统中用vmware-mount加载的分区
# vmware-mount -L
Disks with mounted partitions:
/root/vmware/Red Hat Enterprise Linux 5/Red Hat Enterprise Linux 5.vmdk /mnt/rhel5/flat
5.unmount已经加载的分区
# vmware-mount -d /mnt/rhel5
vmware-mount命令还有一些其它的选项,在此不再一一介绍,它甚至还支持将远程的vmdk文件加载到本地。有兴趣的话可以去vmware的官方网站下载文档研究一下。
另外需要注意的是该工具包需要FUSE(filesystem in userspace)的支持,因此要先安装FUSE并确保已经用modprob fuse命令将模块加载。