我们用的虚拟机有时候用着用着就启动不起来了,可能是操作系统启动扇区出了问题或者硬盘数据损坏。如果还有重要的数据文件在虚拟机里面,不要慌,一般只是操作系统的问题,硬盘里面的文件一般是不会丢失损坏的,即使磁盘有损坏也是可以被修复的。
要拿回我们的重要数据,我们可以有两个种思路,一种是用一个新的操作系统,把旧的硬盘挂载到新的操作系统上,然后读取里面的数据。第二种思路是,其实都不用那么麻烦,虚拟硬盘本身就是一个文件,是不是有工具可以直接读取这个文件,然后把我们的文件提取出来。这两种想法都是正确的
就最近我遇到的虚拟硬盘数据恢复做一些总结,以后再遇到这样的问题就轻车熟路了。我遇到的问题其实很简单,就是用了好几年的centos7虚拟机启动不起来了,操作系统急救模式也进不去,切换内核也没有用,后来尝试了一些方法也无济于事,干脆就换个虚拟机好了。但是要紧的是用了那么多年,里面有很多重要的文件数据不能就没了。于是就打算自己恢复虚拟硬盘数据。
经验总结
首先给自己做了难么多尝试后总结一些经验,可能让很多对硬盘分区,文件系统不熟悉的读者遇到类似的问题时少走很多弯路。
(1)很多磁盘恢复、磁盘分区工具是可以直接读取虚拟机使用的虚拟磁盘文件(包括vdi,vmdk,vhd等格式的虚拟磁盘文件)的。比如windows下的diskgenius磁盘恢复工具,就可以直接打开这些虚拟磁盘文件,但是diskgenius并不支持所有的文件系统类型,比如Linux下常用的LVM文件系统类型,diakgenius就只能显示出虚拟磁盘文件里面的分区信息,无法读取分区里面的数据。
(2)vmware的虚拟磁盘映射功能,也和diskgenius一样,不支持LVM文件系统类型,只能识别出虚拟磁盘文件里面的分区信息,无法通过虚拟磁盘映射读取到分区里面的文件。
(3)如果虚拟磁盘文件使用的文件系统类型是ext4(一般是linux使用)、NTFS(一般是windows使用)这样的类型,可以直接使用diskgenius或者vmware的虚拟磁盘映射功能读取分区数据,然后就像访问本地文件夹那样,把需要的文件复制出来就可以了。
(4)由此看来,恢复磁盘数据的一个关键点是确定使用的文件系统类型,需要对症下药,并不是某个工具就能读取所有文件系统类型的数据。
(5)如果虚拟磁盘使用的文件系统是Linux LVM,就是我目前采用的方式:将虚拟磁盘文件挂载到一个新的虚拟机上然后做修复读取等操作
(6)virtualbox和vmware虚拟机本身就是可以挂载多块虚拟磁盘的,找到虚拟机-存储然后按步骤添加上另一块磁盘就可以了,虚拟机启动的时候就会给你挂载上去。刚开始的时候我还用共享文件夹的方式将windows下的vmdk文件共享给linux系统,其实没有这个必要。
Linux LVM简介
Linux LVM(Logical Volume Manager,逻辑卷管理)文件系统类型,有兴趣的可以自己去了解一下,这里只介绍几个要点:
(1)首先需要了解一下LVM中三个重要的名词
PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。它只是在物理分区中划出了一个特殊的区域,用于记载与LVM相关的管理参数。
VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。