早知道有这项技术,但以前磁盘空间压力没这么大,所以也就懒得折腾。现在换了纯SSD的电脑,还只有256G,自然是要关注一下虚拟机占磁盘的问题了。
听说有人预测2018上半年储存产品会降价,拭目以待——2017年11月25日
# 目标
安装一个纯净的基础系统(比如Win7
),将其磁盘用来做所有其他虚拟机的母盘。其他虚拟机所用的硬盘都只记录自己的磁盘相对母盘的差异。牺牲一点点性能换取磁盘空间利用率。
其实挺简单的,参考了这个帖子。原帖写的有点乱,整理一下。
VDI
,动态分配;注意事项:
以上都是为了尽量不在此母盘中留下专属于某台虚拟机的痕迹。洁癖。
安装Win7
时,VirtualBox会默认使用USB 2.0
控制器,在USB 3.0
的电脑下,会出现无法挂载USB 3.0
U盘的问题。如果在虚拟机设置中切换到USB 3.0
控制器,又会出现Win7
没有USB 3.0
驱动的问题——此时可以去下载安装Intel 提供的驱动,或者换一个USB 2.0
的U盘或者插口,或者放弃洁癖使用共享文件夹/增强工具来传输文件。
设置-储存
,移除刚刚装系统用的虚拟磁盘,但是不要删除文件;VBoxManage.exe
所在位置加入PATH
(或者写全路径直接调用)VBoxManage.exe C:\bucket\VirtualDisks\Win7Base.vdi --type immutable
,路径自己改;虚拟介质管理器
中,应该能看见此VDI
虚拟磁盘的类型变成了“不可改变”;或者也可以用命令行查看:
> VBoxManage.exe showhdinfo C:\bucket\VirtualDisks\Win7Base.vdi
UUID: xxx-xxxxx-xxxxx-xxxx
Parent UUID: base
State: created
Type: immutable
Location: C:\bucket\VirtualDisks\Win7Base.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 40960 MBytes
Size on disk: 8791 MBytes
Encryption: disabled
...
VDI
文件已经没了关系,删除虚拟机应该不会动VDI
文件;
据说,如果你怕不小心改了这个VDI
文件(它完蛋了所有基于它的虚拟机就全完蛋了),操作完了之后可以把它设置成只读文件。
VDI
文件;此时VirtualBox会自动创建一个基于它的差分盘;创建虚拟机完成之后可以在设置-储存
这里看到明细:
注意,此时位置
显示的是刚才的VDI
文件,但实质上差分数据都在虚拟机储存目录下Snapshots\{xxxx-xxx-xxx}.vdi
存着;
3. 开机,应该是可以成功开机的;由于磁盘ID变了,Win7
可能会要求你重启一次;
4. 然而此时重启时没有X用的,因为这种方法创建的虚拟磁盘默认开启了autoreset
功能,即关机后自动复原一切更改(其实这个功能在有些时候很有用);执行VBoxManage.exe modifyhd "C:\Users\xxxx\VirtualBox VMs\YourVMName\Snapshots\{xxxx-xxx-xxx}.vdi" --autoreset off
关闭此特性。
5. 以后,如果对此刚刚创建的虚拟机做快照,那么新产生的快照依然默认是开启了autoreset
的,需要用命令行手动关闭此特性,否则关机再开之后一切还原(重启之后貌似还在)。有点烦,好在这样的场景不多。但是必须注意这一点,否则再虚拟机里面搞了半天最后东西全没了不要怪我。
操作完成,开机想干点啥就干点啥吧。无论对这台虚拟机做什么,原来的VDI
文件都不会有任何改动——我对照过操作前后的md5
了。
如果需要其他的虚拟机,再按本小节目录执行一遍就行了,完全没有重新装系统的麻烦。当然增强功能什么的还是要再来一次的。