前 言
window10电脑重新安装C盘。重装前正常使用的VirtualBox虚拟机,启动失败,先是启动报各种找不到{uuid.vmdk}
文件的错误,使用原来的虚拟机配置文件虽然能正常启动,但是关闭虚拟机后,xxx.vbox
配置文件的快照顺序又被自动清掉,导致又不能正常使用。 折腾了好久,特此记录一下。
恢复过程
1、备份文件:
- 备份C盘VirtualBox.xml全局配置文件,比如我的目录:
C:\Users\HZL\.VirtualBox\VirtualBox.xml
- 备份虚拟机文件,比如我的:
E:\Program Files (x86)\Oracle\VirtualBox VMs\HZL_default_1591694534017_91720\
- 如果使用
vagrant up
的方式启动的VirtualBox,则还需要备份C:\Users\HZL\.vagrant
和
C:\Users\HZL\.vagrant.d
和
C:\Users\HZL\.Vagrantfile
vagrant 配置文件
2、重新安装Virtualbox后,将 VirtualBox.xml
文件拷贝覆盖原文件
C:\Users\HZL\.VirtualBox
C:\Users\HZL\.vagrant
C:\Users\HZL\.vagrant.d
3、Virtualbox界面,选择"管理——虚拟介质管理器",手动添加注册虚拟介质
注意: 有快照的话,需要按照层级先后顺序,依次注册。如果不记得顺序的话,顺序可以参考 “HZL_default_1591694534017_91720.vbox
”配置文件或者
C盘的VirtualBox.xml
全局配置文件,里面有写原来的介质顺序。
类似这样:
按照顺序注册添加后,直接点击关闭(不要点“刷新”,否则白填),效果如下:
注册时完成,示意图如下,状态显示“已关闭”,右侧注册的快照信息正常显示,代表成功。
(我之前缺少了注册的这一步,导致我的虚拟机只能正常启动一次,等关闭了虚拟机后,我的“HZL_default_1591694534017_91720.vbox
”配置文件快照顺序,就会被覆盖掉,丢失了快照绑定顺序就报错各种找不到{uuid.vmdk}
,导致启动不了。"xxx.vbox"配置文件注释也说明了,不要手动修改该文件,还是要以图形化界面管理来自动修改xxx.vbox
配置文件比较好靠谱,所以这一步不能缺少。)
4、Virtualbox界面,选择"控制-注册”,注册虚拟机
如果你有提前打开VirtualBox.xml
文件,注册完成之后,你就会发现此时C:\Users\HZL\.VirtualBox\VirtualBox.xml
VirtualBox.xml全局配置文件也会随之修改更新。
5、Virtualbox界面,选择"设置——存储 & 系统启动顺序 "【缺少这步,启动虚拟机会报错FATAL:NO bootable medium found!System halted.】
左侧选中某个虚拟机,点击“设置”,进入虚拟机设置图形化界面,存储——控制器——添加。
选中,刚才注册添加的虚拟介质硬盘
我这里添加绑定了2块虚拟硬盘
设置 ——系统 ,设置系统启动加载顺序。VirtualBox默认光盘、软盘启动优先,建议:设置为硬盘启动优先。
6、启动虚拟机成功
配置完成以上步骤以后,就算完成了,就算反复重启虚拟机,也能正常启动,关键还是图形化界面把快照和介质相关的信息固定到了
“HZL_default_1591694534017_91720.vbox
”和C:\Users\HZL\.VirtualBox\VirtualBox.xml
文件中。
7、恢复 vagrant up
方式启动虚拟机
- 安装 vagrant
- 拷贝并覆盖
C:\Users\HZL\.vagrant
C:\Users\HZL\.vagrant.d
C:\Users\HZL\.Vagrantfile
vagrant 配置文件
如果没有覆盖这些文件,你发现vagrant up
启动的是新的虚拟机示例,跟你原来的虚拟机无法绑定。
# 启动默认的虚拟机
$ vagrant up
# 启动指定虚拟机
$ vagrant up web1
# 关闭指定虚拟机
$ vagrant halt web1
设置 vagrant 多实例启动的配置模板。
备份C:\Users\HZL\.Vagrantfile
文件,并修改它,
如下模板,定义了3个实例,
Vagrant.configure("2") do |config|
config.vm.define "default" do |default|
default.vm.box = "centos7"
default.vm.network "private_network", ip: "192.168.56.10"
default.vm.host_name = "default"
default.vm.synced_folder "E:/Program Files (x86)/Vagrant/share_data", "/vagrant_data",
type: "rsync",
rsync__args: ["--verbose", "--rsync-path='sudo rsync'", "--archive", "--delete", "-z"]
default.vm.provider "virtualbox" do |v|
v.memory = "4096"
v.cpus = 1
end
end
config.vm.define "web1" do |web1|
web1.vm.box = "centos7"
web1.vm.network "private_network", ip: "192.168.56.11"
web1.vm.host_name = "web1"
web1.vm.synced_folder "E:/Program Files (x86)/Vagrant/share_data", "/vagrant_data",
type: "rsync",
rsync__args: ["--verbose", "--rsync-path='sudo rsync'", "--archive", "--delete", "-z"]
web1.vm.provider "virtualbox" do |v|
v.memory = "4096"
v.cpus = 1
end
end
config.vm.define "web2" do |web2|
web2.vm.box = "centos7"
web2.vm.network "private_network", ip: "192.168.56.12"
web2.vm.host_name = "web2"
web2.vm.synced_folder "E:/Program Files (x86)/Vagrant/share_data", "/vagrant_data",
type: "rsync",
rsync__args: ["--verbose", "--rsync-path='sudo rsync'", "--archive", "--delete", "-z"]
web2.vm.provider "virtualbox" do |v|
v.memory = "4096"
v.cpus = 1
end
end
end
多实例启动时,指定别名启动,命令分别为:
vagrant up default
vagrant up web1
vagrant up web2
启动后,使用 VirtualBox管理器查看,已经有多个实例存在: