如何直接访问vmware vmdk文件中的内容

vmdk文件是vmware的虚拟磁盘文件。这个文件最开始出包含着虚拟磁盘的描述信息。可以使用cat命令来查看这些信息:

# 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命令将模块加载。

你可能感兴趣的:(vmware,linux,文档,工具,disk,磁盘)