前段时间用Ubuntu虚拟机写程序,调试的时候不知道怎么把虚拟机给搞坏了,虚拟机关机后就无法正常启动。但一些重要的数据还在虚拟机里面,得想办法把数据取出来。
VMware虚拟机内的文件都存储在vmdk格式的虚拟磁盘文件中,打开虚拟机所在的目录,可以找到这些虚拟磁盘文件。虚拟磁盘文件的名称一般以虚拟机的名称开头,比如我的虚拟机名称为Ubuntu01
,对应的虚拟磁盘文件就是下图中的这些。
Ubuntu01.vmdk
这个不带后缀的文件实际上是一个纯文本文件,里面存储了虚拟磁盘的各种描述信息,有了这些信息软件才可以正常读取虚拟磁盘。文件名中带有s00x
后缀的是真正存储数据的文件。要取出虚拟机里的数据实际上就是要打开vmdk文件。经过我测试可行的打开vmdk文件的方法有两种:1. 使用DiskGenius软件 2. 使用正常运行的虚拟机挂载虚拟磁盘。
1. 使用DiskGenius软件(适用于Windows虚拟机)
可能是文件系统不同的原因,DiskGenius只能读取Ubuntu虚拟机虚拟磁盘的目录结构,不能复制里面的数据。但可以正常读取和复制Windows虚拟机虚拟磁盘内的文件。
首先,打开DiskGenius软件,点击工具栏的磁盘,选择打开虚拟磁盘文件,找到vmdk文件打开。
打开后,在主界面左边可以看到虚拟磁盘的目录结构,右边可以对文件进行各种操作。
要取出数据,右键点击文件,复制到指定文件夹即可。
2. 使用正常运行的虚拟机挂载虚拟磁盘(适用于Linux虚拟机)
首先需要一台可以正常运行的Linux虚拟机。在VMware中,选择编辑虚拟机设置,添加一个硬盘。
磁盘类型选要打开的vmdk的类型,一般都是默认的SCSI。
选择“使用现有虚拟磁盘”。
选择原来的虚拟磁盘文件,注意这里要选择不带后缀的那个vmdk文件。完成添加磁盘。
运行虚拟机,使用fdisk命令查看磁盘分区。
sudo fdisk -l
在输出结果里找到新添加的磁盘,我这里是/dev/sdb
。可以看到磁盘有三个分区,最大的sdb3
是存储文件的分区。
Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 sectors Disk model: VMware Virtual S Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 8D1FD725-00E4-4AA4-B4EE-453C0986E9B2 Device Start End Sectors Size Type /dev/sdb1 2048 4095 2048 1M BIOS boot /dev/sdb2 4096 1054719 1050624 513M EFI System /dev/sdb3 1054720 104855551 103800832 49.5G Linux filesystem
sudo mkdir /mnt/sdb3 sudo mount /dev/sdb3 /mnt/sdb3
文章评论